Interraction entre deux form

Mélanie - Modifié par Whismeril le 13/08/2014 à 07:51
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 13 août 2014 à 08:03
Bonjour,
j'ai une premiere win form (ajoutgroupe) et une seconde (ajoutmembre)

sur la premiere (ajoutgroupe) j'ai un bouton "ajouter" qui permet de faire apparaître la seconde form (ajoutmembre) et dans le meme temps de griser (enabled) le bouton "ajouter" afin d'avoir qu'une fenetre (ajoutmembre) a la fois.

ce que je cherche a faire, c'est degriser le bouton "ajouter" de la form 1 (ajoutgroupe) quand je quitte la form 2 (ajoutgroupe).

j'ai dans ma premiere fenetre (ajoutgroupe)

    private void buttonAjouter_Click(object sender, EventArgs e)
            {
                ajoutmembre membre = new ajoutmembre(this);
                membre.Show();
                buttonAjouter.Enabled = false;
            }

et dans ma seconde fenetre (ajoutmembre)

public partial class ajoutmembre : Form
    {
        ajoutgroupe grp;

        public ajoutmembre(ajoutgroupe P)
        {
            this.grp = P;
            InitializeComponent();            
        }

        private void ajoutmembre_FormClosing(object sender, FormClosingEventArgs e)
        {
          grp.ButtonAjouter.Enabled = true;
            this.Close();
        }


quand j'execute l'application, cela fonctionne mais 5 secondes apres une erreur apparaît

"Opération inter-threads non valide : le contrôle 'buttonAjouterIns1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé."

'buttonAjouterIns1' est un boutton de la seconde form (ajoutmembre)

voila je ne sais pas comment m'en sortir, j'ai vue des explication a propos de delegate et invoke mais je n'ai pas tout compris. si quelqu'un peut me debloquer en etant precis car je debute Merci !

2 réponses

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
13 août 2014 à 08:01
Bonjour, il y a une solution plus simple pour n'avoir qu'un formulaire d'affiché, c'est d'utiliser ShowDialog à la place de Show. Ça bloque complètement la première fenêtre tant que la seconde est active.

S'il ne faut pas bloquer la premier fenêtre, le mieux est de créer un événement dans la deuxième. Tu abonnes un méthode du premier formulaire à cet événement, c'est dans cette méthode que tu réactiveras le bouton.
L'événement tu le génères quand le second formulaire se ferme.
Tu as un exemple de ce principe ici
1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
13 août 2014 à 08:03
Attention à ne pas mettre
this.Close()
dans le form closing. Tu lui demandes de fermer le formulaire qui est déjà en train de se fermer. L'erreur vient peut être de là.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
13 août 2014 à 07:52
Bonjour, message modifié par l'ajout des balises de code.
Voir ici comment bien utiliser la coloration syntaxique.
0
Rejoignez-nous