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
。