Während Sie Text in ein RichTextBox-Steuerelement eingeben, können Sie dies tun Sie möchten bestimmte Schlüsselwörter oder unerwünschte Wörter in Echtzeit hervorheben. Um dies zu erreichen, wird normalerweise bei jedem Tastendruck eine Funktion aufgerufen, was zu übermäßigem Flackern von Wörtern und dem Cursor führen kann.
In diesem Zusammenhang ist die Deaktivierung von Repaint eine vorgeschlagene Lösung, um visuelle Ablenkungen zu minimieren. Eine Methode hierfür besteht darin, die Funktion „WndProc“ zu überschreiben und die Repaint-Nachricht abzufangen. Wenn die von Ihnen verwendete Funktion jedoch die Übergabe eines RichTextBox-Parameters erfordert, wird dieser Ansatz zu einer Herausforderung.
Eine alternative Lösung besteht darin, die Methoden „BeginUpdate“ und „EndUpdate“ zu nutzen, mit denen Sie das Malen und Auslösen unterdrücken können es, sobald Sie mit der Änderung des Textes fertig sind. Leider werden diese Methoden in der RichTextBox-Klasse nicht verfügbar gemacht.
Um dieses Versehen zu beheben, können Sie diese Methoden selbst hinzufügen, indem Sie eine benutzerdefinierte Klasse erstellen, die von RichTextBox erbt. Fügen Sie den folgenden Code in eine neue Klasse ein, die Ihrem Projekt hinzugefügt wurde:
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; }
Nach der Kompilierung legen Sie das MyRichTextBox-Steuerelement aus der Toolbox auf Ihrem Formular ab. Alternativ können Sie die SendMessage-Funktion direkt mit der WM_SETREDRAW-Nachricht vor und nach der Aktualisierung des RichTextBox-Textes aufrufen.
Das obige ist der detaillierte Inhalt vonWie kann ich Flimmern beim Hervorheben von Text in einer RichTextBox während der Echtzeiteingabe beseitigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!