检查菜单项事件是否来自单击或快捷方式
本文关键字:单击 快捷方式 菜单项 事件 是否 检查 | 更新日期: 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);