当使用 richtextbox 方法“ScrollToCaret”时,我需要知道滚动条是否到达了顶部/底部边距。
这是因为当垂直滚动条完全滚动到底部时,如果我再次使用“ScrollToCaret”方法,那么它会在控件中产生奇怪的视觉效果,因为它尝试并重试向下滚动,但没有更多内容可以滚动,我无法理解 richtextbox 控件的这种奇怪逻辑。
我希望你能理解我,原谅我的英语。
PS:我使用的是默认的 richtextbox 垂直滚动条。
最佳答案
你必须稍微处理一下“Win32”。
“win32”中的“GetScrollInfo”方法就是您要找的。
使用“GetScrollInfo”方法,您可以获得以下 RichTextBox 滚动属性:
- 最大范围,
- 现职
- 缩略图大小(即 RichTextBox“页面”大小)。
公式:
Max Position = Max Range - Thumb size
请看下面的例子:
// Add the reference:
// using System.Runtime.InteropServices;
// Define an extension method for this purpose:
public static class RichTextBoxExtension
{
[DllImport("user32")]
private static extern int GetScrollInfo(IntPtr hwnd, int nBar,
ref SCROLLINFO scrollInfo);
public struct SCROLLINFO
{
public int cbSize;
public int fMask;
public int min;
public int max;
public int nPage;
public int nPos;
public int nTrackPos;
}
public static bool ReachedBottom(this RichTextBox rtb)
{
SCROLLINFO scrollInfo = new SCROLLINFO();
scrollInfo.cbSize = Marshal.SizeOf(scrollInfo);
//SIF_RANGE = 0x1, SIF_TRACKPOS = 0x10, SIF_PAGE= 0x2
scrollInfo.fMask = 0x10 | 0x1 | 0x2;
GetScrollInfo(rtb.Handle, 1, ref scrollInfo);//nBar = 1 -> VScrollbar
return scrollInfo.max == scrollInfo.nTrackPos + scrollInfo.nPage;
}
}
//Usage:
if (!yourRichTextBox.ReachedBottom())
{
yourRichTextBox.ScrollToCaret();
//...
}
关于c# - 如何知道RichTextBox垂直Scrollbar是否达到最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19343794/