Lenteur de colorisation - RichTextBox
Bonjour,
J'ai développé un code de "colorisation de code PHP". Le code fonctionne à merveille, je suis partis sur un algo 'personnel' sans trop suivre ceux existant pour faire ce genre de script mais je suis content de moi. j'arrive a coloriser 35 000 caratères en 350Ms en moyenne.
Seulement j'ai un gros soucis.
Ma fonction permettant de colorier met 350Ms mais en ajoutant l'affichage et le raffraichissement de la richTextBox le temps passe à une ou deux secondes :s
Très désagréable lorsque l'on change le texte a colorier ( imaginer si Word réfléchissait deux secondes avant d'afficher le caratère que vous venez de saisir... )
En gros, ma fonction se présente sous cette forme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
' rtb est un RichTextBox qui n'est pas affichée a l'écran,
' il me sert à creer le 'code' RTF.
Dim rtb as new RichTextBox
public function Colorier( ByRef code_source as string ) as String
rtb.text= code_source
' on applique l'algo...
'et pour colorier un mot, je procéde de cette manière:
with rtb
.SelectionStart = x
.SelectionLength = y
.SelectionColor= color.blue
end with
' a la toute fin de cette fonction,
' je renvoi le text en rtf:
return rtb.rtf
End Function |
l'appel de la fonction depuis le programme principal se fait de cette manière:
Soit 'RTBcode', la RichTextBox affichée a l'écran et qui accueil le code source php.
RTBcode.rtf=colorier(RTBcode.text)
Toute cette partie me prend en moyenne 350Ms.
Seulement a l'affichage, comme je le vous disait, la Richtextbox met une à deux secondes avant de se raffraichir.
Quelqu'un aurait une idée pour améliorer le raffraichissement ?
J'ai tenté en mettant :
Code:
1 2 3 4
|
rtb.SuspendLayaout()
'...
rtb.ResumeLayaout() |
Mais sa n'a pas vraiment réduit ce laps de temps.
Deuxième petite question:
Plutôt que d'utiliser:
Code:
1 2 3 4 5 6
|
with rtb
.SelectionStart = x
.SelectionLength = y
.SelectionColor= color.blue
end with |
Serais-ce plus rapide si, au lieu de procèder comme précédement, j'écrivait moi même le code RTF dans une chaine de caratère ?
( remplacer le RichTextBox rtb en une chaine de caratère et écrire moi même le code RTF brut )
Désolé pour le post un peu long ^^
et merci