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 :

recuperation d'un click d'un usercontrol dans le Form ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut recuperation d'un click d'un usercontrol dans le Form ?
    Bonjour,
    Voilà j'ai besoin de faire une interface de ce type :


    Je travail sous VS2008.

    Je dispose d'un formulaire MainForm qui sert de fenetre principale de l'application ainsi que de divers controls qui sont stockés dans des usercontrol
    MenuUC, Section1UC,Section2UC.

    Pour afficher les UC dans mon Form j'utilise un panel comme conteneur.

    Au chargement du form je defini l'affichage de base en assigant MenuUC au panel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            private void MainForm_Load(object sender, EventArgs e)
            {
                this.panel1.Controls.Clear();
                MenuUC UC = new MenuUC();
                this.panel1.Controls.Add(UC);
            }
    mais ca a partir de la que ca se corce. Je n'arrive pas a recuperer le click sur les boutons des UC pour afficher l'uc suivante.

    j'ai penser a délégé un event de l'uc au form avec un passage de la variable cible avec lequel j'utiliserais ce 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
    18
     
    this.panel1.Controls.clear();
    if(cible=="section1")
    {
            Section1UC UC = new Section1UC();
    }
    else
    {
            if(cible=="section2")
            {
                     Section2UC UC =new Section2UC();
            }
            else
            {
                     MenuUC UC = new MenuUC();
            }
    }
    this.panel1.Controls.Add(UC);
    mais je ne voit pas comment le mettre en oeuvre j'ai du mal a passer du usercontrol au form.

    Si quelqu'un pouvait m'aider car là, je nage dans la confusion ^^

    Merci.

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Une idée serait de rendre ton bouton publique au niveau de Section1UC et Section2UC et ta form n'aura plus qu'à s'abonner à l'évènement onClick.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // ...
    Section1UC UC = new Section1UC();
    UC.ButtonBack.Click += new System.EventHandler(this.button1_Click);
    // ...
     
    private void button1_Click(object sender, EventArgs e)
    {
     
    }
    Et pour marquer ton bouton comme publique au niveau du user control,
    - soit tu vas dans le designer où se trouve le bouton, tu le sélectionnes et dans le panel "properties", tu modifies la propriété "Modifiers" du bouton en "Public".
    - soit, tu crées dans le code behind de ton user control, une propriété publique qui renvoit l'instance de ton bouton.

    Voila une solution "quick & dirty" Si tu veux une solution plus propre (et que ça a un intérêt pour ton projet !!!), n'hésite pas

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut
    merci pour la reponse rapide ^^

    Après avoir passer mes boutons en public,

    j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
               //
                // retour du click
                //
                MenuUC UC = new MenuUC();
                UC.Section1.Click += new System.EventHandler(this.Section1Choice_Click);
    dans le initializeComponent() du MainForm

    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            private void Section1Choice_Click(object sender, EventArgs e)
            {
                this.panel1.Controls.Clear();
                Section1UC UC = new Section1UC();
                this.panel1.Controls.Add(UC);
            }
    dans le MainForm() du MainForm

    (NB : nerf les partial class)

    j'obtient un warning et rien ne se passe en debug lors du click sur le bouton

    Events cannot be set on the object passed to the event binding service because a site associated with the object could not be located.
    j'obtient d'ailleur egalement ce message si je click sur l'onglet MainForm.cs[Design]

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut
    Alors voilà apres plusieurs heures de recherches et quelque tentatives j'ai creer un projet test dans lequel j'ai créer un usercontrol pour en faire une dll

    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace boutonTest
    {
     
        public partial class testbtn : UserControl
        {
            public testbtn()
            {
                InitializeComponent();
            }
     
            public virtual void OnBtnClick()
            {
                if (BtnClick != null)
                {
                    BtnClick();
                }
            }
     
            private void RetourBtn_Click(object sender, System.EventArgs e)
            {
                OnBtnClick();
            }
        }
    }
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    namespace boutonTest
    {
        partial class testbtn
        {
            /// <summary> 
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary> 
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Component Designer generated code
     
            /// <summary> 
            /// Required method for Designer support - do not modify 
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.RetourBtn = new System.Windows.Forms.Button();
                this.SuspendLayout();
                // 
                // RetourBtn
                // 
                this.RetourBtn.Location = new System.Drawing.Point(3, 3);
                this.RetourBtn.Name = "RetourBtn";
                this.RetourBtn.Size = new System.Drawing.Size(75, 23);
                this.RetourBtn.TabIndex = 0;
                this.RetourBtn.Tag = "Menu";
                this.RetourBtn.Text = "Retour";
                this.RetourBtn.UseVisualStyleBackColor = true;
                this.RetourBtn.Click += new System.EventHandler(this.RetourBtn_Click);
                // 
                // testbtn
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.Controls.Add(this.RetourBtn);
                this.Name = "testbtn";
                this.Size = new System.Drawing.Size(81, 29);
                 this.ResumeLayout(false);
     
            }
     
            #endregion
     
            public System.Windows.Forms.Button RetourBtn;
            public delegate void BtnClickHandler();
            public event BtnClickHandler BtnClick;
        }
    ensuite j'ai creer un nouveau projet dans lequel j'ai importer ma dll.

    dans le form j'ai glisser un panel contenant une image que j'ai configurer en invisible et un second ou j'ai glisser le bouton propre a ma dll.

    ensuite j'ai creer une fonction pour que le click du bouton affiche ou non l'image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            private void Menu()
            {
                if (panel1.Visible == false)
                {
                    panel1.Show();
                }
                else
                {
                    panel1.Hide();
                }
            }
    ensuite j'ai relier l'evenement du bouton importe a cette fontion et
    là tout marche bien.

    mais ce n'est pas ce que je veut obtenir.

    je supprime alors le boutton dans le panel et je met sur le OnLoad du formulaire mon code pour afficher dynamequement ma dll.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            private void Form1_Load(object sender, EventArgs e)
            {
                panel2.Controls.Clear();
                testbtn Page = new testbtn();
                panel2.Controls.Add(Page);
            }
    Et la je m'apercois que je ne sais pas comment relier l'evenement de mon boutton recemment ajouter a ma fonction d'affichage de mon image.

    Si quelqu'un pouvais m'aider ^^?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut
    Bon bah finalement j'aurais trouver tout seul ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            private void Form1_Load(object sender, EventArgs e)
            {
                panel2.Controls.Clear();
                testbtn Page = new testbtn();
                Page.BtnClick += new testbtn.BtnClickHandler(this.Menu);
                panel2.Controls.Add(Page);
     
            }
    Voilà en déclarant comme ceci l'event à la création du bouton on récupere l'event de la library ^^

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

Discussions similaires

  1. [Débutant] Fonctionnement des usercontrols dans les forms
    Par Cerecare dans le forum VB.NET
    Réponses: 12
    Dernier message: 11/12/2014, 16h22
  2. Capturer un evenement d'un UserControl dans un form
    Par aiglelibre dans le forum Développement Windows
    Réponses: 3
    Dernier message: 23/05/2012, 14h04
  3. [Débutant]Appeler un UserControl dans une Form
    Par Shr3ck dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2009, 14h14
  4. Déterminer la position d'un UserControl dans une Form
    Par Delphi-ne dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 25/11/2007, 13h59
  5. Réponses: 15
    Dernier message: 21/07/2005, 15h05

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