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

Windows Forms Discussion :

Retrouver le contrôle qui a ouvert le contextmenustrip


Sujet :

Windows Forms

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut Retrouver le contrôle qui a ouvert le contextmenustrip
    Bonjour,

    J'ai une série de contrôles dans une Form qui ont pour "ContextMenuStrip" le même contextmenustrip :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    control1.ContextMenuStrip = contextMenuStrip1;
    control2.ContextMenuStrip = contextMenuStrip1;
    Parmi les options de mon contextMenuStrip1, j'ai une entrée "Close".
    Et j'aimerais qu'elle fasse disparaître le contrôle qui a provoqué l'affichage de mon contextMenuStrip1.

    Donc click droit sur control1 > puis menu "Close" : je veux que control1 disparaisse.
    Et click droit sur control2 > puis menu "Close" : je veux que control2 disparaisse.

    Seulement, j'ai un problème : je n'arrive absolument pas à trouver quel est le contrôle qui a déclenché l'affichage mon mon contextmenustrip.

    Voici ce que j'ai tenté :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            private void closeToolStripMenuItem_Click(object sender, EventArgs e)
            {
                (((sender as ToolStripMenuItem).OwnerItem. as TabPage).Parent as TabControl).TabPages.Remove(sender as TabPage);
            }

    Seulement, le "OwnerItem", c'est pas le contrôle qui a déclenché l'affichage du contextmenustrip, mais le menu lui-même. Et j'ai beau chercher à remonter le owner du owner du owner du... je n'arrive pas à retrouver mon contrôle.

    Accessoirement, si vous savez comment faire apparaître une croix pour fermer un onglet dans un TabControl, je suis preneur, car à la base, c'est pour fermer des onglets, et un clic sur un croix sera toujours mieux qu'un clic droit au milieu de la tabpage...
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour,
    ContextMenuStrip.SourceControl ?

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Hmmm, ah ben oui forcément...

    J'ai cherché comme un dingue sur le MenuItem, j'ai oublié de regarder sur le Menu lui-même...

    Merci

    Sinon, pour ceux que ça intéresse, voici une petite classe custo qui permet d'avoir des boutons "fermer" sur les onglets d'un TabControl.

    Seul hic, l'image est à gauche du texte de l'onglet et non à droite. Mais pour la mettre à droite faut overrider le dessin de l'onglet et du coup on perd tous les mécanismes de gestion des thèmes, donc pas glop.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    using System;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace MyProject.Controls
    {
        public class MyTabControl : TabControl
        {
            protected override void OnCreateControl()
            {
                base.OnCreateControl();
                ImageList = new ImageList();
                Bitmap img = Resources.ResourceButton.TabClose;
                img.MakeTransparent(System.Drawing.Color.Red);
                ImageList.ImageSize = new System.Drawing.Size(img.Width, img.Height);
                ImageList.Images.Add(img);
            }
     
            protected override void OnControlAdded(ControlEventArgs e)
            {
                if (e.Control is TabPage)
                {
                    (e.Control as TabPage).ImageIndex = 0;
                }
     
                base.OnControlAdded(e);
            }
     
            protected override void OnMouseUp(MouseEventArgs e)
            {
                base.OnMouseUp(e);
     
                if (e.Button == MouseButtons.Left)
                {
                    for (int i = 0; i < TabCount; i++)
                    {
                        Rectangle r = GetTabRect(i);
                        Rectangle closeButton = new Rectangle(r.Left + Padding.X, r.Top + Padding.Y, ImageList.Images[0].Width, ImageList.Images[0].Height);
                        if (closeButton.Contains(e.Location))
                        {
                            TabPages.RemoveAt(i);
                        }
                    }
                }
            }
        }
    }

    Ensuite, dans votre code, vous n'avez qu'à remplacer "System.Windows.Forms.TabControl" par "MyProject.Controls.MyTabControl" et hop
    Ne pas oublier de créer une ressource avec une image qui va bien dedans...
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. Retrouver le contrôle qui a lancé l'évènement
    Par tom741 dans le forum Silverlight
    Réponses: 4
    Dernier message: 03/05/2009, 11h48
  2. Réponses: 2
    Dernier message: 25/06/2006, 13h14
  3. Retrouver la ligne qui créer l'erreur
    Par schlitters dans le forum Oracle
    Réponses: 10
    Dernier message: 16/06/2006, 18h32
  4. Réponses: 5
    Dernier message: 12/06/2006, 08h05
  5. Comment retrouver quelqu'un qui me pirate
    Par cocaetjusdorange dans le forum Administration
    Réponses: 25
    Dernier message: 22/05/2006, 17h46

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