Pb lors d'un transfert de variable entre 2 form [Résolu]

Signaler
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008
-
Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
-
Bonjour a tous,
Voila j'ai 2 form, Form1 et Form2. Dans le Form1 j'ai un comboBox et je voudrais pouvoir me servir dans le Form2 de la valeur que je choisie dans le combobox.
J'ai regarde sur les autres forums et essaye ca:
- dans le Form1 je declare une variable name (public stirng name). Puis dans la fonction du bouton qui me permet d'ouvrir Form2 je met name = comboBox1.Text;. Quand je l'affiche dans un messagebox, name contient bien la valeur de mon combobox.
- dans le Form2 je declare public
Form1 form = new Form1(); en global. Puis pour pour me servir de ma valeur je fais form.name. Le probleme c'est que cela me renvoie une chaine vide. En effet dans Form2 quand j'affiche dans un messagebox la valeur de form.name, celle-ci est vide.
C'est surement bete mais comme je debute j'ai beau chercher je n'arrive pas a le resoudre.
Pouvez-vous m'aider svp?

*** Kakol ***

8 réponses

Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
4
Euh... Autant pour moi...

J'ai fait une erreur en écrivant mon message précédent : le
constructeur supplémentaire est à ajouter dans la Form2... et non dans
la Form1... Bref, dans la Form2 tu peux mettre :



private string selectedDB;
public Form2(string selectedDB) // C'est là que j'm'étais planté en marquant Form1 !!
{
InitializeComponent();
this.selectedDB = selectedDB;
}



Le reste de mon message était valide normalement...



Bref :

1. Retire le constructeur que tu as ajouté dans la Form1, et mets le dans la Form2,

2. Utilise le nouveau constructeur au moment où tu appelles ta Form2, par exemple en faisant :



//bouton permettant d'ouvrir le Form2
private void buttondatabase_Click(object sender, System.EventArgs e)
{
Form2 dlg = new Form2( comboBox1.Text );
dlg.ShowDialog();
}


3. Pour te connecter à ta base, ça donne alors :


//connexion a ma base
private void buttonconnection_Click(object sender, System.EventArgs e)
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + this.selectedDB; //nom de la base a ouvrir
....
}

Voila... Comme tu peux le voir, normalement dans Form2, tu ne dois pas avoir de référence à Form1 !




Désolé pour mon erreur Form1/Form2... !
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, j'ai pas bien compris, tu veux avoir une référence de form2 dans form1 !? Regardes ce code, c'est peut être ca que tu cherches:

http://www.csharp.fr/code.aspx?ID=26735
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

merci de m'avoir repondu.
J'avais regarde mais je n'avais pas reussi a trouver la solution a mon probleme. C'est assez complique a expliquer sans voir l'appli mais je vais essayer d'etre plus claire.
En fait, dans le combobox de ma Form1 j'ai des noms de bases de donnees. Cela me sert a selectionner la base avec laquelle je veux travailler. J'ai un bouton qui doit alors me permettre une fois la base selectionnee de m'ouvrir ma Form2. La Form2 me permet alors de travailler sur la base de donnee que j'ai selectionnee dans la Form1 (affichage des tables, suppression d'un element ...). Chaque form fonctionne bien de son cote mais je n'arrive pas a faire le lien entre les deux. En effet, dans la Form2 je n'arrive pas a recuperer le nom de la base selectionnee dans le combobox de la Form1 pour pouvoir ensuite m'y connecter, cela me renvoie toujours une chaine vide.
Que puis-je faire?

*** Kakol ***
Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
4
Dans la mesure où ta Form2 a tout le temps besoin du nom de la base,

ce que tu peux faire, c'est ajouter lui une variable privée et un constructeur :



private string selectedDB;

public Form1(string selectedDB)

{

InitializeComponent();

this.selectedDB = selectedDB;

}



Au moment de créer la Form2, au lieu de faire :

Form2 myForm = new Form2();

il te suffit maintenant de faire :

Form2 myForm = new Form2("...."); // où "..." représente le nom de la base à passer !
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

Salut Troborg.
Je pense que je doit pas etre tres loin mais j'y arrive toujours pas.
J'ai mis dans Form1 :
private string selectedDB;
public Form1(string selectedDB)
{
InitializeComponent();
this.selectedDB = selectedDB;
}

//bouton permettant d'ouvrir le Form2
private void buttondatabase_Click(object sender, System.EventArgs e)
{
selectedDB=comboBox1.Text; //recup de la valeur du combobox
Form2 dlg = new Form2();
dlg.ShowDialog();
}

puis dans Form2 :
Form1 myForm = new Form1(???);

//connexion a ma base
private void buttonconnection_Click(object sender, System.EventArgs e)
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+form.selectedDB; //nom de la base a ouvrir
....
}

la je ne sais pas quoi mettre a la place de "???" car le nom de la base a passer c'est celui que j'ai selectionne dans le combobox du Form1.
Plus j'essaie moins j'y comprend .

*** Kakol ***
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

pardon une petite erreur : ... Source="+myForm.selectedDB;

*** Kakol ***
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

Waouw merci beaucoup Troborg ca marche super bien, ton code est parfait ! Tu m'a enleve une grosse epine du pied ! (tu es tout excuse pour ton erreur, t'en fais pas, t'es pas le seul a en faire lol).
Encore merci. et bonne continuation.

*** Kakol ***
Messages postés
65
Date d'inscription
samedi 24 avril 2004
Statut
Membre
Dernière intervention
1 août 2005
4
Bah de rien !

Content d'avoir pu aider..