[VB.Net]problême avec la position du cruseur quand je fais une recherche dans un

Résolu
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 19 mai 2007 à 18:59
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 20 mai 2007 à 10:09
alut tous le monde, voila, j'ai un code qui permet de faire une recherche dans un richtextbox, le but est que, lorsqu'on trouve telle chaine, on l'a mette de telle couleur. Auccun problême à ce niveau là, le blême, c'est que sa fait une recherche des que le texte du richtextbox change, et, le truc, c'est que des que je tape un truc au clavier, je me retrouve en bas du texte, embettant.
Je ne souhaitte pas me retrouver en haut non plus, j'aiemerais que le curseur (l'endroit ou j'écris) reste à sa position.
En claire, au fur et à mesure que j'écris, la recherche s'effectue sans qu'on se retrouve tout en bas du richtextbox, qu'elle ne se voix pas quoi. Voila mon code:

    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Try

            coloreMots(RichTextBox1, "<html>", Color.Blue)
            coloreMots(RichTextBox1, "</html>", Color.Blue)
            coloreMots(RichTextBox1, "<head>", Color.Blue)
            coloreMots(RichTextBox1, "</head>", Color.Blue)
            coloreMots(RichTextBox1, "", Color.Blue)
            coloreMots(RichTextBox1, "", Color.Blue)
            coloreMots(RichTextBox1, "</title>", Color.Green)
            coloreMots(RichTextBox1, "<title>", Color.Green)
            coloreMots(RichTextBox1, "<title>", Color.Green)
            coloreMots(RichTextBox1, "[ & " & "" & "]", Color.DarkOrange)
            coloreMots(RichTextBox1, "", Color.DarkOrange)
            coloreMots(RichTextBox1, "", Color.Indigo)
            coloreMots(RichTextBox1, "*", Color.Black)

        Catch E9 As Exception'Si il y a des erreur
            ToolStripStatusLabel2.Text = "Des erreurs ont été détectées"
            Debogue.ListBox1.Items.Add(E9.Message)
            Debogue.ShowDialog()
        End Try
    End Sub

    Private Sub coloreMots(ByVal obj As Object, ByVal txt As String, ByVal clr As Color)

        Dim rtb As RichTextBox = CType(obj, RichTextBox)
        Dim idx, dep As Integer

        dep = 0
        Do
            idx = rtb.Find(txt, dep, RichTextBoxFinds.WholeWord)
            If Not (idx < 0) Then
                rtb.SelectionStart = idx
                rtb.SelectionLength = txt.Length
                rtb.SelectionColor = clr
                dep = idx + txt.Length
                rtb.DeselectAll()
            Else
                Exit Do
            End If
        Loop
        rtb.Update()
    End Sub

Vous l'avez surment remarqué, c'est pour faire un éditeur html, si vous avez un truc qui fait comme la recherche colorisé que Dreamweaver par exemple, sa m'arrangerai plutôt qu'un code de fortune. Et, au passge, si vous avez un truc pour que la recherche s'effectue un peut plus rapidement...

Voila

Merci d'avance

Bye

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://jbaudoux.club.fr/veler/

9 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 mai 2007 à 19:06
- Avant le Try, tu sauvegarde la valeur de la propriété SelStart
- Au Try..Catch, tu rajoute une clause Finaly, dans laquelle tu restaure la valeur de SelStart et tu met SeLenght à 0

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
19 mai 2007 à 20:16
Ralala, Casy, c'est facilement la 100em fois que j'accepte une de tes réponse, t'es trop fort. Merci, y reste un truc, mais c'est mineur, c'est juste que en revenant à la ligne, sa tréssaute un peu parceque la recherche passe au dessus du scroll, mais c'est pas gênant, sa fonctionne, merci.
Euh, t'as une adresse msn?

Bye

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://jbaudoux.club.fr/veler/
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
19 mai 2007 à 21:00
Oups, new problême, admettons que j'ai le texte suivant:

salut, comment sa va? nous ons est en pleine forme!!! on est content d'être ici...

lol, euh, j'ai remarquer qu'avec le code que j'avais, je pouvais, par exemple, coloré la chaine "<html>" uniquement si c'était la seul chaine présente dans la ligne du texte. Comment faire pour que, dans la phrase ci-dessus, colorer uniquement les lettre "m", et, aussi, comment colorer tous e qui est entre les caractère ? et ! sachant que je ne connais pas le nbr de caractère entre les deux...

Voila

Merci d'avance

Bye

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://jbaudoux.club.fr/veler/
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 mai 2007 à 22:01
prennons le second cas, il te faut récupéré l'index du ? le donné à la propriété SelStart
récupéré l'index du !, faire la différence avec l'index du ? récupéré juste avant. Le résultat de la diff devient la valeur de SelLenght

Pour le problèe de "<html>" modifie le parametre de recherche WholeWord. Avec ce parametre tu ne recheche que des mots complets, c'est à dire encadré par des espace ou signe de ponctuation. Pour toi ce n'est pas bon puisque <html> peut ne pas etre suivi ou précédé d'espace.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
20 mai 2007 à 09:01
salut, merci, pour le <html>, c'est parfait, sa fonctionne, mais pour ? et !, c'est autre chose, je pense que je m'y prend mal, j'en fait quoi de la différence après?

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://jbaudoux.club.fr/veler/
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 mai 2007 à 09:14
Je l'ai dit : "...Le résultat de la diff devient la valeur de SelLenght..."

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
20 mai 2007 à 09:21
ba justement, c'est la que sa ... . pffff, j'ai remarqué un new truc, quand j'écris pas exemple <html>, tous ce que j'écris ensuite et qui est sur la même ligne a une couleur.

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://jbaudoux.club.fr/veler/
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 mai 2007 à 09:37
Donc :
i = index de ?
j = index de !
.SelectionStart = i
.SelectionLenght = j - i

Pour ton html, ça viens du fait que lorsque tu colore ta balise html, en suite tu ne remodifie pas la couluer de la selection, tu lui laisse celle qe tu as donné à la balise. Donc tout le texte tappé à la suite sera de la même couleur.

Si tu as suivi ce que je t'as dis plus haut, tu as du rajouter une clause Finaly au Try...Catch. Donc dans cette clause après avoir réinitialiser la sélection, tu rajoute une ligne pour réinitialiser aussi la couleur de la selection :
TaRTB.SelectionColor = TaRTB.ForeColor

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
20 mai 2007 à 10:09
Re, merci, j'ai plus rien à dire pour html, mais pour l'autre, il me dit que la convention double n'est pas valide

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://jbaudoux.club.fr/veler/
0
Rejoignez-nous