Désactivation de la coloration syntaxique pour la mise en évidence de la syntaxe RichTextBox
Lors de la mise en évidence de la syntaxe dans une RichTextBox lors de la saisie de l'utilisateur, la résolution du scintillement nécessite la désactivation de la repeinture.
Actuellement inefficace Solution
La solution actuelle consiste à remplacer la fonction "WndProc" pour intercepter et supprimer les messages de repeinture. Cependant, cette approche n'est pas pratique pour les fonctions externes travaillant avec une RichTextBox fournie.
Surmonter la surveillance
Une approche plus efficace consiste à ajouter les méthodes BeginUpdate et EndUpdate manquantes. à la classe RichTextBox. Ces méthodes génèrent le message WM_SETREDRAW pour supprimer le repainting.
Ajout des méthodes
Créez une nouvelle classe dans votre projet avec le code suivant :
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; }
Utilisation
Vous pouvez désormais utiliser ces méthodes pour désactiver et activez la repeinture dans votre fonction de coloration syntaxique.
Solution alternative
Si l'ajout des méthodes à la classe n'est pas possible, vous pouvez également utiliser le P/Invoke "SendMessage" fonctionner directement avant et après la mise à jour du texte.
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); // Disable repainting // Update text SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); // Enable repainting this.Invalidate();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!