C# Don';t关闭选中子项上的ToolStripDropDownButton

C# Don';t关闭选中子项上的ToolStripDropDownButton,c#,.net,winforms,toolstripdropdown,C#,.net,Winforms,Toolstripdropdown,我有一个ToolStripDropDownButton,其中子项启用了CheckOnClick 我想让用户能够在关闭下拉列表之前选择多个项目,但如果不将AutoClose设置为false,我就找不到这样做的方法,这样做会带来另一个问题,即当用户单击控件外的任何位置时(此时它应该关闭它),如何关闭它 我看到过类似的问题,但在每个组件上放置Click事件处理程序的建议并不完全是我想要的。无论是通过鼠标还是键盘控制,它都应该在失去焦点时出现 我查看了Leave,但是虽然ToolStrips本身有该事件

我有一个
ToolStripDropDownButton
,其中子项启用了
CheckOnClick

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

我看到过类似的问题,但在每个组件上放置
Click
事件处理程序的建议并不完全是我想要的。无论是通过鼠标还是键盘控制,它都应该在失去焦点时出现

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


最好的方法是什么?

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

ToolStripDropDownButton
直接没有关闭事件,但由于它只是
ToolStripDropDownButton
的包装,因此它会通过
ToolStripDropDownButton.DropDown.Closing来公开该事件

所以我只是做了以下几点:

toolStripDropDownButton1.DropDown.Closing += toolStripDropDownButton1_Closing;

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

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

也适用于
ToolStripSplitButton