Dans mon application C#, je souhaite afficher un menu contextuel, mais je souhaite ajouter des options spéciales au menu si la touche MAJ est enfoncée lorsque le contexte le menu est ouvert.C# - Détecter si la touche MAJ est enfoncée lors de l'ouverture d'un menu contextuel
J'utilise actuellement l'API GetKeyState
pour vérifier la touche MAJ. Cela fonctionne très bien sur mon ordinateur mais les utilisateurs avec Windows non anglais disent que cela ne fonctionne pas du tout pour eux.
J'ai également lu que dans l'API Win32 quand un menu contextuel est ouvert, il y a un drapeau qui indique dans le menu devrait afficher EXTENDEDVERBS
. En C# le EventArgs
pour l'événement Opening
ne contient pas (de ce que je peux dire) une propriété indiquant EXTENDEDVERBS
ou si des touches de modification sont enfoncées.
Voici le code que je utilise maintenant dans l'événement « Opening
»:
// SHIFT KEY is being held down
if (Convert.ToBoolean(GetKeyState(0x10) & 0x1000))
{
_menuStrip.Items.Add(new ToolStripSeparator());
ToolStripMenuItem log = new ToolStripMenuItem("Enable Debug Logging");
log.Click += new EventHandler(log_Click);
log.Checked = Settings.Setting.EnableDebugLogging;
_menuStrip.Items.Add(log);
}
Si GetKeyState est la bonne façon de le faire, est mon code correctement détecter la touche MAJ enfoncée en cours?
Malheureusement, les parents de l'ContextMenu dans mon code est un UserControl et la propriété ModifierKeys ne sont pas disponibles soit pour le UserContr ol ou pour l'objet ContextMenu. –
@Chris - Comme Jared dit que c'est statique. J'ai mis à jour sa réponse avec un lien vers msdn –
Je n'ai pas remarqué cela. Je pensais que c'était une propriété d'instance. Je vais le tester. –