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 :

Retourner la valeur d'un label contrôle utilisateur


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 71
    Points : 25
    Points
    25
    Par défaut Retourner la valeur d'un label contrôle utilisateur
    Bonjour à tous.

    Je développe aujourd'hui un écran avec une liste venant d'SQL. J'ai plusieurs sur ma ligne SQL que je mets en bon format grâce à un contrôle utilisateur que j'ai créé.

    J'utilise des get / set pour retourner les valeurs de texte et de couleurs. Seulement, j'ai aussi besoin de pouvoir cliquer sur un label et que ça me retourne une information au choix du contrôle utilisateur.

    Voici ma classe Operations.cs :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    public partial class Operations : UserControl
        {
     
           // Je définie les propriétés des labels que je veux pouvoir modifier depuis mon autre form
           public string NoOfOp
            {
                get { return lblNoOpOf.Text; }
                set { lblNoOpOf.Text = value; }
            }
     
            public string Priorite
            {
                get { return lblPriorite.Text; }
                set { lblPriorite.Text = value; }
            }
     
            public string Poste
            {
                get { return lblPoste.Text; }
                set { lblPoste.Text = value; }
            }
     
            public string RetardAvanceText
            {
                get { return lblRetardAvance.Text; }
                set { lblRetardAvance.Text = value; }
            }
     
            public string DescriptionOp
            {
                get { return lblDescriptionOp.Text; }
                set { lblDescriptionOp.Text = value; }
            }
     
            public string NoArticle
            {
                get { return lblNoArticle.Text; }
                set { lblNoArticle.Text = value; }
            }
     
            public string Date
            {
                get { return lblDate.Text; }
                set { lblDate.Text = value; }
            }
     
            public string PcesPoste
            {
                get { return lblPcesPoste.Text; }
                set { lblPcesPoste.Text = value; }
            }
     
            public string TpsPoste
            {
                get { return lblTpsPoste.Text; }
                set { lblTpsPoste.Text = value; }
            }
     
            public string TempsPoste
            {
                get { return lblTempsPoste.Text; }
                set { lblTempsPoste.Text = value; }
            }
     
            public string Client
            {
                get { return lblClient.Text; }
                set { lblClient.Text = value; }
            }
     
            public string TypeOp
            {
                get { return lblTypeOp.Text; }
                set { lblTypeOp.Text = value; }
            }
     
            public Color RetardAvanceCol
            {
                get { return lblRetardAvance.ForeColor; }
                set { lblRetardAvance.ForeColor = value; }
            }
     
            public Operations()
            {
                InitializeComponent();
            }
     
     
            // Je créé mon événement de clique sur le label que je veux rendre clickable
            public event EventHandler NoOfClick;
     
            private void lblNoOpOf_Click(object sender, EventArgs e)
            {
                if(this.NoOfClick != null)
                    this.NoOfClick(this,e);
            }
        }
    Voici mon MainForm.cs :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    string connectionString = "Data Source=SERVEUR;Initial Catalog=BD_TRS;Integrated Security=True";
     
            public MainForm()
            {
                InitializeComponent();
            }
     
            private void MainForm_Load(object sender, EventArgs e)
            {
                GetList();
            }
     
            public void GetList()
            {
                DataTable dtOps = new DataTable();
                DataView dvOps = dtOps.DefaultView;
     
                dtOps.Clear();
     
                string strQueryDatas;
     
                SqlConnection con = new SqlConnection(connectionString);
     
                strQueryDatas = "SELECT * FROM [BD].[dbo].[VIEW] WHERE SsSect = 'A' OR SsSect = 'B'  ORDER BY CASE WHEN PriorOF = '' THEN 2 ELSE 1 END, PriorOF ,DatOpe ASC";
     
                SqlDataAdapter adOps = new SqlDataAdapter(strQueryDatas, con);
     
                adOps.Dispose();
     
                // J'effectue ma requête pour mettre ma vue dans un tableau !
                try
                {
                    con.Open();
                    SqlCommand sqlCmd = new SqlCommand(strQueryDatas, con);
                    sqlCmd.CommandTimeout = 500;
                    adOps.SelectCommand = sqlCmd;
                    adOps.Fill(dtOps);
                    adOps.Dispose();
                    sqlCmd.Dispose();
                    con.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
     
                int top = 50;
                int left = 100;
     
     
                // Je créé une liste de mon contrôle utilisateur créé ci-dessus Operations
                List<Operations> Ops = new List<Operations>();
     
                DateTime dtNow = DateTime.Now;
     
                // Je boucle pour le nombre d'enregistrement que j'ai dans mon dataview
                for (int i = 0; i < dvOps.Count; i++)
                {
                    // Je créé un enregistrement pour chaque ligne de ma datavue et je remplie les données ce qui me créé 1 contrôle utilisateur "Operations" pour chaque ligne SQL. Tout ça fonctionne.
                    Operations op1 = new Operations();
                    op1.NoOfOp = dvOps[i]["NumOF"].ToString().Trim() + " - " + dvOps[i]["NumOP"].ToString();
                    op1.DescriptionOp = dvOps[i]["DesOpe"].ToString().Trim();
                    op1.NoArticle = dvOps[i]["NumArt"].ToString().Trim();
                    op1.Date = dvOps[i]["DateFormatee"].ToString().Trim();
                    op1.PcesPoste = Convert.ToString(Convert.ToDouble(String.Format("{0:0}", dvOps[i]["QtePoste"].ToString().Trim()))) + " pces";
                    op1.TpsPoste = Convert.ToString(Convert.ToDouble(String.Format("{0:0.00}", dvOps[i]["TpsChargePoste"].ToString()))) + " Hrs";
                    op1.Client = dvOps[i]["NomClient"].ToString().Trim();
                    op1.TypeOp = dvOps[i]["MAKTX"].ToString();
                    op1.Priorite = dvOps[i]["PriorOF"].ToString();
                    op1.Poste = dvOps[i]["SsSect"].ToString();
                    DateTime dt = Convert.ToDateTime(dvOps[i]["DateFormatee"]);
                    TimeSpan t = dtNow.Date - dt.Date;
     
                    if (Convert.ToDouble(t.TotalDays) > 3)
                        op1.RetardAvanceCol = Color.Red;
                    else if (Convert.ToDouble(t.TotalDays) < 4 && Convert.ToDouble(t.TotalDays) > -1)
                        op1.RetardAvanceCol = Color.Orange;
     
     
                    op1.RetardAvanceText = Convert.ToString(Math.Abs(Convert.ToDouble(t.TotalDays))) + " jrs";
     
                    op1.NoOfClick += new EventHandler(lblNoOf_NoOfClick);
     
                    // Je place mes éléments pour pas qu'ils soient l'un sur l'autre.
                    op1.Left = left;
                    op1.Top = top;
                    Ops.Add(op1);
                    pnlListe.Controls.Add(op1);
                    top += op1.Height + 10;
                }
     
                lblNbOps.Text = dvOps.Count.ToString() + " OPs";
            }
     
            // Je créé ici une méthode pour me permettre le clique
            protected void lblNoOf_NoOfClick(object sender, EventArgs e)
            {
                 // Je souhaite ici pouvoir retourner le texte d'un des champs, c'est égal lequel, remplis dans la fonction ci-dessus.
                lblNbOps.Text = (string)((Label)sender).Text;
            }
    Voilà, j'ai mis en commentaire. Mon but serait dans ma void lblNoOf_NoOfClick de pouvoir avoir une méthode qui me retourne une information, c'est égal laquelle, de l'opération que je clique. Si je mets en dur un messagebox avec le texte "Toto" tous les labels que je clique me renvoient "Toto".

    Peut-être que je créé mal mes éléments ?

    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Utilise l'évènement natif Click du UserControl.


    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public partial class Operations : UserControl
    {
        public Operations()
        {
            this.Click += new System.EventHandler(this.operations_Click);
        }
     
        private void operations_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Quelqu'un m'a appuyé dessus !");
        }
    }

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Après relecture je pense que ma réponse ne correspond pas à tes attentes.
    Utilise l'évènement natif Click de tes Label, j'en crée 3 pour l'exemple.

    Code c# : 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
    public partial class Operations : UserControl
    {
        Label lb1;
        Label lb2;
        Label lb3;
     
        public Operations()
        {
            lb1 = new Label() { Text = "lb1", Location = new Point(0, 0) };
            lb2 = new Label() { Text = "lb2", Location = new Point(0, 22) };
            lb3 = new Label() { Text = "lb3", Location = new Point(0, 44) };
     
            Controls.Add(lb1);
            Controls.Add(lb2);
            Controls.Add(lb3);
     
            // Rend cliquable lb1 et lb3
            lb1.Click += new System.EventHandler(this.label_Click);
            lb3.Click += new System.EventHandler(this.label_Click);
        }
     
        private void label_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Quelqu'un m'a appuyé dessus !\r\nJe suis " + ((Label)sender).Text);
        }
    }

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    Bonjour ericlm128 !

    Merci beaucoup, beaucoup pour ta réponse.

    Ceci est parfait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Operations()
            {
                InitializeComponent();
     
                lblNoOpOf.Click += new System.EventHandler(this.lbl_Click);
            }
     
            private void lbl_Click(object sender, EventArgs e)
            {
                MessageBox.Show(((Label)sender).Text);
            }
    Maintenant quand je clique sur mon label lblNoOfOp ça me retourne le texte de celui-ci.

    Ma question est maintenant la suivante : est-il possible de gérer que quand je clique sur lblNoOfOp je puisse choisir de retourner le texte d'un autre label du user control ? Ou je dois obligatoirement rendre celui-ci clickable ?

    Merci.

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui bien sur tu peux faire ce que tu veux. J'ai utilisé la même fonction pour plusieurs label mais tu pourrait choisir d'en avoir plusieurs.

    Sinon dans la fonction tu peux détecter que c'est le label lblNoOpOf qui à déclencher l'évènement click.
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    if (sender == lblNoOpOf)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    Merci pour ta réponse.

    C'est pas tout a fait ça. Je souhaiterais rendre cliquable un seul label (lblNoOfOp) mais choisir le texte d'un autre label du contrôle utilisateur à retourner. Par exemple dire que je veux retourner la valuer de lblNoArticle ou alors la valeur de lblTemps, mais toujours et seulement au clique sur lblNoOfOp.

    Merci.

    EDIT : Mon besoin est résolu, merci beaucoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void lbl_Click(object sender, EventArgs e)
            {
                MessageBox.Show(lblAChoix.Text);
            }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    Salut.

    Saurais-tu faire la même chose en WPF par hasard ?

    Ça ne fonctionne plus avec la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblNoOpOf.Click+= new System.EventHandler(this.lbl_Click);
    Impossible de convertir implicitement le type 'System.EventHandler' en 'System.Windows.Input.MouseButtonEventHandler'

    EDIT Résolu :

    Solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblNoOpOf.MouseLeftButtonUp += new MouseButtonEventHandler(lbl_Click);

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    Bonjour

    Savez-vous comment récupérer la valeur d'un UnifromGrid en sender ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <UniformGrid Tag="{Binding strRueck}"  Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" Background="{Binding scbBackColor}" MouseLeftButtonUp="Test" >
    En tout logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string str = ((TextBlock)sender).Tag.ToString();
    Ne fonctionne plus car ce n'est plus un TextBlock mais un UniFormGrid. Grid ne fonctionne pas à la place de TextBlock

    Merci

Discussions similaires

  1. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  2. Réponses: 7
    Dernier message: 15/03/2005, 14h44
  3. [PL/SQL] Fonction qui retourne plusieurs valeurs
    Par Loko dans le forum Oracle
    Réponses: 2
    Dernier message: 07/12/2004, 09h43
  4. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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