不要在选中的子项上关闭 ToolStripDropDownButton

Don't close ToolStripDropDownButton on subitem Checked

我有一个 ToolStripDropDownButton 子项目启用了 CheckOnClick

我想让用户能够在关闭下拉菜单之前选择多个项目,但是如果不将 AutoClose 设置为 false 并且我找不到这样做的方法这样做会带来另一个问题,即当用户在控件外的任何地方单击时如何关闭它(这是它应该关闭它的时间)。

我看到了类似的问题 How do I close a toolstripmenuitem that is set to autoclose = false?,但是在每个组件上为 Click 事件放置一个处理程序的建议并不是我想要的。应该是在失去焦点的时候,不管是通过鼠标还是键盘控制。

我查看了 Leave,但虽然 ToolStrip 本身有该事件,但显然 ToolStripDropDownButton 没有。

最好的方法是什么?

事实证明,有一种我还没有意识到的非常简单的方法可以做到这一点。 Closing 事件说明 ToolStripDropDownButton 被关闭的原因,可用的原因之一是某个项目被单击。

ToolStripDropDownButton 直接没有 Closing 事件,但由于它只是 ToolStripDropDown 的包装器,它确实通过 ToolStripDropDownButton.DropDown.Closing[=18 公开了它=]

所以我做了以下操作:

toolStripDropDownButton1.DropDown.Closing += toolStripDropDownButton1_Closing;

private void toolStripDropDownButton1_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
    if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)
    {
        e.Cancel = true;
    }
}

这样我只会在单击项目时阻止它关闭,但不会在用户单击 ToolStripDropDownButton 之外或失去焦点时阻止它关闭。