首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向富文本框中写入新数据时,滚动到底部

向富文本框中写入新数据时,滚动到底部
EN

Stack Overflow用户
提问于 2012-02-24 00:01:40
回答 5查看 128.9K关注 0票数 91

我的程序调用Java,然后将标准输出重定向到一个RichTextBox。我的问题是,每次写入数据时,垂直滚动条总是位于框的顶部。

即使您滚动到底部,一旦写入了新数据,它也会转到顶部。我想要相反的。

因此,当写入新数据时,它会留在底部。我该怎么做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-24 02:11:31

可以,您可以使用ScrollToCaret()方法:

// bind this method to its TextChanged event handler:
// richTextBox.TextChanged += richTextBox_TextChanged;
private void richTextBox_TextChanged(object sender, EventArgs e) {
   // set the current caret position to the end
   richTextBox.SelectionStart = richTextBox.Text.Length;
   // scroll it automatically
   richTextBox.ScrollToCaret();
}
票数 174
EN

Stack Overflow用户

发布于 2014-02-01 05:39:48

如果RichTextBox具有焦点,并且您使用AppendText添加信息,则它将一直滚动到末尾。如果您将HideSelection设置为False,它将在失去焦点时保留其选择,并保持自动滚动。

我设计了一个使用以下方法的日志查看器GUI。它使用了一个完整的核心来跟上。删除此代码并将HideSelection设置为False后,CPU使用率降至1-2%。

//Don't use this!
richTextBox.AppendText(text);  
richTextBox.ScrollToEnd();
票数 26
EN

Stack Overflow用户

发布于 2018-05-08 23:04:32

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

    internal static void ScrollToBottom(RichTextBox richTextBox)
    {
        SendMessage(richTextBox.Handle, WM_VSCROLL, (IntPtr)SB_PAGEBOTTOM, IntPtr.Zero);
        richTextBox.SelectionStart = richTextBox.Text.Length;
    }

ScrollToBottom(richTextBox);

通过使用上述方法,您可以将富文本框滚动到底部

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9416608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档