Csharp/C#教程:禁用RichTextBox自动滚动分享


禁用RichTextBox自动滚动

我正在使用RichTextBox控件来显示应用程序日志。 我通过几次调用RichTextBox :: AppendText方法每秒更新一次控制。 对我来说真正烦人的是光标一直滚动到文本的最后一行。 当用户需要分析开头的日志时,它非常不舒服。 我试过以下解决方案来解决我的问题:

int pos = tb_logs.SelectionStart; tb_logs.AppendText("log message"); tb_logs.SelectionStart = pos; 

这不是问题的核心,因为控制正在被定期重绘,这非常分散注意力。 有一些清洁的解决方案吗?

如果您在添加日志文本时向下滚动“垂直滚动”问题,但您希望它始终处于最佳状态:

您必须向VScroll,TextChanged事件添加事件处理程序,并在事件处理程序中将滚动设置为顶部

 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_HSCROLL替换WM_VSCROLL,用SB_LEFT替换SB_TOP

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

你可以试试tb_logs.SelectionLength = 1; 以及SelectionStart。 这将从您的当前位置中选择1个字符。

没试过……但可能会奏效

上述就是C#学习教程:禁用RichTextBox自动滚动分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

www.ctvol.com true Article Csharp/C#教程:禁用RichTextBox自动滚动分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1022458.html

(0)
上一篇 2022年1月7日 上午4:20
下一篇 2022年1月7日 上午4:22

精彩推荐