Bonjour,
Quand je fais ça :
Je crée un objet formulaire et je l'affiche, mais quel est le nom de cet objet?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Application.Run(new F_ConsultSearch());
Bonjour,
Quand je fais ça :
Je crée un objet formulaire et je l'affiche, mais quel est le nom de cet objet?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Application.Run(new F_ConsultSearch());
Il n'y a pas de nom de variable, vu que tu ne l'enregistre pas dans une variable, tu l'exécute directement.
La question serait plutôt : pourquoi as-tu besoin du nom de cet objet ?
Mais si c'est ton premier formulaire ouvert, tu peux passer par ce code pour le récupérer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Application.OpenForms[0]
En faite, j'ai besoin dans mon second formulaire d'une variable public qui est dans la classe de mon premier formulaire.
J'aimerai donc faire NomDuForm1.NomVariable pour m'en servir dans le form2.
Est-il possible de donner un nom à mon formulaire?
Non, ce n'est pas possible directement.
Après tu as deux solutions :
soit tu fais comme je l'ai dit plus haut, en passant par Application.OpenForms[0] depuis ton second formulaire en faisant un cast sur le type du premier formulaire.
Disons que j'ai Form1 et Form2 pour récupérer l'instance courante de Form1 depuis une méthode de Form2 je ferais :
ou pour récupérer une propriété :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Form1 firstForm = Application.OpenForms[0] as Form1;
Sinon, le plus simple, si tu n'as besoin que d'une propriété du premier formulaire dans le second, pourquoi ne pas le passer en paramètre du constructeur du second formulaire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ((Form1)Application.OpenForms[0]).MyProperty;
Et si cette propriété est amené à changer, tu peux directement passer l'instance du premier formulaire dans le constructeur du second lorsque tu instancie celui-ci.
Salut,
Tu y accèdes ensuite en passant par Program.MainForm. Mais si comme je le suppose Form2 est créé à partir de Form1 pourquoi ne pas faire comme ceci plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 static class Program { public static Form1 MainForm; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm = new Form1(); Application.Run(MainForm); } }
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
25
26
27
28
29
30
31
32
33 public partial class Form1 : Form { public int MaVariable = 0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(this); frm.ShowDialog(); frm.Dispose(); } } public partial class Form2 : Form { private Form1 _frm; public Form2(Form1 frm) { _frm = frm; InitializeComponent(); } private void Test() { _frm.MaVariable = 1234; } }
Tu peux Utiliser ce code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public MyForm m_frmMain = new MyForm(); ... ... Application.Run(m_frmMain);
je vois pas ce que ca change puisque le formulaire 2 est créé ensuite. il n'a pas accès pour autant à m_frmMain.
ps: faut pas utiliser "m_", c'était déconseillé dans les specs du C#
la solution la plus propre est celle de _Pascal_
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Form2 frm = new Form2(this); frm.ShowDialog();
La solution de _Pascal_ marche trés bien.
Merci à tous![]()
Partager