Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 禁用RichTextBox自动滚动_C#_Richtextbox_Refresh_Autoscroll - Fatal编程技术网

C# 禁用RichTextBox自动滚动

C# 禁用RichTextBox自动滚动,c#,richtextbox,refresh,autoscroll,C#,Richtextbox,Refresh,Autoscroll,我正在使用RichTextBox控件显示应用程序日志。我每秒更新一次控件,只需调用几次RichTextBox::AppendText方法。真正让我恼火的是光标一直滚动到文本的最后一行。当用户需要分析刚开始的日志时,这种情况非常不舒服。我尝试了以下解决问题的方法: int pos = tb_logs.SelectionStart; tb_logs.AppendText("log message"); tb_logs.SelectionStart = pos; 这并不是问题的核心,因为控制被周期性

我正在使用RichTextBox控件显示应用程序日志。我每秒更新一次控件,只需调用几次RichTextBox::AppendText方法。真正让我恼火的是光标一直滚动到文本的最后一行。当用户需要分析刚开始的日志时,这种情况非常不舒服。我尝试了以下解决问题的方法:

int pos = tb_logs.SelectionStart;
tb_logs.AppendText("log message");
tb_logs.SelectionStart = pos;
这并不是问题的核心,因为控制被周期性地重新绘制,这非常分散注意力。是否有更干净的解决方案?

如果您的问题是在添加日志文本时“垂直滚动”向下滚动,但您希望它始终位于顶部:

您必须将事件处理程序添加到VScroll、TextChanged事件,并在事件处理程序中将滚动设置为top

richTextBox1.VScroll += HandleRichTextBoxAdjustScroll;
richTextBox1.TextChanged += HandleRichTextBoxAdjustScroll;

private const UInt32 SB_TOP = 0x6;
private const UInt32 WM_VSCROLL = 0x115;

[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
private static extern bool PostMessage(IntPtr hWnd, UInt32 Msg,
    IntPtr wParam, IntPtr lParam);

private void HandleRichTextBoxAdjustScroll(Object sender,
    EventArgs e)
{
    PostMessage(handle, WM_VSCROLL, (IntPtr)SB_TOP, IntPtr.Zero);
}
您也可以对水平滚动条执行相同的操作。将WM_VSCROLL替换为WM_HSCROLL,将SB_TOP替换为SB_LEFT

private const UInt32 WM_HSCROLL = 0x0114;
private const UInt32 SB_LEFT = 0x06;

您可以尝试tb_日志。SelectionLength=1;以及SelectionStart。这将从当前位置选择1个字符


没有试过……但可能有用

这听起来有点奇怪,因为应该在某个地方明确地完成结尾。您确定追加代码不会将选择设置为结束本身吗?不,只是AppendText(“text”)、AppendText(“t”)、AppendText(“n”),我发现了一件有趣的事情。只有当文本区域具有焦点时,才会发生自动滚动。在点击文本区域后,出现了问题。如果我不点击它,我可以在添加新消息的同时使用滚动条滚动消息,并且文本不会跳转。请参阅,其中描述了相同的问题。