Richtextbox et contenu [Résolu]

Signaler
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
-
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010
-
bonjour,
j'ai un petit souci auquel je ne trouve pas de solution:
j'ai une form qui contient une richtextbox, jusque la tout va bien :)
mon désir c'est d'utiliser cette box pour afficher ce que j'affichais avant à l'écran (console.writeline()).
pour simplifier, avant je faisais:
for (int i=0; i<20;i++)
{
console.writeline("ligne "+i);
}

aujourd'hui j'ai une interface et j'aimerai envoyer les éléments que je souhaite afficher vers ma form sauf que je n'y arrive pas. je sais que c'est possible puisque je l'ai déja vu à l'oeuvre mais je ne sais pas comment faire.
je cherche un truc du genre
messagebox.show("toto");

ce code permet d'envoyer une information à la class Form. j'ai essayé richtextbox mais fonctionne pas :(. ce que je voulais faire c'est un truc du genre:
for (int i=0; i<20;i++)
{
richtextbox1.text = "ligne "+i;
}



avez vous une idée?

16 réponses

Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

La richTextBox est un membre private dans la classe Form, tu ne peux pas y accéder de l'extérieur. Un moyen serait de la passer en paramètre (par valeur) dans le constructeur de ta classe qui veut y accéder.

Dans la Form:
MaClasse maClasse = new MaClasse(richTextBox);


Dans la classe:
public class MaClasse
{
   public MaClasse(RichTextBox rTBox)
   {
      for (int i = 0; i < 20; i++)
      {
         rTBox.Text += "ligne" + i + "\n";
      }
   }
}
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

Voilà :)
for (int i = 0; i < 1000; i++)
{
   rTBox.Text += "ligne" + i + "\n";
   rTBox.Refresh();

   // Auto Scroll

   rTBox.Focus();   // Donne le focus au control
   rTBox.SelectionLength = 0;  // Aucun caractère n'est sélectionné
   
   // Place le curseur à la dernière ligne :               
   rTBox.SelectionStart = (rTBox.Text.Length - 1); 
   
   // Scroll automatiquement selon la position du curseur
   //rTBox.ScrollToCaret();    // ça fonctionne pas très bien avec...

   System.Threading.Thread.Sleep(100);
}
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

Bonjour,

Dans ton code, le texte s'efface à chaque itération. Il faut donc le conserver en l'incrémentant, ajoutant en plus, un retour à la ligne :
richTextBox1.Text += "ligne" + i + "\n";
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
2
Re,
ce code ne fonctionne pas parce que je ne peux pas appeler ma richTextBox1 depuis ma classe. ce champ n'est disponible que dans ma classe Form...
une autre idée?
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
2
on se rapproche :)
j'ai fait un test mais ne reconnais pas le richtextbox, comment on le déclare?
voici mon exemple:
namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Class1 maClasse = new Class1(richTextBox);
        }


    }
}


ce qui me donne cette erreur: Le nom 'richTextBox' n'existe pas dans le contexte actuel
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

Tu veux le mettre où exactement ton RichTextBox, c'est pas très claire ton problème?

As-tu ajouté le richTextBox dans ton Form en mode design ??

En faisant cela, tu obtient dans Form1.Designer.cs :
private void InitializeComponent()
{
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
// 
// richTextBox1
// 
this.richTextBox1.Location = new System.Drawing.Point(98, 64);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(217, 96);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "";
// 
// Form1
// 
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(437, 266);
this.Controls.Add(this.richTextBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
//...
private System.Windows.Forms.RichTextBox richTextBox1;

Ou bien, si tu veux l'ajouter à la main :

dans Form1:
System.Windows.Forms.RichTextBox richTextBox1 =
          new System.Windows.Forms.RichTextBox();
this.Controls.Add(richTextBox1);
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
2
oui je l'ai bien ajouté en mode design...

je ne sais pas ou je merde...
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

L'as-tu bien orthographié?
Vérifie bien le nom dans les propriétés du control
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
2
yes, ça fonctionne, merci beaucoup!
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

you're welcome !
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
2
RE:
le truc fonctionne bien sauf qu'il m'affiche toutes les lignes d'un coup! ce que je veux c'est qu'il m'affiche les lignes au fur et à mesure qu'elles sont traitées. là ce qui se passe c'est qu'il n'y a rien qui se passe pendant un temps puis il m'affiche tout d'un coup...
tu as une idée sur comment régler ça?
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

En fait, les lignes sont bien traitées au fur et à mesure, mais ça se passe à une telle vitesse qu'on ne le remarque pas !

Ce qu'il faudrait c'est ajouter un "Timer" et mettre une pause de 1 ou 2 secondes entre chaque affichage de ligne.

Je ne vois pas comment faire autrement.
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

Une meilleur solution (Utilisation des threads) :
public class Class1
{
   public Class1(RichTextBox rTBox)
   {
      for (int i = 0; i < 20; i++)
      {
         rTBox.Text += "ligne" + i + "\n";
         rTBox.Refresh();      // Rafraîchissement du textbox

         System.Threading.Thread.Sleep(1000);    // pause de 1000ms = 1s
      }
   }
}
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
2
Merci spiderGon! toujours sur le coup à ce que je vois ;-)
ça marche effectivement mais j'ai un autre souci :)
à l'affichage, j'ai les lignes qui défilent sauf que je ne vois les dernières lignes! je suis obligé de scroler la fenetre pour que je voit toutes les lignes affichée. y a t-il un truc pour que la barre de scroll de la richtextbox défile toute seule?
je ne sais pas si je suis claire ou pas. dis moi si tu as compris mon problème.
Messages postés
89
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2016
2
génial mec! tu es le roi du pétrole :)
merci beaucoup tu m'a vraiment aidé.
bonne soirée et à un prochain bug :)
Messages postés
12
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
3 novembre 2010

lol, no problem !