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 :

delegate évènement pictureBox [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut delegate évènement pictureBox
    Dans un GroupBox, je crée dynamiquement des PictureBox de p pictureBox sur r rangée. Je mémorise ces objets(pictureBox) dans un tableau pictureArray[r, p].
    L'affichage se fait correctement. Je souhaite maintenant activer la méthode picture_Click lorsque l'évènement Click se produit sur une de ces pictureBox. Ce qui fonctionne très bien si je ne modifie pas le delegate EventHandler. Mais dans ce cas je n'ai aucune information sur la pictureBox qui a déclenché l'évènement.
    J'ai donc créée une classe PictureClickEventArgs : EventArgs pour personnaliser l'information et je crée un delegate MyEventHandler que j'enregistre dans picture.Click qui se trouve dans le tableau pictureArray[r, p].
    J'ai alors le message d'erreur "Impossible de convertir implicitement le type 'Test.Form1.MyEventHandle' en 'System.EventHandler'.
    Voici un extrait du programme:

    public delegate void MyEventHandler(object sender, PictureClickEventArgs e);
    // public event MyEventHandler PictureBox.Click;


    // Initialise la partie
    public void SetGame()
    {
    for (int r = 0; r < nbPictureRangée; r++)
    {
    for (int p = r; p < nbPictureInit - r; p++)
    {
    if (pictureArray[r, p] != null)
    {
    PictureCoord coord;
    coord.R = r;
    coord.P = p;
    pictureArray[r, p].Image = imageList1.Images[1];
    groupBox.Controls.Add(pictureArray[r, p]);

    PictureClickEventArgs e = new PictureClickEventArgs(coord);

    pictureArray[r, p].Click += new MyEventHandler(picture_Click);
    }
    }
    }
    }

    private void picture_Click(object sender, PictureClickEventArgs e)
    {

    MessageBox.Show(groupBox.Name, TabIndex.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    C'est la première fois que je m'adresse à un forum, j'ai beaucoup cherché, mais je ne trouve pas.

  2. #2
    Membre confirmé

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Points : 574
    Points
    574
    Par défaut
    Hello,
    J'ai bien peur que tu ne partes pas dans la bonne direction. Que souhaites-tu faire avec les informations de PictureClickEventArgs dans la méthode picture_Click ? A quoi correspond la classe PictureCoord ?
    "C'est tellement merdique que toute modification est une amélioration !"

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci de t'intéresser à mon problème qui m'empêche d'avancer depuis quelques jours.
    La classe héritée PictureClickEventArgs : EventArgs me permet de communiquer les coordonnées de la pictureBox sur laquelle l'évènement Click a eu lieu. Je rappelle que j'ai affiché p pictureBox sur r rangée à l'intérieur d'un groupBox.
    PictureCoord est une structure qui rassemble les coordonnées des pictureBox.
    public struct PictureCoord
    {
    public int R;
    public int P;

    }

    Et voici la classe qui hérite de EventArgs et qui fournit ces coordonnées à la méthode : picture_Click(object sender, PictureClickEventArgs e)

    public class PictureClickEventArgs : EventArgs
    {
    // Coordonnées Rangée Picture de l'évènement
    Test.Form1.PictureCoord coordRP;

    public PictureClickEventArgs(Test.Form1.PictureCoord theEventCoord)
    {
    coordRP = theEventCoord;
    }

    public Test.Form1.PictureCoord CoordEventArgs
    {
    get { return this.coordRP; }

    }
    }

    Je m'y prend peut-être mal, mais j'ai l'excuse du débutant!!!!

  4. #4
    Membre confirmé

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Points : 574
    Points
    574
    Par défaut
    Ok, je saisis un peu mieux :
    si tu souhaites savoir quel est le PictureBox cliqué, il suffit de le récupérer via l'objet "sender", un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void picture_Click(object sender, EventArgs e)
    {
        PictureBox pictureBox = sender as PictureBox;
        ...
    }
    Après tu peux utiliser pictureBox.Name pour l'identifier clairement ou si tu dois opérer une action directement sur lui, tu peux le faire directement
    "C'est tellement merdique que toute modification est une amélioration !"

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Pour ma part, quand je crée un tableau de contrôles, je place l'index du contrôle dans le tag de celui-ci, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (i = 0; i<len; i++)
    {
       var pb = new PïctureBox();
       ...
       pb.tag = i;
       mesPictureBoxes[i] = pb;
    }
    Comme ça, dans l'évènement click (ou autre), il me suffit de récupérer le tag de l'objet "sender" pour avoir directement l'indice correspondant dans mon tableau, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void picture_Click(object sender, EventArgs e)
    {
        PictureBox pictureBox = sender as PictureBox;
        var index = (int)pictureBox.Tag;
     
        MesPictureBoxes[index] ......
     
     
    }
    Le tag, c'est quelque chose de très pratique, on peut y mettre n'importe quel objet, donc des structures, des pointeurs sur d'autres contrôles, etc.

    A+
    Claude

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci à vous,
    votre solution fonctionne. De plus l'idée du tag va me permettre de passer mes coordonnées.
    Un seul hic, je reste un peu sur ma faim, parce que je ne saurais pas pourquoi je n'ai pas réussi à déclencher l'évènement en utilisant le passage de mes coordonnées par EventArgs, j'ai passé tellement de temps dessus que j'aurai aimé comprendre pourquoi!!!!

    Merci encore, c'est génial ce système de forum.

  7. #7
    Membre confirmé

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Points : 574
    Points
    574
    Par défaut
    L'événement Click des PictureBox est appelé en passant un objet de type EventArg. Si tu veux passer plus d'info, il faut agir sur l'appel à cet événement et pas seulement à la définition de l'action à réaliser quand on clique.
    "C'est tellement merdique que toute modification est une amélioration !"

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    OK, Merci à Plume13 et ClaudeBg.
    Vous m'avez bien aidé.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 15/02/2011, 08h24
  2. Création de picturebox et évènements
    Par bwarff dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/01/2008, 16h20
  3. [VB6] [Graphisme] Arc de cercle dans un picturebox
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/11/2002, 17h55
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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