我有一个ToolStripDropDownButton
,子项目已启用CheckOnClick
。
我想让用户在关闭下拉菜单之前选择多个项目,但是如果不将AutoClose
设置为false
并且这样做,我就找不到这样做的方法提出了另一个问题,即当用户点击控件外的任何地方时(当它应该关闭它时),如何关闭它。
我已经看到类似的问题How do I close a toolstripmenuitem that is set to autoclose = false?但是在每个组件上放置Click
事件的处理程序的建议并不完全是我所追求的。无论是通过鼠标还是键盘控制,都应该失去焦点。
我查看了Leave
,但是当ToolStrips本身有该事件时,显然ToolStripDropDownButton没有。
最好的方法是什么?
答案 0 :(得分:5)
事实证明,这是一个非常简单的方法,我还没有意识到这一点。 Closing
事件说明ToolStripDropDownButton
被关闭的原因,其中一个原因是点击了某个项目。
ToolStripDropDownButton
直接没有Closing
事件,但由于它只是ToolStripDropDown
的包装,因此它会通过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
之外或者它失去焦点,则不会阻止它关闭。< / p>