IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Remplacer une ligne par une autre dans un RichTextBox


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Façonnier
    Inscrit en
    Août 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Façonnier
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Remplacer une ligne par une autre dans un RichTextBox
    Bonjour Ô maîtres de la connaissance

    Savez-vous comment en VB 2010 dans un contôle richtextbox remplacer une ligne par une nouvelle. J'ai trouvé tout plein de commandes très intéressantes sur ce contrôle, mais pas celle dont j'ai besoin dans ce cas précis.
    Au cours de mes recherches (plusieurs jours) J'ai trouvé des personnes qui avaient le même souci que moi, mais qui n'ont pas obtenu de réponse ou encore, le summum, une qui a trouvé la solution et qui explique dans le détail d'un doigt sûrement parfaitement réjoui :
    "J'ai trouvé la solution"
    et sur ce... sujet résolu. Point final.

    J'ai essayé une solution qui pourtant me paraissait logique en changeant la ligne qui m'intéresse dans un tableau. Ce tableau a récupéré toutes les lignes du richtextbox nommé ici "rtbDoc" de cette manière
    Je me pensais que l'on pourrait faire le contraire de cette manière mais non...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rtbDoc.Lines(leNuméroDeLigneAChanger) = tableau(leNuméroDeLigneAChanger)
    Par avance, merci pour le partage de votre savoir. Merci aussi de vous intéresser à cette énigme très vachement importante quant à ce qui concerne l'humanité, et enfin merci pour votre attention et les réponses qui ne vont pas tarder à pleuvoir j'en suis certain.

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonjour,

    en modifiant directement via la propriété lines ca ne fonctionne pas mais en copiant lines dans un tableau de string, puis en modifiant ce tableau et en le réassignant à lines, là ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ' Ne fonctionne pas
            Debug.WriteLine(RichTextBox1.Lines(2))
            RichTextBox1.Lines(2) = "Ca ne fonctionne pas."
            Debug.WriteLine(RichTextBox1.Lines(2))
        End Sub
     
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            ' Fonctionne
            Debug.WriteLine(RichTextBox1.Lines(2))
            Dim tabStr = RichTextBox1.Lines
            tabStr(2) = "ca fonctionne bien"
            RichTextBox1.Lines = tabStr
            Debug.WriteLine(RichTextBox1.Lines(2))
        End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Façonnier
    Inscrit en
    Août 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Façonnier
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Bonjour Sankassssss
    Je charge mon fichier RTF dans le RichTextBox1 et ton
    ton code fonctionne. C'est à dire que le changement se fait dans le RichTextBox1, mais à l'enregistrement avec la méthode (save) il n'enregistre pas la modification et le fichier RTF n'a connu aucun changement.

    alors que...
    si je copie le tableau, "tabStr" chez toi, avec la ligne modifiée, dans une variable "var1"
    et que...
    je vide le RichTextBox1 de son contenu "obsolète"
    et que...
    je me serve de la méthode "RichTextBox1.text"
    et que...
    je réaffecte le contenu de la variable "var1" dans le RichTextBox1
    et que...
    J'enregistre avec la méthode "RichTextBox1.save" là, je trouve ma modification effective dans le fichier rtf.

    Je ne comprends pas trop en fait pourquoi tout ce tralala qui est mien fonctionne alors que ta méthode fonctionne quant à ce qui est le changement dans le RichTextBox1, mais pas lors de l'enregistrement.

    J'ai finalement trouvé une solution qui fonctionne avec ce que je viens de décrire, de loin, beaucoup plus lourde qu'un simple changement de ligne. Je me demande si avec un fichier de plusieurs milliers de lignes, la routine ne connaitrait pas un "ramage" certain lors de la recopie du fichier entier à chaque modification.
    Peut être je n'ai pas bien saisi ton prog... En tout cas je ne peux enregistrer le changement dans le fichier. Si tu as une idée, parce que je ne suis pas sûr que ma solution soit la meilleure sur le marché...
    Merci en tout cas.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Salut

    ce n'est pas si simple parce quand tu remplaces ta ligne par un text
    la ligne est bien remplacée mais tu perds le font original
    supposons que chaque ligne a un font et une couleur différente
    et en plus pour faciliter je suppose dans la meme ligne le font et la couleur
    sont les memes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      Private Sub Replaceline(ByVal linenum As Integer, ByVal Replacedtext As String)
            Dim tabstr() As String
            tabstr = RichTextBox1.Lines
            Dim listfont As New List(Of Font)
            Dim listcolor As New List(Of Color)
            Try
                tabstr(linenum) = Replacedtext
                'je conserve le font et la couleur de chaque ligne
                For iter = 0 To RichTextBox1.Lines.Length - 1
                    RichTextBox1.GetFirstCharIndexFromLine(iter)
                    RichTextBox1.Select(RichTextBox1.GetFirstCharIndexFromLine(iter), RichTextBox1.SelectionLength)
                    listfont.Add(RichTextBox1.SelectionFont)
                    listcolor.Add(RichTextBox1.SelectionColor)
                Next
                RichTextBox1.Lines = tabstr
                'je remet le font et la couleur
                For iter = 0 To RichTextBox1.Lines.Length - 1
                    RichTextBox1.GetFirstCharIndexFromLine(iter)
                    RichTextBox1.Select(RichTextBox1.GetFirstCharIndexFromLine(iter), RichTextBox1.Lines(iter).Length)
                    RichTextBox1.SelectionFont = listfont(iter)
                    RichTextBox1.SelectionColor = listcolor(iter)
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    il y a peut etre plus simple

  5. #5
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Salut,
    Je charge mon fichier RTF dans le RichTextBox1 et ton
    ton code fonctionne. C'est à dire que le changement se fait dans le RichTextBox1, mais à l'enregistrement avec la méthode (save) il n'enregistre pas la modification et le fichier RTF n'a connu aucun changement.
    Revérifie car chez moi la solution de Sankasssss marche très bien (cf source si tu doute)
    Fichiers attachés Fichiers attachés

  6. #6
    Membre à l'essai
    Homme Profil pro
    Façonnier
    Inscrit en
    Août 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Façonnier
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    bonjour,

    shayw : J'aime bien ton pseudo qui me fait penser aux vastes plaines "bisonnées" de l'épopée "westernique". C'est pour cela que je te dis la main sur le cœur
    "Que le grand totem éclaire ta route en ce jour."
    Je te remercie pour ton code que je récupère car je n'avais pas pensé un seul instant à tout ce qui concerne le formatage de texte. En fait mon texte est un texte non formaté et qui n'a pas besoin de l'être dans la manière dont je m'en sers. Mais dans le programme sur lequel je suis plongé, il y aura du formatage de texte. Alors merci pour ce regard plongé dans l'avenir proche de ma programmation qui t'a inspiré de poster cette petite routine risquant de m'être utile à un moment donné ou à un autre. De plus j'ai réalisé quelque chose, que la copie via ".text" élimine tout format dans le texte. Je n'y avais pas pensé. Merci

    n4w4k : Grand bonjour et grand merci.
    Effectivement ton code fonctionne et effectivement celui de Sankassssss et... effectivement le mien aussi après avoir retiré le numéro de ligne indexé dans le tableau recevant les lignes.
    RichTextBox1.Lines = tabStr(numéroLigneachanger)

    Je n'avais pas fait attention, mais comme je me lève de très bonne heure, hier soir je fus comme qui dirais fatigué sûrement. Merci pour avoir testé le code de Sankassssss et l'avoir mis en lien, ce qui m'a permis de voir où le bât blessait.

    Merci Sankass pour avoir partagé le premier ton savoir et pardon pour ce doute qui a effleuré mon esprit en voyant que chez moi ce n'était pas tout à fait fonctionnel.

    Un grand merci à vous. Je vous souhaite une joyeuse et charmante journée à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacement d'une ligne par une autre dans une matrice
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 17/02/2015, 14h57
  2. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  3. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  4. [Batch] Remplacer une ligne par une autre dans un fichier txt
    Par tinwul dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 03/07/2009, 13h58
  5. Réponses: 9
    Dernier message: 22/05/2006, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo