Richtextbox - coloration syntaxique [Résolu]

Signaler
Messages postés
20
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
7 août 2009
-
Messages postés
227
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
26 avril 2012
-
Bonjour tout le monde,


Je sollicite votre aide concernant l'utilisation de richtextbox. J'ai
fais une fonction qui doit changer la couleur d'une partie de mon texte
dans ma RTB :

ma fonction :

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->PublicFunction changecouleur(ByVal rtb As RichTextBox, ByVal chaineatrouver AsString, ByVal Lcolor As System.Drawing.Color)
 
Dim longeurchaine AsInteger = Microsoft.VisualBasic.Len(chaineatrouver)
Dim debutchaine AsInteger = rtb.Find(chaineatrouver, RichTextBoxFinds.MatchCase)
'on fait un saut de ligne pour les prochaines lignes
rtb.Text = rtb.Text & vbCrLf
rtb.Focus()
'on selectionne la chaine a colorier
rtb.Select(debutchaine, longeurchaine)
rtb.SelectionColor = Lcolor
rtb.DeselectAll()
'on place le curseur a la fin
rtb.SelectionStart = rtb.Text.Length
 
EndFunction
 

<!-- END TEMPLATE: bbcode_code -->Jusque là ca va, quand je fais appel
a ma fonction ca marche j'ai mon texte en couleur, mais si j'appel a
nouveau ma fonction avec un nouveau texte, seul cette nouvelle chaine
est colorée. L'autre revient en noire.

Avez vous des idées sur le pourquoi du comment?

Merci d'avance.

 

10 réponses

Messages postés
20
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
7 août 2009

Ca y est j'ai trouvé voici ma nouvelle fonction :

  

 
Public Function changecouleur(ByVal t As ArrayList, ByVal rtb As RichTextBox, ByVal chaineatrouver As String, ByVal Lcolor As System.Drawing.Color)
        Dim longeurchaine As Integer
        Dim debutchaine As Integer
        'on fait un saut de ligne pour les prochaines lignes
        rtb.Text = rtb.Text & vbCrLf
        Dim item As String
        t.Add(chaineatrouver) 'on ajoute la chaine dans le tableau
        'rtb.SelectedText = vbCrLf
        For Each item In t
            'MsgBox("item debut : " & item)
            longeurchaine = Microsoft.VisualBasic.Len(item)
            debutchaine = rtb.Find(item, RichTextBoxFinds.MatchCase)
            rtb.Select(debutchaine, longeurchaine)
            rtb.SelectionColor = Lcolor
            rtb.DeselectAll()
        Next
        'on place le curseur a la fin
        rtb.SelectionStart = rtb.Text.Length
        rtb.Focus()
    End Function

et j'ai créer un variable dans mon module :

Public arrayimg, arrayvideos As New ArrayList() 'declaration des array pour qu'il soit accessible a tous le programme

et j'appelle ma fonction comme ci :

changecouleur(array, rtb, strimg, Color.Orange)


 Merci a vous pour votre aide
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Salut,


Regarde cette source si elle peut te venir en aide....


A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
a cause de rtb.Text = rtb.Text
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
faire :

rtb.SelText = vbCrLf

(propriété a adapter a .Net)
Messages postés
20
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
7 août 2009

Je ne suis pas suis que cela soit du  au rtb.text=rtb.text & vbcrlf
car quand je le supprime c'est la meme chose
Messages postés
20
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
7 août 2009

Merci pour l'info, je suis en train de voir ca. J'ai sorti les paguai... c'est un autre niveau
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
depend du reste du code ton appli...

tu ne dois pas faire de RTB.Text =

sinon, le TextRTF est remis à 0
Messages postés
20
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
7 août 2009

ok je vais voir aussi de ca coté

 
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
1 novembre 2010
5
Bonsoir,


Tu peux aussi t’essayer aux expressions régulières.


Ainsi ta <s>fonction</s> , Sub serait courte et rapide comme
suit :









   

Shared

Sub
changecouleur(ByVal rtb As RichTextBox, ByVal
chaineatrouver AsString,
ByVal Lcolor As
Color)








       
Dim reCherchText As
Regex = New Regex("[\s\r\n]*"
& chaineatrouver)






       
Dim mReCherchText As
Match = reCherchText.Match(rtb.Text)






       
Dim mcReCherchText As
MatchCollection = reCherchText.Matches(rtb.Text)






       
With rtb






           
For
Each
mReCherchText In mcReCherchText






                .Select(mReCherchText.Index,
mReCherchText.Length)






               

.SelectionColor
= Lcolor






           
Next







       
End
With







   
End
Sub
















Sans oublier d’importer l’espace
de nom : 





Imports

System.Text.RegularExpressions













« reCherchText »
est la chaîne à coloriser, on y ajoute un ou plusieurs





espaces,
retours chariot ou nouvelles lignes qui peuvent exister dans





ton
expression à rechercher.





« Match »
est la recherche cas par cas dans le texte.





« MatchColletion »
regroupe l’ensemble des occurances trouvées.






 
 







Enfin la boucle parcourre ces
occurances et les met en couleur.






 






Bonne continuation.
Messages postés
227
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
26 avril 2012

Bonsoir,

J'ai testé ce bout de code et, lorsque l'on fait un del, enter, fleche... du clavier, ou lorsque l'on click au milieu du texte pour le modifier, le curseur est figé. y'a t'il une solution ?

Merci
Bonne soirée