表单最小化和还原后,ToolStripDropDownMenu保持打开状态

时间:2015-12-01 13:58:02

标签: c# .net winforms

我有Window Forms应用程序,我使用ToolStripDropDown作为表单的上下文菜单。

public partial class Form1 : Form
{
    ToolStripDropDownMenu _formContextMenu = null;        

    public Form1()
    {
        InitializeComponent();
        _formContextMenu = new ToolStripDropDownMenu();
        _formContextMenu.Items.Add("Item1");
        _formContextMenu.Items.Add("Item2");
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            _formContextMenu.Show(e.Location);
        }
        else
            base.OnMouseDown(e);
    }

    protected override void OnResize(EventArgs e)
    {
        _formContextMenu.Close();
        base.OnResize(e);
    }
}

首先,我点击右键鼠标按钮显示上下文菜单。之后我按下Win + D(最小化所有窗口),然后再次打开我的应用程序。上下文菜单保持打开状态,单击表单时也不会关闭。我甚至可以将表格移到其他地方,但它仍然会保持打开状态。 我也试图以不同的理由关闭它。

    _formContextMenu.Close(ToolStripDropDownCloseReason.AppClicked);
    _formContextMenu.Close(ToolStripDropDownCloseReason.AppFocusChange);
    _formContextMenu.Close(ToolStripDropDownCloseReason.CloseCalled);
    _formContextMenu.Close(ToolStripDropDownCloseReason.ItemClicked);
    _formContextMenu.Close(ToolStripDropDownCloseReason.Keyboard);

没有帮助。 有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我使用此解决方法来解决问题并且它正常运行:

protected override void OnSizeChanged(EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        //_formContextMenu or this.contextMenuStrip1

        this.contextMenuStrip1.Visible = true; 
        this.contextMenuStrip1.Close();
    }
    base.OnSizeChanged(e);
}

虽然ContextMenuStrip也出现此问题,但如果没有使用ToolStripDropDownMenu的特定目标,则可以使用表单的ContextMenuStrip组件和设置ContextMenuStrip属性。这样您就不需要编写代码来显示上下文菜单。

但如果出于任何原因您希望在代码中显示,请考虑以这种方式显示上下文菜单/下拉菜单:yourContextMenu.Show(this,e.Location);