禁用 RichTextBox 语法突出显示的重绘
在用户输入期间在 RichTextBox 中执行语法突出显示时,解决闪烁问题需要禁用重绘。
目前效率低下解决方案
当前的解决方案涉及重写“WndProc”函数来拦截和抑制重绘消息。但是,这种方法对于使用提供的 RichTextBox 的外部函数来说并不实用。
克服监督
更有效的方法是添加缺少的 BeginUpdate 和 EndUpdate 方法到 RichTextBox 类。这些方法生成 WM_SETREDRAW 消息以抑制重画。
添加方法
使用以下代码在项目中创建一个新类:
using System; using System.Windows.Forms; using System.Runtime.InteropServices; class MyRichTextBox : RichTextBox { public void BeginUpdate() { SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); } public void EndUpdate() { SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); this.Invalidate(); } [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); private const int WM_SETREDRAW = 0x0b; }
使用
您现在可以使用这些方法在语法突出显示功能中禁用和启用重画。
替代解决方案
如果无法将方法添加到类中,您还可以使用P/在更新文本之前和之后直接调用“SendMessage”函数。
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); // Disable repainting // Update text SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); // Enable repainting this.Invalidate();
以上是如何消除语法高亮期间 RichTextBox 闪烁?的详细内容。更多信息请关注PHP中文网其他相关文章!