c# - 有没有办法在您单击菜单时阻止菜单关闭?

标签 c# .net winforms

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

enter image description here

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

最佳答案

收听 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
}

这样 AutoClose 仍然有效并且 toolStrip 将正确关闭。

关于c# - 有没有办法在您单击菜单时阻止菜单关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034358/

相关文章:

c# - 将 Parameter<T> 存储/转换为 Parameter<object> 包括 Parameter<int>?

c# - Visual Studio 中的 "build"和 "rebuild"有什么区别?

c# - 多语言窗体

c# - 解析电子邮件地址字符串的最佳方法

c# - 从库代码中发现程序集

C# 更改非 unicode 语言或更改位置

vb.net - 如何关闭所有表格?

c# - Random.Next() 的概率

c# - 在 SQL Server 身份验证中执行存储过程所需的角色

winforms - 处理 Label 和 PictureBox 的 KeyDown