Textbox form1 vers textbox form2

Signaler
-
 arouaw -
Bonjour, je suis actuellement sur un projet C# et j'ai un petit problème.
J'ai en fait une Form(Form1.cs) contenant une textbox (textbox1) et une autre form(Form2.cs) avec également une textbox.
La textbox de la form1 contient du texte et j'aimerais que quand j'appuie sur un bouton de ma form2 que le texte de la form1 soit envoyé sur la textbox de la form2.
Sur ma Form2 j'ai fait ce code pour pouvoir accéder à la textbox de la form1 :
public partial class Form2 : Form
    {
        Form1 fm1;
        public Form2()
        {

            InitializeComponent();
            
        }


J'ai également rendu public la textbox de cette form1 dans la propriété "Modifiers".
J'ai fait ensuite ce code quand j'appuie sur le bouton de la form2
private void button1_Click(object sender, EventArgs e)
        {textbox1.text = fm1.textbox1.text


Mais lorsque je teste le fonctionnement, j'ai une erreur de type "L'exception NullReferenceException n'a pas été gérée".
J'ai également essayé la méthode
Form1....
le problème c'est qu'il n'y a pas "textbox" qui s'affiche.

Auriez-vous une idée pour faire passer le contenu de la textbox1.text de ma form1 vers la textbox de ma form2 lors d'une pression sur un bouton ?

Merci d'avance.

4 réponses

Messages postés
15160
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 novembre 2020
463
C'est normal, dans une application tu peux afficher 15 (ou 100 ou ...) instances du même formulaire. Il y a donc autant d'instance du dit formulaire. Il faut donc savoir de quelle instance on parle, même s'il n'y en a qu'une.

public partial class Form2 : Form
    {
        Form1 fm1;//ici tu crées une variable qui est prête à recevoir un Form1
        int i;// là je crée une variable qui est prête à recevoir un int
        int j = 2;//là je crée une variable int qui vaut 2
        
        public Form2()
        {



L'idée est de passer à form2 la "référence" dont tu as besoin.
Mettre la textbox public n'est pas trop conseillé (je ne sais pas vraiment pourquoi), par contre tu peux la passer à form2.

public partial class Form2 : Form
    {
        string monTextBox;//je crée une variable accessible dans tout form2 prête à recevoir le text du textbox de form1
        
        public Form2(string Text1)//là j'ajoute un paramètre au constructeur de Form2 comme pour une méthode
        {
            monTextBox = Text1;//là le paramètre est passé à ma variable locale
            InitializeComponent();
            
        }


Dans ton bouton
private void button1_Click(object sender, EventArgs e)
        {textbox1.text = Text1;



Maintenant dans form1 tu as quelques part un truc qui ressemble à ça
Form2 maForm2 = new Form2();
maForm2.Show();


Et bien ça devient:
Form2 maForm2 = new Form2(textbox1.text);//ici j'initie Form2 en envoyant le text qui va bien
maForm2.Show();

Whismeril
Donc en fait il faut que je mette par exemple
Form1 fm1
et ensuite je met en dessous
string text1 = fm1.textbox1.text
?
Parce que je me souviens qu'en VB.NET , en créant une Form2 , on avait juste à faire :
textbox1.text = Form1.textbox1.text
.
Messages postés
15160
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 novembre 2020
463
Donc en fait il faut que je mette par exemple
Form1 fm1

et ensuite je met en dessous
string text1 = fm1.textbox1.text
?


Non soit je me suis mal exprimé soit tu n'as pas lu.

Dans ton instance de Form2
Form1 fm1;

cette ligne initie un espace mémoire (variable) qui peut contenir un Form1, mais pas l'instance existante dans ton programme tant que tu ne l'as pas clairement indiqué, pour ça il faut passer la référence (du formulaire, du textbox ou directement du string selon ton besoin) d'un form à l'autre come je te l'ai décrit;

Whismeril