Bonjour à tous,
Voila mon problème, j'aimerais accéder à un bouton qui se trouve dans un autre form. Mais je n'y arrive pas...
Comment procéder?
Merci d'avance.
Bonjour à tous,
Voila mon problème, j'aimerais accéder à un bouton qui se trouve dans un autre form. Mais je n'y arrive pas...
Comment procéder?
Merci d'avance.
Accéder au bouton lui même ? (pour par exemple changer son texte etc ..)
Ou accéder a un événement du bouton ? (par exemple le click ?)
Je désactive le bouton dans le load de son propre form et j'aimerais le réactiver quand je clic sur OK dans un autre form. La technique que je vaut faire n'est peut être pas la bonne...
Question intéressante en fait je trouve
Tout dépend un peu de comment se passe ton application.
Tu peux m'éclairer ?
Tu as une Form1 avec un bouton désactivé.
Une Form2 qui voudrait réactivé ce bouton a partir de l événement d'un de ces boutons, ça je crois avoir compris.
Ta Form2, elle est lancée à partir de ta Form1 ?
avec Show() ? ShowDialog() ?
Dans le load de mon form 1 les bouton sont désactivé si le fichier n'existe pas.
J'appelle le form 2 comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 private void Form1_Load(object sender, EventArgs e) { string Dossier = Application.StartupPath; string Chemin = System.IO.Path.Combine(Dossier, fichier.FichierJoueurs); MessageBox.Show(Chemin); if (System.IO.File.Exists(Chemin)) { bChargerJoueur.Enabled = true; bChoixJoueur.Enabled = true; bCommencerPartie.Enabled = true; bNewPerso.Enabled = true; } else { bChargerJoueur.Enabled=false; bChoixJoueur.Enabled = false; bCommencerPartie.Enabled = false; bNewPerso.Enabled = false; } }
Dans le form 2 je crée mon fichier et je met un joueur dedans lorsque je clic sur OK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private void bNewPerso_Click(object sender, EventArgs e) { New_Perso p2 = new New_Perso(); p2.Show(); }
J'aimerais que quand je clic sur Ok il réactive mes boutons.
J'espère avoir été clair
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 bChargerJoueur.Enabled = true; bChoixJoueur.Enabled = true; bCommencerPartie.Enabled = true; bNewPerso.Enabled = true;
Oui, je vois.
Alors il faut que ta Form2 connaisse ta Form1.
Pour ça, la manière la plus simple c'est de passer ta Form1 en paramètre au constructeur de ta Form2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private void bNewPerso_Click(object sender, EventArgs e) { New_Perso p2 = new New_Perso(this); p2.Show(); }Tu vois donc que dans l'événement button1_Click de ma forme2, je réactive le bouton de ma Form1. Seulement, par défaut, les boutons sont private. Si tu veux pouvoir y accéder comme dans l'exemple il faut que tu mettes le bouton à réactiver en public (à changer dans le fichier Form1.Designer.cs)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public partial class New_Perso : Form { Form1 Parent; public New_Perso(Form1 f) { InitializeComponent(); Parent = f; } private void button1_Click(object sender, EventArgs e) { Parent.button2.Enabled = true; } }
En procédant de la sorte, ça va fonctionner.
Seulement, je suis pas sur que ça soit très "propre" et la sur le coup, je vois pas d'autre moyen. Peut-être quelqu'un qui passera par ce topic trouvera une meilleure solution
De plus, je suis pas partisan de l'utilisation de show() au lieu de showDialog() sauf si c'est vraiment nécessaire. Est-ce le cas dans ton application ?
Echanger des event entre les formes est une solution quand même plus simple que les faire se référencer l'une l'autre (ce qui est quand même très très sale).
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...
Une réponse vous a aidé ? utiliser le bouton
"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Je pense que tu peut parcourir les forms ouvertes pour obtenir ta form parent puis accéder au control à éditer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 int iOpenForm = Application.OpenForms.Count; int iControlCount; foreach (Form f in Application.OpenForms) { iControlCount = Application.OpenForms[iOpenForm - 1].Controls.Count; if (f.GetType() == callingForm.GetType()) { foreach (Control controle in f.Controls) { if (controle.Name.ToString() == button1.Name.ToString()) { button1.Enabled = true; } } } }
J'ai utilisé la méthode d'Antho42, d'après ce que je lis elle est pas super propre mais elle fonctionne, c'est le principale à mon stade, ça me permet d'avancer dans mon programme.
Un grand merci à vous tous!
ps: Tant que j'y suis quelle est la différence entre show() et showDialog? Parce que je doit avouer que j'utilise show() parce que je l'ai vu aux cours et sans être au courant de l'existence de ShowDialog()...
Jespérais ne jamais voir du code de ce genre. C'est une des facon de faire la plus sale. Sérieusement, si jai un programmeur dans mon équipe qui code de cette facon, je lui montre la porte et c'est byebye.
Il y a plein de facon de faire, form2 ne devrais pas interagir avec les composant de form1. C'est a form1 de déterminer quand elle doit réactivé sont bouton. Cela s'appel de l'encapsulation.
Remoting Context Matters
Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance
Show() : http://msdn.microsoft.com/fr-fr/libr...ow(VS.80).aspx
ShowDilaog() : http://msdn.microsoft.com/fr-fr/libr...og(VS.80).aspx
En gros, c'est question d'être modale ou non.
Maintenant dans ton application, je sais pas ce qui est le mieux.
Comme l'a bien dit Shwin, ça serait bien que Form2 n'aie pas a changer lui même l'état du bouton de Form1. Que ça soit Form1 qui change l'état de son propre bouton (private) quand il a été prévenu par Form2.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager