Désactivation de Repaint pour la mise en évidence de la syntaxe en temps réel dans RichTextBox
Vous devez mettre en surbrillance les mots-clés et les gros mots dans une RichTextBox pendant que l'utilisateur tape, mais le scintillement excessif provoqué par une repeinture constante est préoccupant. Cependant, la méthode standard pour remplacer la fonction "WndProc" et intercepter le message de repaint nécessite un sous-classement, ce qui n'est pas réalisable.
Heureusement, vous pouvez résoudre ce problème en étendant vous-même les fonctionnalités de la classe RichTextBox. Voici comment :
Créez une classe RichTextBox personnalisée :
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; }
Utilisez le contrôle personnalisé :
Désactiver la repeinture :
myRichTextBox1.BeginUpdate();
Activer la repeinture :
myRichTextBox1.EndUpdate();
En utilisant Grâce au contrôle RichTextBox personnalisé, vous pouvez désormais mettre en évidence des mots-clés et des gros mots en temps réel sans le scintillement gênant provoqué par la repeinture automatique.
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!