gpt4 book ai didi

c# - RichTextBox ScrollToCaret 的结果不一致

转载 作者:太空狗 更新时间:2023-10-29 18:02:46 38 4
gpt4 key购买 nike

我正在使用 C# 中的 RichTextBox。它存在于 TabPage 上。选择 TabPage 后,我的目标是填充 RichTextBox,然后滚动到末尾。我尝试了针对这个常见问题的解决方案的细微变化,主要的是:

MyRichTextBox.Select(MyRichTextBox.Text.Length, 0);  
MyRichTextBox.ScrollToCaret();

或者:

MyRichTextBox.SelectionStart = MyRichTextBox.Text.Length;  
MyRichTextBox.ScrollToCaret();

这会产生不一致的结果,尽管是以一种可预测的方式。它将在滚动到底部和滚动到距离底部少一行之间交替。分别说明(对不起链接,新用户所以我不能发布图片):
Successfully scrolled to bottom
Scrolled to one line short of the bottom
我很惊讶在我的搜索中没有发现任何提及这种行为的信息,因此我决定询问这里是否有人遇到过这种情况,和/或是否有解决方案。如果归结为它,我想我可以按照 itsmatt's answer 的方式去做。 .

最佳答案

我对 ScrollToCaret 做了一些进一步的实验,但它并不是每次都在相同的位置结束。由于我的目标仅限于一直滚动到底部,因此它是将 WM_VSCROLL 消息(277 或 0x115)发送到控件的一个很好的候选者,wParam 为 SB_PAGEBOTTOM (7)。这完全按照我的需要一直滚动到最底部:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
private const int WM_VSCROLL = 277;
private const int SB_PAGEBOTTOM = 7;

public static void ScrollToBottom(RichTextBox MyRichTextBox)
{
SendMessage(MyRichTextBox.Handle, WM_VSCROLL, (IntPtr)SB_PAGEBOTTOM, IntPtr.Zero);
}

关于c# - RichTextBox ScrollToCaret 的结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8535102/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com