有没有办法在您单击菜单时阻止它关闭?

Ben*_*Ben 5 .net c# winforms

我们的程序中有一个表单,允许用户通过使用菜单栏来确定用户在设置权限时可以看到的内容。当用户点击一个项目时,该项目就会被“选中”(在它旁边打勾)。但是,这也会关闭菜单。

在此处输入图片说明

当用户点击它时,有没有办法阻止这个菜单关闭(不影响程序中的任何其他菜单)?到目前为止我还没有在设置中找到任何东西,任何_click方法也不影响它。

Hen*_*que 5

监听ToolStripDropDownClosingEventHandler中存在的ToolStripDropDown。为此,只需访问ToolStripMenuItem.DropDown属性,然后添加一个将处理Closing事件的侦听器。我们只需要检查鼠标指针是否在 toolStrip 矩形内,这可以通过这段代码来完成:

private void ListenToolStripMenuItems(IEnumerable<ToolStripMenuItem> menuItems)
{
    // listen all menuItems
    foreach (ToolStrip menuItem in menuItems)
        menuItem.DropDown.Closing += OnToolStripDropDownClosing;
}

private void OnToolStripDropDownClosing(object sender, ToolStripDropDownClosingEventArgs e)
{
        var tsdd = (ToolStripDropDown)sender;

        // checking if mouse cursor is inside
        Point p = tsdd.PointToClient(Control.MousePosition);  
        if (tsdd.DisplayRectangle.Contains(p))
            e.Cancel = true;  // cancel closing
}
Run Code Online (Sandbox Code Playgroud)

这样,自动关闭仍然有效,并且 toolStrip 将正确关闭。


小智 2

我是一名黑客,但我会对您可以单击的每个项目执行此操作:

 sampleNameToolStripMenuItem.ShowDropDown();
Run Code Online (Sandbox Code Playgroud)

这样,每当您单击某些内容时,它也会立即再次下拉菜单。