Ajouter ligne suivante ListBox1.Items( ??? ) à un RichTextBox [Résolu]

Signaler
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008
-
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008
-
Bonjour,
J'aimerais savoir comment faire pour créer une sorte de boucle qui prendrait la ligne 1 de mon ListBox1 et l'ajouterait à mon RichTextBox2, puis ferais de même avec la ligne 2 du ListBox1, puis la ligne 3, ...

Je suis partis avec une truc de ce style...

        RichTextBox1.Text &= ListBox1.Items( ??? )

Merci par avance aux réponses.
Bonne continuation.
Beny

14 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
    For i As Integer = 0 To ListBox1.Items.Count - 1
      RichTextBox1.Text &= ListBox1.Items(i) & Environment.NewLine
    Next

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #   
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,

beh comme tu l'écris toi même...., c'est une boucle.
donc de i 0 à N (dernier item)

donc I
non?
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008

Apparement la méthode de Casy marche.

Nickel merci pour cette réponse rapide.
Bonne continuation.
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008

Petite question.
Cette action se fait sur environ 3000 lignes de ListBox, il est for possible que le programme plante (ne réponde pas), est-il possible d'outrapasser cela ?
Merci.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Un Application.DoEvents() dans la boucle devrait faire l'affaire.

3000 lignes ça devrait pas prendre plus de quelques secondes je pense.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008

Le Application.DoEvents() doit être placé ou ?

For i As Integer = 0 To ListBox1.Items.Count - 1
      RichTextBox1.Text &= ListBox1.Items(i) & Environment.NewLine
Next
Application.DoEvents()
RichTextBox1.SaveFile("C:\Fichier.rtf")
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Dans la boucle, j'ai dit :

For i As Integer = 0 To ListBox1.Items.Count - 1
      RichTextBox1.Text &= ListBox1.Items(i) & Environment.NewLine
      Application.DoEvents()
Next

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #   
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008

Ok parfait merci.
Ca fonctionne mais c'est assez long (plusieurs minutes).
Est-ce qu'a la fin, après avoir copier tout les listbox, il reviendra au début ou il s'arretera ?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
RichTextBox1.visible = false

For i As Integer = 0 To ListBox1.Items.Count - 1
      RichTextBox1.Text &= ListBox1.Items(i) & Environment.NewLine
      if (i and 127) then Application.DoEvents()
Next i
RichTextBox1.visible = true
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008

Ok, mais pourrai-je avoir une petite explication de ces commandes svp ?

RichTextBox1.visible = false
For i As Integer = 0 To ListBox1.Items.Count - 1
      RichTextBox1.Text &= ListBox1.Items(i) & Environment.NewLine
      if (i and 127) then Application.DoEvents()
Next i
RichTextBox1.visible = true
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
'avec la méthode appendText ça va plus vite



For

i = 0


To

ListBox1.Items.Count - 1RichTextBox2.AppendText(ListBox1.Items(i) & Environment.NewLine)

'Application.DoEvents()



Next

i
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
le fait de la rendre invisible pendant le traitement évite de dessiner la chaine, donc gain de temps.
quant au i and 127, on ne fait un DOEVENTS qu'une fois sur 128, ce qui est bien suffisant, et donc plus rapide

voir ce lien :
Q : [doc/faq.aspx#vb_doevents Code : Mon application freeze lors d'une
longue opération, comment y rémedier]

++
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
d'ailleurs c'est  If (i And 127) = 0 Then Application.DoEvents()
^^
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
27 juillet 2008

Tout est nikel.
1000 merci.
Bonne continuation.

(PS: les ListBox sont limité en nombre de lignes, c'est dommage...)