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 :

Evenement global C# Winforms


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Par défaut Evenement global C# Winforms
    Bonjour à tous voici une nouvelle énigme.

    Je me suis crée un calendrier personnalisé que voici :

    Nom : Calendar.png
Affichages : 151
Taille : 6,8 Ko

    Chaque case/Chaque label contient un "-" .
    J'ai crée également un ContextMenuStrip qui propose comme choix :
    - V
    - X
    - -

    J'aimerais que quelque soit le label , quand je clique droit dessus j'appelle ce contextMenuStrip et je lui passe en paramètre le nom du label sur lequel j'ai cliqué pour l’appeler.

    De sorte à ce que lorsque je crée l'évenement VtoolStrip_CLick(...) cela change la couleur de police et le texte du label correspondant de "-" à "V".

    Je ne compte pas faire à chaque label un événement ContexMenuStrip.Show(Cursor.position) sinon je vais en avoir pour 600000 milles ans. Et je n'ai pas du tout d'idée pour contourner ce problème.

    En espérant que vous ayez des idées.

    Merci d'avance

  2. #2
    Membre très actif Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    339
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 339
    Par défaut
    Bonjour,

    avec un début de code montrant ce que tu as, ça permettrait de t'aiguiller plus facilement.

    Pour faire simple, il te faut un handler de click, du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void MonLabelHandler_Click(object sender, EventArgs e)
    {
        //Je récup le sender du clic, et j'essaye de le cast en label
        Label monlabel = sender as Label; 
     
        //si le cast a réussi, monlabel n'est pas null, je peux en faire qqchose
        if(monlabel != null)
        {
           // faire qqch, notamment, changer son contenu ou sa couleur, ou le passer à ton menuStrip par exemple pour qu'il en fasse qqch
        }
    }
    Ensuite, il va falloir "câbler" ce handler au click de chaque label.
    Si tu les a créé manuellement, via glisser/déposer de l'IDE, il va falloir les rechercher (via une boucle, en parcourant les controls de ton forme et vérifier qu'ils sont du type Label par exemple).
    Si tu les a créé par code, tu a déjà ta liste de labels, qu'il faudra parcourir
    Et pour chaque label, assigner le handler de click à l'event click du label

    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (var unLabel in tousMesLabels)
    {
        unLabel.Click += new EventHandler(MonLabelHandler_Click); // j'assigne le handler au click du label  
    }
    Et tu devrais arriver à tes fins.

    PS : Mon C# est rouillé, mais l'idée est là

  3. #3
    Membre confirmé
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Par défaut
    Salut , en fait j'ai pas de début de code à part si tu veux le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Label 178_Click(Event....)
    {
         ContextMenuStrip.Show(Cursor.Position); 
    }
    Et du coup je peux pas faire ce procédé à mes 300 labels.


    Donc merci beaucoup pour ta réponse je vais essayer de voir avec ça mais du coup en récupérant mes éléments de ma forms de type label cela va traiter aussi les labels qui me servent de titre ?
    Et vient la question aussi comment est-ce que l'application va stocker la valeur qui aura changer , faut que je lit chaque label à une ligne d'une table en Base de donnée?

    Je pense que je n'ai pas pris la bonne solution...

  4. #4
    Membre très actif Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    339
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 339
    Par défaut
    Ouille, si tu as créé tes labels à la main dans l'IDE via drag/drop, t'as pas du t'amuser.
    Par code, t'aurais pu faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Créons 50 labels
    for (var i = 0, i < 50, i++)
    {
        Label lb = new Label(); // Créer un label
        lb.Name = "Label" + i; // lui donner un nom parlant
        lb.Location = new Point(X,Y); // Définir X et Y en étant malin pour positionner mon label
        lb.Size = new Size(15, 15); // Pour définir sa taille
        lb.Text = "-"; // du texte à mettre dedans
        lb.Click += new EventHandler(monSuperHandlerDeClick); //hop, j'assign le handler du click
        monForm.Controls.Add(lb); // J'ajoute mon label aux controls de mon form
     
        i+= 1;
    }
    Sinon, oui, il faut récupérer tous les labels existants de ta form. Et les trier sur un critère discriminant te permettant de pas prendre ceux qui servent de titre.

  5. #5
    Membre confirmé
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Par défaut
    C'est clairement pas bête. après comme j'ai dis tout à l'heure il me restera le problème de " Comment est-ce que je garde le nouveau statut du label en mémoire".Je vais reflechir pour tourner le problème autrement.

    En tous cas merci beaucoup je pense que cela va beaucoup m'aider. Je passe le topic en résolu. Merci à toi

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

Discussions similaires

  1. gestion d'evenement globale sur une arbo de symbole
    Par tchetchene dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 18/05/2009, 23h16
  2. evenement clavier global
    Par CaptainChoc dans le forum wxWidgets
    Réponses: 8
    Dernier message: 03/11/2006, 14h30
  3. [WinForms]Désactiver un evenement
    Par ben123456 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 14/09/2006, 16h49
  4. [VB NET]: Evenement sur Winform: "sur réduction"
    Par ADONET dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/02/2006, 11h52
  5. [SWING]Evenement global à une fenetre
    Par nicoo dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 03/05/2005, 12h05

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