Ne fermez pas ContextMenuStrip lors de la sélection de certains éléments
Est-il possible de laisser un ContextMenuStrip ouvert après une sélection/vérification de certains éléments?
Je compte sur l'aide d'un simple ContextMenuStrip pour définir un filtre (de cette façon, je pourrais utiliser le même filtre que ce soit dans un menu ou un clic droit).
Le menu énumère un certain nombre d'éléments, et je voudrais que l'utilisateur soit en mesure de faire une sélection des éléments à l'aide de la Vérification de base de la fonctionnalité. Une fois la sélection réalisée, l'utilisateur peut cliquer sur un Activer l'option de filtre ou puis cliquez en dehors du menu pour activer ou annuler le filtre.
Sur une sélection, cliquez sur l'événement le menu se ferme normalement.
Est-il possible de garder le menu ouvert sur un événement de clic?
source d'informationauteur barry
Vous devez vous connecter pour publier un commentaire.
Pour empêcher le contextmenu à compter de la clôture lorsqu'un élément est sélectionné, procédez de la manière suivante.
Sur l'événement mousedown de ContextMenuItems indicateur défini à false, alors la définir à true lors de l'événement de clôture de la contextmenu.
Exemple:
En cas de futurs programmeurs demandez comment faire cela, c'est ce que j'ai compris. Ce ne sera pas fermer le menu contextuel si un élément est cliqué. Créer le menu contextuel de la bande de clôture de l'événement et l'installation d'une instruction if pour annuler la clôture de l'événement si proche de la raison est itemclicked.
l'événement de Clôture
ensemble e.Cancel = true pour quitter le menu ouvrir
seul problème est que l'événement n'a pas vous dire ce qui a été cliqué, alors vous devez garder une trace de vous-même. mettre en place une sorte de drapeau dans l'événement Click de les articles que vous voulez garder le menu ouvert. ensuite, dans l'événement de Clôture de vérifier le drapeau et l'ensemble e.Annuler de façon appropriée.
Je ne pense pas qu'il y a une propriété dans le ContextMenuStrip.
La solution de contournement que nous utilisons dans notre application, c'est que sur les cliqué cas de la ContextMenuStrip, de nous faire un peu de traitement, si nous voulons le menu contextuel de rester ouvert, nous appelons simplement ContextMenuStrip.Montrer à nouveau.
Cela fonctionne bien si il n'y a qu'un seul niveau à la ContextMenuStrip. Si il y a des sous-menus et les sous-sous-menus, alors que vous auriez à re-sélectionner les menus qui étaient ouverts avant le clic et je ne suis pas sûr de savoir comment ce qui peut être fait...
C'est ma méthode; c'est de scintillement et - je pense - un peu plus flexible.
Si vous avez un ensemble de ToolStripMenuItems vous souhaitez utiliser comme des boutons à bascule (option on/off), essayez ceci:
(Le
ctxWildCards
est juste monContextMenuStrip
utilisé pour sélectionner des filtres basés sur des types de fichiers pour la recherche ou de l'FileDialogs)C'est dans Visual Basic (bien évidemment! ;), de sorte que vous pouvez ajouter des Gestionnaires par programme ou à l'aide de Poignées...' clauses.
Ce que j'ai trouvé étrange, c'est que
ContextMenuStrip.Closing
événement se déclenche avant laToolStripMenuItem.Click
événement. La solution a été d'utiliserContextMenuStrip.ItemClicked
cas où vous aveze.ClickedItem
et de vérifier ensuite si c'est un des éléments qui, lorsqu'on clique dessus, de ne pas fermer laContextMenuStrip
et de définir l'indicateur approprié. Puis dansContextMenuStrip.Closing
vous pouvez définire.Cancel = true;
si le drapeau est réglé aussi. N'oubliez pas de réinitialiser l'indicateur de bien.OnClosing, n': e.Cancel = e.CloseReason != ToolStripDropDownCloseReason.CloseCalled;
et puis, quand vous décidez de fermer, appeler Close().
La meilleure façon que j'ai trouvée pour ce faire et sans scintillement est d'utiliser les événements MouseDown et MouseLeave pour chaque bouton dans le menu Déroulant.
Exemple:
J'ai trouvé ce utile pour mes fins.
Vous pouvez utiliser
ItemClicked
de lire l'étiquette ou une autre propriété.Je voulais juste un simple élément qui a fait clair pour l'utilisateur de l'élément sur lequel le menu contextuel a été d'aller à effet.