


Comment puis-je optimiser la repeinture de RichTextBox pour la mise en évidence de la syntaxe en temps réel ?
Jan 06, 2025 am 03:01 AMDésactivation de Repaint pour la mise en évidence de la syntaxe RichTextBox en temps réel
Dans certains scénarios de programmation, vous devrez peut-être mettre en surbrillance dynamique des mots-clés ou des mots spécifiques dans un RichTextBox au fur et à mesure que l'utilisateur tape. Cependant, repeindre constamment peut provoquer un scintillement et un inconfort lors de la saisie.
Pour améliorer l'expérience utilisateur, vous pouvez désactiver la repeinture automatique de RichTextBox pendant que vous modifiez son texte. Malheureusement, la classe RichTextBox standard ne fournit pas de méthodes intégrées pour cela.
Personnalisation de RichTextBox avec une classe externe
Une solution consiste à créer une classe RichTextBox personnalisée cela ajoute la fonctionnalité manquante. Voici un exemple :
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; }
Vous pouvez ensuite utiliser les méthodes BeginUpdate() et EndUpdate() dans votre fonction personnalisée qui met en évidence les mots-clés en temps réel :
void HighlightKeywords(MyRichTextBox richTextBox) { richTextBox.BeginUpdate(); // Highlight keywords and bad words richTextBox.EndUpdate(); }
Directement Contrôler Repaint à l'aide de P/Invoke
Vous pouvez également contourner l'utilisation d'une classe personnalisée et contrôler directement repeindre en utilisant la méthode SendMessage avec le message WM_SETREDRAW.
Avant de mettre à jour le texte de la RichTextBox :
[DllImport("user32.dll")] static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); const int WM_SETREDRAW = 0x0b; // (Disable repainting) SendMessage(richTextBox.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
Après la mise à jour du texte de la RichTextBox :
// (Enable repainting) SendMessage(richTextBox.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); richTextBox.Invalidate();
Cette approche vous permet pour obtenir le même résultat sans modifier la classe standard RichTextBox.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Gulc: Cibliothèque C construite à partir de zéro

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Utilisation distincte et partage de phrases

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?
