在Alt
中选择某些菜单项时,我需要允许ContextMenuStrip
键用作修饰符。这与Ctrl
或Shift
之类的所有其他修饰符都可以正常工作。但是,由于某些原因,Alt
会自动关闭上下文菜单。
我尝试使用上下文菜单中的Closing
事件和菜单项AutoClose
属性,但是事实证明这比预期的要笨拙。具体来说,即使上下文菜单保持打开状态,应用程序MenuStrip
仍被激活(这可以解释为什么上下文菜单首先关闭的原因)。
我已经尝试过搜索,但是我发现很少有与此相关的问题,并且在堆栈溢出时都没有,因此我想知道是否有更好的方法来解决我错过的问题?
示例代码显示抑制MenuStrip
激活不会阻止上下文菜单关闭:
class MainForm : Form
{
MenuStrip menuStrip;
ContextMenuStrip contextMenuStrip;
public MainForm()
{
KeyPreview = true;
menuStrip = new MenuStrip();
menuStrip.Items.Add("&File");
Controls.Add(menuStrip);
contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add("&OptionA");
contextMenuStrip.Items.Add("&OptionB");
ContextMenuStrip = contextMenuStrip;
}
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Alt)
{
e.Handled = true;
e.SuppressKeyPress = true;
}
else base.OnKeyDown(e);
}
}
答案 0 :(得分:1)
这是设计使然,因此您必须自己进行状态跟踪。但这肯定会阻止sed
到达Alt
。
这是低级键盘过滤,因此,您必须决定完全独自按下MenuStrip
时的处理方式。
您还可以更改条件以检查Alt
加一些状态。
简而言之,从Alt
返回true
将阻止它到达您的应用。
PreFilterMesssage