停用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; }
使用
使用使用
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中文網其他相關文章!