检查菜单项事件是否来自单击或快捷方式

本文关键字:单击 快捷方式 菜单项 事件 是否 检查 | 更新日期: 2023-09-27 17:51:04

是否有检查菜单项事件是否来自菜单中的单击或来自按下的快捷键?

我已经尝试添加事件处理程序的键按和按下事件,然而这些事件并没有被"解雇",当它是一个快捷键,按下(他们做的工作,当它不是一个快捷键)。我在sender对象中找不到菜单点击和快捷键点击之间的任何不同

检查菜单项事件是否来自单击或快捷方式

可以通过重写ProcessCmdKey:

来捕获所有的键组合
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
    if (keyData == (Keys.Control | Keys.F)) 
    {
        Console.WriteLine("My code ran from shortcut");
        myFunction();
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
private void ToolStripMenuItem_click(object sender ...)
{
  Console.WriteLine("My code ran from menu item");
  myFunction();
}
void myFunction()
{
  //your functionality here
}

为了获得帮助,你应该发布你所尝试的。(源)

可以使用枚举:

enum Sender
{
    Shortcut,
    Menu
}
void MenuEvent(Sender sender)
{
    if (sender == Sender.Shortcut)
    {
    }
    else
    {
    }
}
//if you click from the menu
void btnMenuClick()
{
    MenuEvent(Sender.Menu);
}
//if you use shortcut
void OnShortcutEvent()
{
    MenuEvent(Sender.Shortcut);
}
我想我的答案是模糊的,所以我编辑了代码。我希望它现在更清楚了,但我必须说OP也应该给出更多的细节,比如发布一些代码。

我看到了这个问题的一个解决方案-覆盖ToolStripMenuItem的ProcessCmdKey方法,该方法在处理快捷方式时引发。在这种情况下,您可以确定何时由快捷方式引起单击。显然,您需要使用自己的ToolstripMenuItem类,而不是标准类。

处理MouseDown事件以处理鼠标单击。

菜单项。

处理Click事件以处理快捷方式。

菜单项。点击+= new EventHandler(Process_Shortcut_Handler);