Dans mon application, j'ai une liste déroulante avec plusieurs éléments. Je voudrais afficher un menu contextuel lorsque l'utilisateur clique sur le bouton droit de la souris sur un élément déroulant. Est-ce possible? Et si c'est possible, comment?.NET Est-il possible d'avoir un menu contextuel sur un item d'une combobox?
Répondre
Étant donné que MenuItem n'a pas de propriété ContextMenu, il n'est pas aussi facile qu'avec de nombreux autres contrôles. Vous devrez probablement capturer l'événement du clic droit, puis positionner et afficher le menu contextuel manuellement.
Deux mises en garde cependant:
La liste combobox fermera lorsque la liste perd le focus, il peut fermer lorsque le menu contextuel est affiché laissant l'utilisateur pas clair quant à ce que ils ont cliqué sur (pas sûr à 100% , puisque je ne l'ai pas écrit le code pour tester.)
Plus important encore que je dirais que ce est pauvre IU choix, je ne peut pas penser à un réel applications que j'ai utilisé qui ont menus contextuels sur les éléments de menu, de sorte qu'il ne serait pas très découvrable pour l'utilisateur final . Plus les menus contextuels devraient être juste pour un accès rapide, ils ne devrait pas être le seul moyen d'accéder aux fonctionnalités . Allez-vous être capable d'exposer ces fonctions par d'autres moyens ainsi que par le menu contextuel?
Pas possible facilement. Aucun message d'événement de survol ou de clic droit n'est envoyé lorsque la liste déroulante est développée.
Vous pouvez voir que c'est le cas lorsque vous utilisez Spy ++.
Je pense que le plus simple serait de passer à une zone de liste si votre scénario vous le permet.
Je ne pense pas que mon scénario le permette. Voir mon commentaire à Martin Harris. – Martijn
Vous pouvez le faire manuellement, en capturant l'événement sur le formulaire, mais pensez à créer un menu imbriqué à la place. Si vos objets combobox ont leurs propres menus, le combobox n'est probablement pas le bon choix.
Comme Wim dit dans son article, il n'y a pas un moyen direct de le faire parce que les messages que vous voulez ne sont pas virés.
En comprennent, vous pouvez essayer de mettre DropdownStyle=Simple;
sur le Combo et rétrécir la région de défilement pour afficher une seule ligne:
http://img34.imageshack.us/img34/1695/49557147.jpg
Si vous attribuez le Combo un menu contextuel, il ouvrira quand la zone de défilement est cliquée avec le bouton droit. Vous auriez probablement besoin de savoir quel élément a été cliqué à droite. Mais comme d'autres l'ont dit, cela ne ressemble pas à une manière Windows standard ou à une utilisation intuitive.
Ou que diriez-vous d'une boîte de dialogue modale que vous pourriez faire apparaître à partir du menu contextuel du Combo? Dans la boîte de dialogue, vous pouvez avoir une liste parmi laquelle l'utilisateur peut sélectionner et un bouton Supprimer pour supprimer le ou les éléments sélectionnés.
C'est possible mais pas facile.La liste déroulante ComboBox est un ListBox natif créé à la volée. Pour obtenir le handle de cette zone de liste, vous devez envoyer le message CB_GETCOMBOBOXINFO dans l'événement DropDown. Vérifiez ma réponse au this thread pour savoir comment procéder. L'iceberg qui est susceptible de couler que Titanic est que la liste déroulante se ferme automatiquement dès qu'il perd la mise au point. Ce qui se passe dès que vous affichez le menu contextuel. Rien que tu puisses faire à ce sujet.
Envisagez une approche différente, vous pourriez utiliser un ListBox réel que vous rendre visible lorsque l'utilisateur clique sur un glyphe qui ressemble à une flèche à côté d'un TextBox.
J'aime votre deuxième approche! Je n'ai pas pensé à ça! – Martijn
Pour ceux qui demandent "Pourquoi?" ou en disant qu'ils n'ont jamais vu une combobox avec un menu contextuel; Regardez la liste déroulante des favoris de n'importe quel navigateur Web. Vous pouvez cliquer avec le bouton droit de la souris et supprimer, modifier ou accéder à l'entrée dans l'onglet actuel, le nouvel onglet ou la nouvelle fenêtre. Je aussi ne pouvait pas obtenir une ContextMenuStrip réelle de montrer, donc je fait un menu avec une petite forme sans frontières et appeler avec:
Private Sub FavoritesBar_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles FavoritesBar.SelectedIndexChanged
FavIndex = FavoritesBar.SelectedIndex 'FavIndex is declared as a public string.
Dim Loc As Point = New Point(MousePosition)
FavMenu.Location = Loc
FavMenu.ShowDialog()
End Sub
Avec une contextmenu maison, assurez-vous d'ajouter « Me.Close » à la fin de chaque sous-marin ainsi que l'événement me.mouseleave.
- 1. WPF TreeViewItem Menu contextuel Unhighlights Item
- 2. Comment ajouter un menu contextuel à NSOutlineView (ie menu contextuel)
- 3. Dummy Item dans ComboBox
- 4. C# combobox select new item
- 5. Extjs: Comment créer un menu contextuel dans le menu
- 6. Menu contextuel
- 7. Créer un sous-menu dans le menu contextuel
- 8. ajoutant menu contextuel ou spinner sur Menu android dans OPTion
- 9. Comment créer un menu contextuel jquery
- 10. Ajouter un menu contextuel à WebView
- 11. Menu contextuel flash
- 12. Comment créer un menu contextuel en utilisant un fichier XML?
- 13. Menu contextuel Extjs (clic droit) sur un bouton
- 14. DX TreeList - comment faire un menu contextuel sur Tree Nodes?
- 15. Ajouter un menu contextuel dans Datagrid
- 16. Comment vérifier un élément de menu contextuel?
- 17. menu d'options et le menu contextuel
- 18. Est-il possible d'ajouter un élément au menu contextuel d'un Mac OS par un clic droit?
- 19. Flex 3: Possibilité d'ajouter un menu contextuel à un ItemRenderer dans un DataGrid?
- 20. Menu contextuel Éléments manquants
- 21. ajouter un élément de menu au menu contextuel par défaut
- 22. Rails 3 - Dynamic Menu Item
- 23. GTK: éléments du menu contextuel de positionnement w.r.t menu contextuel
- 24. Modèle de conception pour contextuel "contextuel" Menu
- 25. explorer contextuel menu contextuel avec python?
- 26. menu contextuel parent?
- 27. Menu contextuel MFC "collant"
- 28. Menu contextuel ExpandableListView
- 29. ToolStripButton avec menu contextuel?
- 30. menu contextuel - javascript
Je pense que vous avez raison. Peut-être que je dois chercher une autre solution. J'ai un combobox similaire à la barre d'adresse d'un navigateur. Vous pouvez entrer un nouvel élément ou en sélectionner un existant. Ce que je veux, c'est sélectionner un existant avec la souris droite et supprimer celui-ci. – Martijn
Il n'est pas trop inhabituel de le faire avec une combinaison de touches. Par exemple, vous pouvez supprimer les entrées de saisie semi-automatique dans Firefox en appuyant sur Maj + Suppr lorsque l'élément que vous souhaitez supprimer est en surbrillance (dans IE, c'est juste la touche de suppression - je pense). C'est * vraiment * mauvais pour la découvrabilité (puisque j'ai juste dû le rechercher par une recherche de Google), mais au moins il y a un précédent. –
Thnx pour l'idée. Quelle est la meilleure façon de mettre en œuvre cela? – Martijn