none
interaction entre les formes

    Question

  • bonjour, voila j'ai un petit soucis.

    j'ai deux formes ( form1 et form2 ). dans la form1 jai un label. et j'ai un bouton dans la form2.

    ce que je voudrais c lorsque je clique sur le bouton dans le form2 le label dans la form1 change de texte.

    dans vb on pouvais faire comme ca: form1.label1.text="bonjour" . Mais dans c# je ne sais pas comment ca marche. Merci de m'aider


    Cardinal dev

    mardi 21 juin 2016 09:03

Réponses

  • Bonjour philippe gerard,

    Pour ce faire, il faut passer par des propriétés sur vos contrôles : prenons une form appelé Form1 qui contient un label appelé Label 1 : dans votre code source de la classe Form1 ajoutez une propriété

    public string LabelText
    {
        get { return Label1.Text; }
        set { Label1.Text = value; }
    }

    Dans une deuxième form appelée Form2, dorénavant vous pourrez accéder à la valeur texte de votre Label :

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        private Form1 mainForm = null;
    
        public Form2(Form callingForm)
        {
            mainForm = callingForm as Form1; 
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            this.mainForm.LabelText = "Texte de mon label depuis Form 2";
        }
    }

    Avec un bouton dans la Form2 appelé button1.

    TIP : depuis la Form1, vous lancerez Form2 de cette manière :

    Form2 frm = new Form2(this);
    frm.Show();

    Cordialement,

    mardi 21 juin 2016 09:22
  • Dans ce cas, si vous souhaitez accéder à toutes les propriétés du LinkLabel, créez une propriété comme-ci dans votre classe Form1 :

    // Form1.cs
    public LinkLabel NewAccountLinkLabel
    {
        get { return this.linkLabel1; }
    }

    Sachez aussi que lorsque vous appelez la méthode Hide(), celle-ci ne détruit pas la form elle reste là mais non affichée, donc dans votre Form2, vous pouvez changer la visibilité de votre Linklabl ainsi :

    // Form2.cs
    mainForm.NewAccountLinkLabel.Visible = false;

    Et vous faite une dernière erreur : vous ré instanciez une nouvelle Form1, donc toutes vos modifications sur la Form1 d'origine ne seront pris en compte, ce qui'il faut faire dans votre code, c'est dans le code du clic du bouton :

    Remplacer

    // Form2.cs
    private void button1_Click(object sender, EventArgs e)
    {
        // code enlevé
        // ...
    
        Form1 frm = new Form();
        frm.Shwo();
    }

    Par ceci :

    // Form2.cs
    private void button1_Click(object sender, EventArgs e)
            {
                // ...
                mainForm.NewAccountLinkLabel.Visible = false;
                mainForm.Show();
            }

    Cordialement

    mardi 21 juin 2016 11:47

Toutes les réponses

  • Bonjour philippe gerard,

    Pour ce faire, il faut passer par des propriétés sur vos contrôles : prenons une form appelé Form1 qui contient un label appelé Label 1 : dans votre code source de la classe Form1 ajoutez une propriété

    public string LabelText
    {
        get { return Label1.Text; }
        set { Label1.Text = value; }
    }

    Dans une deuxième form appelée Form2, dorénavant vous pourrez accéder à la valeur texte de votre Label :

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        private Form1 mainForm = null;
    
        public Form2(Form callingForm)
        {
            mainForm = callingForm as Form1; 
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            this.mainForm.LabelText = "Texte de mon label depuis Form 2";
        }
    }

    Avec un bouton dans la Form2 appelé button1.

    TIP : depuis la Form1, vous lancerez Form2 de cette manière :

    Form2 frm = new Form2(this);
    frm.Show();

    Cordialement,

    mardi 21 juin 2016 09:22
  • merci de votre réponse.

    Mais j'ai l'erreur suivante :

    La référence d'objet n'est pas définie à une instance d'un objet.

    en effet c un linklabel et je voudrais faire ceci:

     if (WindowsFormsApplication1.Properties.Settings.Default.creation_compte != "0")
                    {
                        this.mainForm.linklabel.visible = false;( ce code n'est pas juste je le sais, c'est juste pour montrer ce que je voulais vraiment faire modifier la proprieté du linklabel (form1) depuis la form2
                    }

    parce que au préalable j'ai enregistré une valeur dans le setting


    Cardinal dev

    mardi 21 juin 2016 09:54
  • Bonjour,

    Pouvez-vous montrer le constructeur de votre Form2 et la création de la Form2 depuis la Form1 ?

    Cordialement,

    mardi 21 juin 2016 10:00
  • voici ma form1 en bleu c le linklabel1

     

    voci le code a l'intérieur de la form1. Avec les modifications que vous avez sugérer

    voici ma form2

    ici c la form2. l'action ce produit apres avoir appuyé sur le bouton.

    dans l'image qui suit voici ce qui se passe lorsque j'appuie sur le bouton. la partie marqué en rouge c là que je voudrais modifier la propriété du linklabel1 de la form1 pour qu'elle ne soit pas visible


    Cardinal dev

    mardi 21 juin 2016 10:21
  • Dans Form1, vous appelez le mauvais constructeur au lieu de :

    Form2 form2 = new Form2();

    faites :

    Form2 form2 = new Form2(this);

    Cordialement,

    mardi 21 juin 2016 10:55
  • oui ça a corrigé le message d'erreur mais mon linklabel de la form1 reste inchangé

    Cardinal dev

    mardi 21 juin 2016 11:18
  • Dans ce cas, si vous souhaitez accéder à toutes les propriétés du LinkLabel, créez une propriété comme-ci dans votre classe Form1 :

    // Form1.cs
    public LinkLabel NewAccountLinkLabel
    {
        get { return this.linkLabel1; }
    }

    Sachez aussi que lorsque vous appelez la méthode Hide(), celle-ci ne détruit pas la form elle reste là mais non affichée, donc dans votre Form2, vous pouvez changer la visibilité de votre Linklabl ainsi :

    // Form2.cs
    mainForm.NewAccountLinkLabel.Visible = false;

    Et vous faite une dernière erreur : vous ré instanciez une nouvelle Form1, donc toutes vos modifications sur la Form1 d'origine ne seront pris en compte, ce qui'il faut faire dans votre code, c'est dans le code du clic du bouton :

    Remplacer

    // Form2.cs
    private void button1_Click(object sender, EventArgs e)
    {
        // code enlevé
        // ...
    
        Form1 frm = new Form();
        frm.Shwo();
    }

    Par ceci :

    // Form2.cs
    private void button1_Click(object sender, EventArgs e)
            {
                // ...
                mainForm.NewAccountLinkLabel.Visible = false;
                mainForm.Show();
            }

    Cordialement

    mardi 21 juin 2016 11:47
  • merci pour tout

    Cardinal dev

    mardi 21 juin 2016 12:18