リアルタイム RichTextBox 構文強調表示の再描画の無効化
特定のプログラミング シナリオでは、キーワードや特定の単語を動的に強調表示する必要がある場合があります。ユーザーが入力するときの RichTextBox。ただし、再描画を頻繁に行うと、入力中にちらつきや不快感が生じる可能性があります。
ユーザー エクスペリエンスを向上させるために、テキストの編集中に RichTextBox の自動再描画を無効にすることができます。残念ながら、標準の RichTextBox クラスには、このための組み込みメソッドが提供されていません。
外部クラスを使用した RichTextBox のカスタマイズ
1 つの解決策は、カスタム 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; }
その後、リアルタイムでキーワードを強調表示するカスタム関数で BeginUpdate() メソッドと EndUpdate() メソッドを使用できます。
void HighlightKeywords(MyRichTextBox richTextBox) { richTextBox.BeginUpdate(); // Highlight keywords and bad words richTextBox.EndUpdate(); }
直接P/Invoke を使用した再描画の制御
または、カスタム クラスを使用し、WM_SETREDRAW メッセージで SendMessage メソッドを使用して再描画を直接制御します。
RichTextBox のテキストを更新する前:
[DllImport("user32.dll")] static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); const int WM_SETREDRAW = 0x0b; // (Disable repainting) SendMessage(richTextBox.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
RichTextBox のテキストを更新した後:
// (Enable repainting) SendMessage(richTextBox.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); richTextBox.Invalidate();
このアプローチにより、標準の RichTextBox クラスを変更せずに同じ結果を達成できます。
以上がリアルタイムの構文強調表示のために RichTextBox の再描画を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。