Die aktuelle Lösung beinhaltet, die Funktion "wndProc" zu überschreiben, um Repaint -Nachrichten abzufangen und zu unterdrücken. Dieser Ansatz ist jedoch nicht praktisch für externe Funktionen, die mit einem bereitgestellten Richtextbox arbeiten.
überwinden die Aufsicht
Ein effektiverer Ansatz ist, den fehlenden Ansatz in den Richtextbox -Klasse hinzuzufügen. Diese Methoden generieren die wm_setRedraw -Nachricht, um das Wiederholen zu unterdrücken.
Hinzufügen der Methoden
Erstellen Sie eine neue Klasse in Ihrem Projekt mit dem folgenden Code:mit System; mit System.Windows.Forms; mit System.Runtime.Interopervices; Klasse 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 statische externe intptr sendMessage (INTPTR HWND, INT MSG, INTPTR WP, INTPTR LP); private const int wm_setRedraw = 0x0b; }
useage
Sie können diese Methoden jetzt verwenden, um das Neulackieren in Ihrer Syntax -Hervorhebung zu deaktivieren und zu aktivieren. Funktion direkt vor und nach der Aktualisierung des Textes.
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); // Neulackierung deaktivieren // Text aktualisieren SendMessage (this.handle, wm_setredraw, (intptr) 1, intptr.zero); // Neulackierung aktivieren this.invalidate ();
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3