Explicitement Prévenir ContextMenuStrip de Chargement en C #
-
09-09-2019 - |
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
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.