按住Alt键时如何防止上下文菜单关闭?

时间:2019-02-20 21:13:32

标签: c# winforms contextmenu

Alt中选择某些菜单项时,我需要允许ContextMenuStrip键用作修饰符。这与CtrlShift之类的所有其他修饰符都可以正常工作。但是,由于某些原因,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);
    }
}

1 个答案:

答案 0 :(得分:1)

这是设计使然,因此您必须自己进行状态跟踪。但这肯定会阻止sed到达Alt

这是低级键盘过滤,因此,您必须决定完全独自按下MenuStrip时的处理方式。

您还可以更改条件以检查Alt 加一些状态

简而言之,从Alt返回true将阻止它到达您的应用。

PreFilterMesssage