Acceder aux proprietes d'une fenetre a partir d'une autre [Résolu]

akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 09:29 - Dernière réponse : Athalus 131 Messages postés jeudi 17 juin 2004Date d'inscription 7 juillet 2005 Dernière intervention
- 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.

Merci par avance et bonnes fetes a tout le monde
Afficher la suite 

26 réponses

Répondre au sujet
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 14:32
+3
Utile
J'ai enfin reussi!!!!

C'est grace a tout ces conseils alors merci a tous!! je vous met le code

dans le form1

Form2 form2 = new Form2(this);
form2.Show; 


Dans la form2

public  From1 form1b

public Form2 (Form1 form1)
{
form1b=form1
InitializeComponent();
}


je peux maintenant acceder a form1b.enabled

Merci!!!!!!!!!!!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de akito06
digital3d 37 Messages postés jeudi 29 juillet 2004Date d'inscription 28 février 2005 Dernière intervention - 24 déc. 2004 à 10:22
0
Utile
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
Commenter la réponse de digital3d
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 10:31
0
Utile
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.

Merci pour ton aide
Commenter la réponse de akito06
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 24 déc. 2004 à 10:35
0
Utile
ou alors tu met ton label1 en public et tu fais depuis form1 un truc style :

form2 f = new form2();
f.show();

....

MessageBox.Show(f.label1.Text);

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
digital3d 37 Messages postés jeudi 29 juillet 2004Date d'inscription 28 février 2005 Dernière intervention - 24 déc. 2004 à 10:40
0
Utile
En mettant Public un label, je ne la vois pas ? Es tu sur de ton code ?
Commenter la réponse de digital3d
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 10:40
0
Utile
Pour etre plus clair je vais mettre le code :

Dans ma 1ere form nommé cmd_etat_frm :
void Btn_livrerClick(object sender, System.EventArgs e)
{

lvr_frs_frm Lvr_frs_frm = new lvr_frs_frm () ;
Lvr_frs_frm.MdiParent = this.MdiParent;
Lvr_frs_frm.Show();

}

Dans ma deuxieme form nommé lvr_frs_frm si je fais cmd_etat_frm.Enabled = true;
cela ne marche pas

Je trouve qu'a ce niveau, vb etat plus adapté

Merci pour ton aide
Commenter la réponse de akito06
digital3d 37 Messages postés jeudi 29 juillet 2004Date d'inscription 28 février 2005 Dernière intervention - 24 déc. 2004 à 10:48
0
Utile
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;
}
Commenter la réponse de digital3d
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 10:49
0
Utile
C'est donc en fait dans la From2 que je n'arrive pas a acceder a la Form1

L'inverse marche
Commenter la réponse de akito06
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 24 déc. 2004 à 10:51
0
Utile
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);

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 10:53
0
Utile
Ce que tu dis est vrai, depuis la form1 j'accede a la form2
C'est ce que montre ton code.
Mais dans la form2 cela ne marche pas.

Car si dans la From2 je fais
From frm1 = new Form1();
Alors j'instancie une nouvelle From1...

Merci
Commenter la réponse de akito06
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 10:54
0
Utile
De plus ces methodes ne permettent pas de modifier la form en elle meme : comme puis-je modifier la propriété Enabled de la fenetre comme ceci?

merci
Commenter la réponse de akito06
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 11:01
0
Utile
D'apres ce que j'ai lu la meilleur methode est de passer en parametre la Form1 quand on instanci la form2 et dans son constructeur

Form2 form2 = new Form2(Form form1); //instanciation

public form2(Form form1); //constructeur

mais ca ne marche pas
Commenter la réponse de akito06
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 24 déc. 2004 à 11:09
0
Utile
Form2 form2 = new Form2(new Form1()); //instanciation

public form2(Form1 maform1); //constructeur

serait mieux...

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 11:20
0
Utile
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...

Merci pour ton aide
Commenter la réponse de akito06
Athalus 131 Messages postés jeudi 17 juin 2004Date d'inscription 7 juillet 2005 Dernière intervention - 24 déc. 2004 à 11:25
0
Utile
Bonjour,

Mais par enable tu veux que ca fasse quoi ? en plus clair que veux tu faire ?

hum.......
Commenter la réponse de Athalus
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 11:27
0
Utile
Je veux par exemple que lorsque j'appuye sur un bouon de la from2, ca rendre la form1 enabled.

Merci
Commenter la réponse de akito06
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 24 déc. 2004 à 11:39
0
Utile
oui y faut que tu recupere l'instance deja active de ta form1 et pas recreer une nouvelle form....

alors si tu travail dans une fenetre mdi tu a des truc style getMdiChild...

sinon je sais pas...

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
akito06 23 Messages postés mercredi 9 juin 2004Date d'inscription 27 janvier 2005 Dernière intervention - 24 déc. 2004 à 11:45
0
Utile
En fait il me faut juste passer mon instance de Form1 nommé cmd_etat_frm lors de l'instanciation de ma form2

soit Form2 form2 = new Form2(cmd_frm_frs);

mais cela ne marche pas...

Merci beaucoup
Commenter la réponse de akito06
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 24 déc. 2004 à 11:53
0
Utile
Form2 form2 = new Form2();
form2.Owner = this;


et dans Form2 :
this.Owner.Enabled = true;


Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 24 déc. 2004 à 11:55
0
Utile
ah !
declare le constructeur de Form2 comme ceci
public Form2(Form1 form)
{
...
}


Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Acceder aux proprietes d'une fenetre a partir d'une autre - page 2