„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man RichTextBox Flackering beim Hervorheben der Syntax beseitigen?

Wie kann man RichTextBox Flackering beim Hervorheben der Syntax beseitigen?

Gepostet am 2025-04-17
Durchsuche:110

How to Eliminate RichTextBox Flickering During Syntax Highlighting?

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 ();

Neuestes Tutorial Mehr>

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