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 :

Passage de donnée entre Form et UserControl


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Passage de donnée entre Form et UserControl
    Bonjour,

    Je suis en train de faire un photoviewer pour un projet scolaire. Je dois utiliser un UserControl où je défini mes propres objets graphiques (Panel, TextBox...)
    Dans mon MainForm, je crée un bouton, et l'action de click doit créer un nouvel Album caractérisé par un panel. Jusque là tout va bien.
    Maintenant, j'ai une zone "d'information" dans mon MainForm qui doit afficher le nom d'un album dans un Label lorsque je clique sur le Panel qui correspond à l'album. J'override donc la fonction OnClick de Panel pour qu'il actualise le label, mais je n'ai pas accès au label... Ma fonction OnClick étant écrite dans le UserControl, je n'ai pas accès aux informations présentes dans le MainForm.
    Je pense que je m'y prend mal pour le coup..

    Quelqu'un serait-il comment je pourrais faire pour me sortir de ce problème svp?

    Voici le code se trouvant dans mon UserControl est:
    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
    class PanelPlus : Panel
        {
            Album my_album = new Album();
     
            public PanelPlus()
            {
                this.BackColor = Color.Red;
                this.Size = new System.Drawing.Size(150, 150);
            }
     
            protected override void OnClick(EventArgs e)
            {
     
            }
     
            private void InitializeComponent()
            {
                ((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
                this.SuspendLayout();
                ((System.ComponentModel.ISupportInitialize)(this)).EndInit();
                this.ResumeLayout(false);
            }
        }
    et mon MainForm lui se trouve dans un autre .cs

    Merci d'avance :-)

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Bonjour,

    tu as plusieurs choix, en voici quelques uns :

    - Tu déclares ton label en public , ou une variable publique que ton label ira chercher.

    - Tu y accèdes de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                // dans ton UserControl , lors de l'appui
                Form1 form1 = (Form1)this.ParentForm;
                form1.Controls.Find("label1",true).FirstOrDefault().Text = "Voici une description";
    Il y a surement une manière plus jolie mais celle-ci fonctionne.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Citation Envoyé par PixelJuice Voir le message
    Bonjour,

    tu as plusieurs choix, en voici quelques uns :

    - Tu déclares ton label en public , ou une variable publique que ton label ira chercher.

    - Tu y accèdes de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                // dans ton UserControl , lors de l'appui
                Form1 form1 = (Form1)this.ParentForm;
                form1.Controls.Find("label1",true).FirstOrDefault().Text = "Voici une description";
    Il y a surement une manière plus jolie mais celle-ci fonctionne.
    Le problème de cette solution c'est que si le UserControl est posé sur une Form sans Label1 ... Boom !

    Le mieux serait de définir un Event dans le userControl, que la Form s'abonne à cet Event (La Form connait le usercontrol pas le contraire) afin de mettre à jour le Label et de lever cet Event dans le UserControl au moment voulu.

Discussions similaires

  1. passage de donnée entre form
    Par Albert_le_5_eme dans le forum VC++ .NET
    Réponses: 8
    Dernier message: 24/11/2006, 10h30
  2. [C#] Passage de paramètre entre forms
    Par farfadet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/02/2006, 14h36
  3. passage de données entre page
    Par flatron dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/01/2006, 13h50
  4. Passage de données entre deux pages
    Par spica92 dans le forum ASP
    Réponses: 2
    Dernier message: 08/09/2005, 14h38
  5. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58

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