Richtextbox et contenu

Résolu
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 - 2 nov. 2010 à 16:59
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010 - 3 nov. 2010 à 22:52
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

SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
2 nov. 2010 à 19:40
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";
      }
   }
}
3
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
3 nov. 2010 à 22:44
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);
}
3
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
2 nov. 2010 à 18:22
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";
0
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
2 nov. 2010 à 18:43
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?
0

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

Posez votre question
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
2 nov. 2010 à 21:00
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
0
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
2 nov. 2010 à 21:40
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);
0
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
2 nov. 2010 à 22:32
oui je l'ai bien ajouté en mode design...

je ne sais pas ou je merde...
0
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
2 nov. 2010 à 22:41
L'as-tu bien orthographié?
Vérifie bien le nom dans les propriétés du control
0
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
2 nov. 2010 à 22:59
yes, ça fonctionne, merci beaucoup!
0
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
2 nov. 2010 à 23:09
you're welcome !
0
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
3 nov. 2010 à 15:40
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?
0
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
3 nov. 2010 à 19:54
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.
0
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
3 nov. 2010 à 20:06
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
      }
   }
}
0
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
3 nov. 2010 à 22:13
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.
0
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
3 nov. 2010 à 22:48
génial mec! tu es le roi du pétrole :)
merci beaucoup tu m'a vraiment aidé.
bonne soirée et à un prochain bug :)
0
SpiderGon Messages postés 12 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 3 novembre 2010
3 nov. 2010 à 22:52
lol, no problem !
0
Rejoignez-nous