akito06
Messages postés23Date d'inscriptionmercredi 9 juin 2004StatutMembreDernière intervention27 janvier 2005
-
24 déc. 2004 à 09:29
Athalus
Messages postés131Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention 7 juillet 2005
-
4 janv. 2005 à 10:46
Bonjour a tous et a toutes
Apres avoir bien exploré de nombreux post du forum, je ne trouve pas de solution a mon probleme.
Le probleme : Application MDI
Une forme Main crée une Form1
La Form1 crée une Form2
Je voudrais pouvoir acceder aux propriétés de Form1 a partir de Form2
Ex : dans Form2 : Form1.Enabled = true;
Je viens du monde Visual Basic, je commence donc a comprendre les mecanisme du C++/C#.
J'ai lu des methodes conscistant a passer en ref les attribut a modifier mais cette solution n'est pas satisfaisante dans mon cas.
A moin de passer carement la Form1 en ref dans le constructeur de la Form2. Mais je n'y suis pas arriver...
Et ce probleme ne resoudrait pas un acces a une troisieme fenetre
ex Form1 -> Form 2 -> Form3 donc Form3 ne peut pas acceder a Form1.
Voila, j'espere avoir été assez clair. J'espere qu'il est possible d'acceder aux propriétés aussi facilement qu'en VB. Malgres qu'il soit permissif, VB reste un langage souple sur certain point non negligeable.
digital3d
Messages postés37Date d'inscriptionjeudi 29 juillet 2004StatutMembreDernière intervention28 février 20051 24 déc. 2004 à 10:22
Salut, je viens aussi du monde Visual Basic, en C# tu dois instancier une form absolument même si elle existe déjà, une autre form ne peux avoir accès que si tu reinstancie ta form, par exemple:
j'ai deux forms:
Form1
Form2 + un label dedans comme nom "label1"
ils sont toutes les deux visibles avec plein de trucs dedans, si de Form1, tu veux reprendre certaines choses de Form2, tu dois faire ceci:
//Je connais le nom du control que je veux utiliser, il s'apelle "label1"
//Je suis dans la Form1 et j'instancie la Form2
Form frm = new Form2();
//Je montre la Form2, il y a bien un label dedans
frm.Show();
//J'instancie un nouveau control a partir de la Form2 et je recherche le control avec le nom "label1"
Control ctl = frm.GetNextControl(new Control("label1"),true);
//J'affiche dans le titre de ma Form1 le texte du Label de ma Form2
this.Text = "Texte prit de la Form2 et mis dans le titre: " + ctl.Text;
En fait en C#, tu dois tout instancier, tout les contrôles appartiennent à la form elle-même et ne peux pas être appelé ailleurs, j'espère que j'ai su t'aider
akito06
Messages postés23Date d'inscriptionmercredi 9 juin 2004StatutMembreDernière intervention27 janvier 2005 24 déc. 2004 à 10:31
Merci pour ta reponse!
Je suis d'accord avec toi. Dans la form1, j'arrive a acceder au propriété de la from2 puisque je l'ai instancié ici meme.
Mais je n'arrive pas a faire l'inverse.
Avec la form1, j'instancie la form2 et je la show()
Mais si dans la form2 j'instancie la form1, j'obtien alors une nouvelle instance de la form1 et les valeur que je modifie seront appliqué a cette nouvelle instance.
digital3d
Messages postés37Date d'inscriptionjeudi 29 juillet 2004StatutMembreDernière intervention28 février 20051 24 déc. 2004 à 10:48
VB n'est pas plus adapté, il était facile mais insecurisant, en C# tout a été repensé, TOUT EST DU CODE, en VB une form était une form, tu ne pouvais rien faire d'autres qu'utiliser les paramètres standard, en C# une form est du code, tu peux faire des bords rond, la redessiner, tout est dans ton code, et ce que tu vois à l'écran n'est que le résultat de ton code, c'est plus profond.
Il est vrai que ca serait super de faire appelle comme en VB à un control d'une autre form mais ici vaux mieux le parametrer tout toi même, tu fais une bête fonction qui te renvois le control que tu veux:
private void Form1_Load(object sender, System.EventArgs e)
{
Form frm = new Form2();
frm.Show();
Control ctl = GetThisControl(Form2,"label1");
this.Text = ctl.Text;
}
public static Control GetThisControl(Form frm, string ControlName)
{
Control ctl = frm.GetNextControl(new Control(ControlName),true);
return ctl;
}
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 201114 24 déc. 2004 à 10:51
ou plus classe tu fais une propriete sur form2 qui te retourne le text de label1
:
public string Get_Label1Text
{
get
{
//permet de recuperer la valeur de label1.text
return label1.Text;
}
set
{
//permet de definir le text de label1 sur form2
this.label1.Text = value;
}
}
et dans fom1 tu fais :
Messagebox.Show(form2.GetLabel1Text);
akito06
Messages postés23Date d'inscriptionmercredi 9 juin 2004StatutMembreDernière intervention27 janvier 2005 24 déc. 2004 à 11:20
Merci, deja je n'ai plus d'erreur!
Dans mon code de la form2, je me maintenant taper
from1.enabled = true; // avec autocompletion du code
Le probleme c'est que rien ne se passe. J'ai mis ce code dans un bouton.
Je pense que rien ne se passe puisque, lorsqu'on instancie la form2, on instancie une autre Form1...