use*_*745 67 c# richtextbox winforms
我的程序调用Java,然后将stdout重定向到a RichTextBox.我的问题是,每次写入数据时,垂直滚动条始终位于框的顶部.
即使您滚动到底部,一旦写入新数据,它就会转到顶部.我想反其道而行之.
因此,当写入新数据时,它会保持在底部.我怎样才能做到这一点?
Oma*_*mar 137
是的,您可以使用以下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();
}
Run Code Online (Sandbox Code Playgroud)
123*_*ing 18
我会保持简单:
将HideSelection属性设置为false
使用AppendText()方法向 RichTextBox 添加文本。
代码:
RichTextBox rtbTest;
void InitRichTextBox()
{
//Init rtbTest...
rtbTest.HideSelection = false;//Hide selection so that AppendText will auto scroll to the end
}
void AddText(string txt)
{
rtbTest.AppendText(txt);
}
Run Code Online (Sandbox Code Playgroud)
DrW*_*rWu 15
如果RichTextBox具有焦点并且使用AppendText添加信息,则它将保持滚动到最后.如果将HideSelection设置为False,它将在失去焦点时保持其选择并保持自动滚动.
我设计了一个使用以下方法的Log Viewer GUI.它使用了一个完整的核心保持.摆脱此代码并将HideSelection设置为False后,CPU使用率降至1-2%
//Don't use this!
richTextBox.AppendText(text);
richTextBox.ScrollToEnd();
Run Code Online (Sandbox Code Playgroud)
[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;
}
Run Code Online (Sandbox Code Playgroud)
ScrollToBottom(richTextBox);
通过使用上述方法,您可以将富文本框滚动到底部
| 归档时间: |
|
| 查看次数: |
98785 次 |
| 最近记录: |