Bonjour,
Quand je fais ça :
Je crée un objet formulaire et je l'affiche, mais quel est le nom de cet objet?Code:
1
2 Application.Run(new F_ConsultSearch());
Version imprimable
Bonjour,
Quand je fais ça :
Je crée un objet formulaire et je l'affiche, mais quel est le nom de cet objet?Code:
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: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: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:((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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14static class Program { public static Form1 MainForm; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm = new Form1(); Application.Run(MainForm); } }
Code:
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
33public 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:
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:
1
2 Form2 frm = new Form2(this); frm.ShowDialog();
La solution de _Pascal_ marche trés bien.
Merci à tous :ccool: