Question

J'ai une obligation de cacher la ContextMenuStrip lorsqu'un drapeau particulier n'est pas réglé. Comme je ne pense pas que nous pouvons contrôler explicitement l'affichage / masquage de la bande de menu contextuel, j'ai décidé de piéger le bouton droit de la souris sur le contrôle avec lequel le ContextMenuStrip est associé. Il est un UserControl, donc j'ai essayé manipuler est l'événement MouseClick à l'intérieur duquel je vérifie si le drapeau est réglé et si le bouton est un bouton droit. Mais à ma grande surprise, l'événement ne soit pas tiré sur la souris Clic droit, mais seulement pour les feux Clic gauche.

Y at-il quelque chose de mal avec moi ou est-il une solution de contournement?

CLIC DROIT EST MISE EN DETECTEE, Question titre et la description Changé

Après avoir fait quelques recherches, je suis arrivé le clic droit au feu, quand je l'événement Handled MOUSE_DOWN sur le contrôle. Cependant Am encore la moindre idée, la façon dont pour empêcher explicitement la ContextMenuStrip du chargement . Une autre question étant, pourquoi MouseClick n'a pas détecté bouton droit Cliquez?


WorkAround actuelle

Enregistrement du gestionnaire d'événements

   userControl1.Control1.MouseDown += new MouseEventHandler(Control1_MouseDown);

 void Control1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right && flag == false)
        {
           userControl1.Control1.ContextMenuStrip = null;
        }
        else
        {
            userControl1.Control1.ContextMenuStrip = contextMenuStrip1;
        }

    }

est la solution actuelle que je fais. Mais comment puis-je changer en cas d'ouverture du ContextMenuStrip

Était-ce utile?

La solution

Votre solution échouera de toute façon lorsque le menu contextuel est appelé avec la touche de menu contextuel (ou ce qu'il appelle) sur le clavier. Vous pouvez utiliser l'événement Opening pour annuler l'ouverture d'un menu contextuel.

Autres conseils

Il y a un travail autour.

Disons que Menu Point A définit le drapeau qui contrôle le menu contextuel sur le contrôle B.

En cas de clic pour A, vous définissez b.ContextMenu = rien pour l'éteindre, et mis b.ContextMenu retour à la commande de menu contextuel pour le remettre en marche.

Dans WinForms il y a aussi l'événement Click -. Qui ne se tiré un clic droit de la souris

Si vous utilisez WPF vous devriez avoir des événements MouseRightButtonDown et MouseRightButtonUp.

Consultez la table sur ce MSDN qui liste qui contrôle soulèvent les événements de clic. De manière significative, Button, CheckBox, RichTextBox et RadioButton (et quelques autres) ne soulève pas et événement clic droit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top