Yorundr
Messages postés289Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention11 juin 2012
-
15 janv. 2009 à 15:35
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
16 janv. 2009 à 12:15
Bonjour,
voila ce que je veut faire:
Form1 : quand je clique sur un bouton j'effectue une requête qui peut me retourner un ou plusieurs résultat. Si j'ai plusieurs résultat ma Form2 s'affiche. elle contient ListBox qui contien tout mes résultat,ainsi qu'un bouton "choisi" <---- Jusque la ok (enfin je pense)
Form2 quand je choisi un element de ma ListBox et que je clique sur "choisi" : ca me retourne mon objet <---La je bloque je ne sais pas comment faire.
J'ai tenté plusieurs tests, j'ai effectué quelques recherches mais je n'ai pas trouver de vrai réponse.
Dans Form1 je fait :
Form2 maForm=new Form2();
maForm.Show();
maForm.remplirmaListBox(maListedObjet);
Dans Form2 : je sais pas quoi faire parceque rien ne marche
Yorundr
Messages postés289Date d'inscriptionmardi 31 octobre 2006StatutMembreDernière intervention11 juin 2012 16 janv. 2009 à 11:33
Donc en fait j'ai trouvé un moyen (Coup de chance ? Oo), ca me semble etre un peu de la bidouille mais ca fait ce que je veu que ca fasse, je vous explique :
dans Form1:
Form2 maForm = new Form2(this); // this indispensable ?
maForm.RemplirListBox(Reponse);
maForm.ShowDialog();
String val=maForm.getValeurChoisi();
MessageBox.Show(val); //M'affiche la valeur que j'ai selectionné !
Tout simplement quand j'ai cliquer sur mon bouton "choisir" de ma Form2, je fait appel a une methode de Form2.
Par contre aprés, faut il que je détruise ma Form2, ? et comment ?
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Rhend
Messages postés43Date d'inscriptionlundi 20 octobre 2008StatutMembreDernière intervention14 juin 2009 15 janv. 2009 à 16:05
Bonjour,
Avant de m'aventurer dans une hypothétique réponse, j'aimerais savoir ce qu'elle retourne ta requête ? Car si elle retourne plusieurs champs je ne sais pas si ca peux marcher ce que j'ai a proposer.
Grosso modo, faudrait que tu regardes si la ligne que tu "choisi" correspond à 1 item (ListBox1.SelectedItem). Si c'est le cas alors retourne ceci.
Sinon j'ai une autre idée essaye pour voir si ca fonctionne :
Dans ton Form 2 tu crée une fonction qui renvoie ton objet (attention au typage de ta fonction faut que ca coordonne).
Dans ton Form 1 tu gardes tes lignes de codes mais tu rajoutes :
<Variable récuperant l'objet> = Maform.<Le nom de ta fonction>;
et voila, chez moi ca fonctionne mais j'ai fait ca avec une variable int donc moins difficile a fournir le type de la fonction.
Rhend
Messages postés43Date d'inscriptionlundi 20 octobre 2008StatutMembreDernière intervention14 juin 2009 15 janv. 2009 à 16:12
C'est super important de connaître mille et une façon de faire les passages de paramètre ca ne m'étonne pas qu'il y est plein de gens qui demande à savoir, moi même pas plutard qu'avant hier je me suis fait chier pour trouver une solution (sans doute boiteuse) pour le passage de paramètre :D
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 15 janv. 2009 à 17:04
Re,
1) Si tu passes un objet à ta Form2, toute modification serait répercutée automatiquement.
2) Sinon, tu peux très bien passer la Form1 en paramètre du contructeur de la Form2.
public Form2(Form parentForm)
{
}
Tu conserves alors ta parentForm en tant que membre de ta classe Form2.
Et alors, ta Form2 pourra répercuter des choses sur la Form1.
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Rhend
Messages postés43Date d'inscriptionlundi 20 octobre 2008StatutMembreDernière intervention14 juin 2009 15 janv. 2009 à 17:33
2) Sinon, tu peux très bien passer la Form1 en paramètre du contructeur de la Form2.
public Form2(Form parentForm)
{
}
Tu conserves alors ta parentForm en tant que membre de ta classe Form2.
Et alors, ta Form2 pourra répercuter des choses sur la Form1.
--------
Ce n'est pas déjà le cas si les deux Forms sont dans le même projet ?
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 15 janv. 2009 à 17:38
Non, car tes deux Forms de ton projet sont des classes et non des objets.
Tu peux tout à fait te créer une classe Form2 que tu instancieras x fois dans ton application pour en afficher x.
D'ailleurs, si tu regardes le code exécuter au démarrage de ton application (dans le fichier Program.cs), tu as la ligne:
Application.Run(new Form1());
Il instancie un objet de type Form1.
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 15 janv. 2009 à 17:39
Au passage (parce que je n'y avais pas pensé avant), dans le code de ta Form1 qui instancie ta Form2, il te faudra faire:
Form2 form = new Form2(this); //ou this représente la form courante qui créé la Form2
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Rhend
Messages postés43Date d'inscriptionlundi 20 octobre 2008StatutMembreDernière intervention14 juin 2009 16 janv. 2009 à 10:12
Non, car tes deux Forms de ton projet sont des classes et non des objets.
Tu peux tout à fait te créer une classe Form2 que tu instancieras x fois dans ton application pour en afficher x.
-----------------------
Est-ce que ca veut dire que si je fait ca je peux revenir X fois sur Form1 pour lancer Y fois la Form2 et pouvoir gerer les Y Form2 comme bon me semble ? Ou est-ce que c'est sur un principe de FILO ? (First In Last Out) ?
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 16 janv. 2009 à 11:14
Bonjour,
Tu as tout à fait raison, ta Form1 pourra créer N Form2 et les gérer toutes ! Inversement, si tu passes la Form1 à toutes tes Form2, elles pourront appeler la Form1.
De même, tu pourrais tout à fait concevoir que ton application lance N Form1 au démarrage.
Bonne journée,
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
OUTu peux déclarer via le designer ton boutton "Ok" avec la propriété "DialogResult" "OK" ; le boutton "Annuler" avec la propriété "DialogResult" "Cancel".
Et sur les propriétés de ta Form2 pour "AcceptButton" tu prend le boutton "Ok" et pour "CancelButton", le boutton "Annuler"
C'est pareil !
2) Dans ta Form1:
Form2 maForm = new Form2(this); // this indispensable ?
maForm.RemplirListBox(Reponse);
if(maForm.ShowDialog() == DialogResult.OK)
{
String val=maForm.getValeurChoisi();
MessageBox.Show(val); //M'affiche la valeur que j'ai selectionné !
}
Voila,
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 16 janv. 2009 à 11:56
De rien !
Au fait quand j'ai dit c'est pareil, c'est pas complétement pareil et il est vrai que c'est mieux de déclarer les boutons Accept et Cancel côté designer.
Notamment pour la gestion de la touche Echap qui est prise en compte de ce dernier cas (et pas si tu ne mets que les événements OnClick des boutons).
Voila pour la précision,
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 16 janv. 2009 à 12:15
Personnellement, je ne pense pas que ce soit nécessaire car si tu créé ta Form2 dans une méthode de ta Form1, elle deviendra disposable suite à la fin de la méthode.
Laissons le garbage collector faire son travail :)
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------