在RichTextBox 控制項中鍵入文字時,您可以想要即時突出顯示特定關鍵字或不需要的單字。為了實現這一點,通常會在每次按鍵時呼叫函數,這可能會導致單字和遊標過度閃爍。
在這種情況下,停用重繪是建議的解決方案,以最大限度地減少視覺幹擾。實現此目的的一種方法是重寫“WndProc”函數並攔截重繪訊息。但是,如果您使用的函數需要傳遞 RichTextBox 參數,則此方法變得具有挑戰性。
另一個解決方案是利用「BeginUpdate」和「EndUpdate」方法,它們允許您抑制繪製和觸發修改完文字後即可。不幸的是,這些方法並沒有在 RichTextBox 類別中公開。
要解決此疏忽,您可以透過建立繼承自 RichTextBox 的自訂類別來自行來新增這些方法。將以下程式碼貼到新增至專案中的新類別:
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; }
編譯後,將 MyRichTextBox 控制項從工具箱拖曳到表單上。或者,您可以在更新 RichTextBox 文字之前和之後直接使用 WM_SETREDRAW 訊息呼叫 SendMessage 函數。
以上是即時輸入時RichTextBox中的文字高亮顯示時如何消除閃爍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!