不要在选中的子项上关闭 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
之外或失去焦点时阻止它关闭。
我有一个 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
之外或失去焦点时阻止它关闭。