IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]Comment passer un parametre d une Form à l'autre ?


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut [C#]Comment passer un parametre d une Form à l'autre ?
    Bonjour à tous,
    j'ai créé une application qui contient plusieurs formulaires.
    Le premier formulaire instancie un objet de la classe Acteurs dont le deuxième formulaire à besoin aussi. Comment faire pour passer l'object acteurs au second formulaire ?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    namespace Application1
    {
        public partial class F_Index : Form
        { Acteurs acteurs = new Acteurs();}
        private void TSMI_ActeursAjouter_Click(object sender, EventArgs e)
        { new F_Acteur(acteurs).ShowDialog();}
    }
     
    namespace Application1
    {
        public partial class F_Acteur : Form
        {
            public F_Acteur(Acteurs acteurs)
            { InitializeComponent();}
        }
    }
    Le compilateur me dit :
    Error 1 Inconsistent accessibility: parameter type 'Application1.Acteurs' is less accessible than method 'Application1.F_Acteur.F_Acteur(Application1.Acteurs)'
    Est-ce que quelqu'un aurait une petite idée ?

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ben faut dire qu'avec juste çà pour F_Acteur
    public F_Acteur(Acteurs acteurs)
    { InitializeComponent();}
    On se demande bien en effet ce que F_Acteur fait de acteurs passé en paramètre
    ne manquerait-il pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //...
    private Acteurs myacteurs
    public F_Acteur(Acteurs acteurs) 
     {
       this.myacteurs = acteurs; 
       InitializeComponent(); 
     }
    Avec l'utilisation maintenant de this.myacteurs par l'instance de F_Acteur pour tout affichage necessaire
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    Merci beaucoup pour touts vos conseils. Ca marche a merveille !

    Mais lorsque je quitte le 2ième formulaire, est-il possible de renvoyer l object acteurs au 1er formulaire ?

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par ToxiZz
    Mais lorsque je quitte le 2ième formulaire, est-il possible de renvoyer l object acteurs au 1er formulaire ?
    Yes of course !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
     
    namespace Application1
    {
        public partial class F_Index : Form
        {
            Acteurs acteurs = new Acteurs();
        }
        private void TSMI_ActeursAjouter_Click(object sender, EventArgs e)
        {
            F_Acteur f_Acteur = new F_Acteur(acteurs)
            f_Acteur.ShowDialog();
            this.myActeurs = f_Acteur.Acteurs;
        }
    }
     
    namespace Application1
    {
        public partial class F_Acteur : Form
        {
     
                private Acteurs myacteurs
    public F_Acteur(Acteurs acteurs)
     {
       this.myacteurs = acteurs;
       InitializeComponent();
     }
     
        }
     
        public Acteur Acteurs
        {
            get { return this.myacteurs;
         }
     
    }
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Mais lorsque je quitte le 2ième formulaire, est-il possible de renvoyer l object acteurs au 1er formulaire ?
    corriger moi si je me trompe, mais comme le form2 contient une reference de l'objet Acteurs créé dans le form1.
    Il n'est pas necessaire de renvoyer l'objet form2 vers le form1.
    Se serait copier l'objet sur lui même ?

    non ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 83
    Points : 107
    Points
    107
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    F_Acteur(myacteurs);
    Un objet (en l'occurence ici ta classe "Acteur") n'est manipulé que via une référence sur lui-même. Donc, ce que tu transmet à ta fonction n'est pas l'objet lui-même(myacteurs) mais une référence sur cet objet.Tu vas donc dupliquer la référence de l'objet et non pas l'objet lui-même.

    l'objet "Acteurs" de ta form principale, et l'objet "myacteurs" de ta form pointent sur le même objet. Si tu modifie l'objet "myacteurs", tu modifieras par conséquence l'objet "Acteurs" puisqu'il s'agit du même objet.

    Donc quand tu modifie this.acteurs, tu modifie l'objet original "Acteur".

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    +1.

    Les objets sont passé par références et les types de base par valeur.
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Et moi qui me prenait la tête àfaire des tests pour comprendre ce qui m'échappait

    Merci !!

    bye

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 215
    Points : 71
    Points
    71
    Par défaut
    Sur quel evenement du form 1 dois-je mettre a jour mes listbox qui contiennent les acteurs ?

    Donc je voudrais que lorsque qu'on quitte la fenetre d ajout par ex, remettre a jour les listbox du form index.

  10. #10
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par ToxiZz
    Sur quel evenement du form 1 dois-je mettre a jour mes listbox qui contiennent les acteurs ?

    Donc je voudrais que lorsque qu'on quitte la fenetre d ajout par ex, remettre a jour les listbox du form index.
    met le a la suite du showdialog().

    Par contre si tu utilise Form.Show() il faut que se soit ta form 2 qui apelle la methode de mise a jour depuis owner.MaMethodeDeMiseAJour();

    owner est tres simple a utiliser. Tu fais dans form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void UneMethodeQuelquonque()
    {
          //sauf si tu veux recuperer des valeurs de form2 dans la suite du code 
          new.new Form2.Show(this);// transmission de owner dans les parentheses
          //si tu veux recuperer des valeurs de form2 dans la suite du code 
          Form2 F2 = new Form2.Show(this);
    }
    public void MaMethodeDeMiseAJour()
    {
        //traitement
    }
    et dans form 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // soit dans le validated soit dans le close de la form
    {
    if (owner is Form1) //s'assurer que c'est le bon type (on ne sait jamais ...)
    {
    owner.MaMethodeDeMiseAJour();
    }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment je peux passer un parametre a une sous requete
    Par boulhous dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/01/2010, 11h10
  2. Réponses: 3
    Dernier message: 03/09/2009, 10h54
  3. Passer des variables d'une form à l'autre
    Par flydan dans le forum Débuter
    Réponses: 3
    Dernier message: 11/10/2007, 13h19
  4. problème à passer des valeurs d'une form à l'autre
    Par gibea00 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/08/2007, 13h45
  5. Réponses: 2
    Dernier message: 04/10/2005, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo