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

C# Discussion :

accès à un bouton d'un autre form


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut accès à un bouton d'un autre form
    Bonjour à tous,

    Voila mon problème, j'aimerais accéder à un bouton qui se trouve dans un autre form. Mais je n'y arrive pas...

    Comment procéder?

    Merci d'avance.

  2. #2
    Membre habitué Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Accéder au bouton lui même ? (pour par exemple changer son texte etc ..)
    Ou accéder a un événement du bouton ? (par exemple le click ?)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Je désactive le bouton dans le load de son propre form et j'aimerais le réactiver quand je clic sur OK dans un autre form. La technique que je vaut faire n'est peut être pas la bonne...

  4. #4
    Membre habitué Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Question intéressante en fait je trouve
    Tout dépend un peu de comment se passe ton application.
    Tu peux m'éclairer ?

    Tu as une Form1 avec un bouton désactivé.
    Une Form2 qui voudrait réactivé ce bouton a partir de l événement d'un de ces boutons, ça je crois avoir compris.

    Ta Form2, elle est lancée à partir de ta Form1 ?
    avec Show() ? ShowDialog() ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Dans le load de mon form 1 les bouton sont désactivé si le fichier n'existe pas.

    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
    private void Form1_Load(object sender, EventArgs e)
            {
                string Dossier = Application.StartupPath;
                string Chemin = System.IO.Path.Combine(Dossier, fichier.FichierJoueurs);
     
                MessageBox.Show(Chemin);
     
     
                if (System.IO.File.Exists(Chemin))
                {
                    bChargerJoueur.Enabled = true;
                    bChoixJoueur.Enabled = true;
                    bCommencerPartie.Enabled = true;
                    bNewPerso.Enabled = true;
                }
                else
                {
                    bChargerJoueur.Enabled=false;
                    bChoixJoueur.Enabled = false;
                    bCommencerPartie.Enabled = false;
                    bNewPerso.Enabled = false;
                }
     
            }
    J'appelle le form 2 comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void bNewPerso_Click(object sender, EventArgs e)
            {
                New_Perso p2 = new New_Perso();
                p2.Show();
            }
    Dans le form 2 je crée mon fichier et je met un joueur dedans lorsque je clic sur OK.

    J'aimerais que quand je clic sur Ok il réactive mes boutons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bChargerJoueur.Enabled = true;
                    bChoixJoueur.Enabled = true;
                    bCommencerPartie.Enabled = true;
                    bNewPerso.Enabled = true;
    J'espère avoir été clair

  6. #6
    Membre habitué Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Oui, je vois.
    Alors il faut que ta Form2 connaisse ta Form1.

    Pour ça, la manière la plus simple c'est de passer ta Form1 en paramètre au constructeur de ta Form2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void bNewPerso_Click(object sender, EventArgs e)
            {
                New_Perso p2 = new New_Perso(this);
                p2.Show();
            }
    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
     
    public partial class New_Perso : Form
        {
            Form1 Parent;
            public New_Perso(Form1 f)
            {
                InitializeComponent();
                Parent = f;
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                Parent.button2.Enabled = true;
            }
        }
    Tu vois donc que dans l'événement button1_Click de ma forme2, je réactive le bouton de ma Form1. Seulement, par défaut, les boutons sont private. Si tu veux pouvoir y accéder comme dans l'exemple il faut que tu mettes le bouton à réactiver en public (à changer dans le fichier Form1.Designer.cs)

    En procédant de la sorte, ça va fonctionner.
    Seulement, je suis pas sur que ça soit très "propre" et la sur le coup, je vois pas d'autre moyen. Peut-être quelqu'un qui passera par ce topic trouvera une meilleure solution
    De plus, je suis pas partisan de l'utilisation de show() au lieu de showDialog() sauf si c'est vraiment nécessaire. Est-ce le cas dans ton application ?

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Echanger des event entre les formes est une solution quand même plus simple que les faire se référencer l'une l'autre (ce qui est quand même très très sale).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Membre habitué Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Echanger des event entre les formes est une solution quand même plus simple que les faire se référencer l'une l'autre (ce qui est quand même très très sale).
    Oui, exact. Pas pensé a ça sur le coup.
    Vrai que ça fait pas très propre. Mais je me demande s'il existe vraiment une méthode propre dans ce genre de situation avec un Show().

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2009
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Antho42 Voir le message
    Oui, exact. Pas pensé a ça sur le coup.
    Vrai que ça fait pas très propre. Mais je me demande s'il existe vraiment une méthode propre dans ce genre de situation avec un Show().
    Je pense que tu peut parcourir les forms ouvertes pour obtenir ta form parent puis accéder au control à éditer.

    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
     
     int iOpenForm = Application.OpenForms.Count;
     int iControlCount;
     foreach (Form f in Application.OpenForms)
     {
         iControlCount = Application.OpenForms[iOpenForm - 1].Controls.Count;
     
                    if (f.GetType() == callingForm.GetType())
                    {
                        foreach (Control controle in f.Controls)
                        {
                            if (controle.Name.ToString() == button1.Name.ToString())
                            {
                                button1.Enabled = true;
                            }
                        }
                    }
      }

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    J'ai utilisé la méthode d'Antho42, d'après ce que je lis elle est pas super propre mais elle fonctionne, c'est le principale à mon stade, ça me permet d'avancer dans mon programme.

    Un grand merci à vous tous!

    ps: Tant que j'y suis quelle est la différence entre show() et showDialog? Parce que je doit avouer que j'utilise show() parce que je l'ai vu aux cours et sans être au courant de l'existence de ShowDialog()...

  11. #11
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    Citation Envoyé par mo5andes Voir le message
    Je pense que tu peut parcourir les forms ouvertes pour obtenir ta form parent puis accéder au control à éditer.

    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
     
     int iOpenForm = Application.OpenForms.Count;
     int iControlCount;
     foreach (Form f in Application.OpenForms)
     {
         iControlCount = Application.OpenForms[iOpenForm - 1].Controls.Count;
     
                    if (f.GetType() == callingForm.GetType())
                    {
                        foreach (Control controle in f.Controls)
                        {
                            if (controle.Name.ToString() == button1.Name.ToString())
                            {
                                button1.Enabled = true;
                            }
                        }
                    }
      }
    Jespérais ne jamais voir du code de ce genre. C'est une des facon de faire la plus sale. Sérieusement, si jai un programmeur dans mon équipe qui code de cette facon, je lui montre la porte et c'est byebye.


    Il y a plein de facon de faire, form2 ne devrais pas interagir avec les composant de form1. C'est a form1 de déterminer quand elle doit réactivé sont bouton. Cela s'appel de l'encapsulation.
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  12. #12
    Membre habitué Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par gonzo59 Voir le message
    ps: Tant que j'y suis quelle est la différence entre show() et showDialog? Parce que je doit avouer que j'utilise show() parce que je l'ai vu aux cours et sans être au courant de l'existence de ShowDialog()...
    Show() : http://msdn.microsoft.com/fr-fr/libr...ow(VS.80).aspx

    ShowDilaog() : http://msdn.microsoft.com/fr-fr/libr...og(VS.80).aspx

    En gros, c'est question d'être modale ou non.
    Maintenant dans ton application, je sais pas ce qui est le mieux.

    Comme l'a bien dit Shwin, ça serait bien que Form2 n'aie pas a changer lui même l'état du bouton de Form1. Que ça soit Form1 qui change l'état de son propre bouton (private) quand il a été prévenu par Form2.

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

Discussions similaires

  1. [Débutant] Exécution du code d’un bouton dans un autre form
    Par hassane03 dans le forum VB.NET
    Réponses: 4
    Dernier message: 02/02/2013, 20h24
  2. Réponses: 6
    Dernier message: 21/04/2011, 15h03
  3. Réponses: 0
    Dernier message: 21/04/2011, 13h23
  4. Réponses: 6
    Dernier message: 09/10/2010, 23h07
  5. effectuer un test sur un bouton d'un autre form
    Par a.sana dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/06/2009, 22h08

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