3

我有一个启用ToolStripDropDownButton子项的位置。CheckOnClick

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

我已经看到了类似的问题如何关闭设置为 autoclose = false 的工具条菜单项?但是Click在每个组件上放置事件处理程序的建议并不完全是我所追求的。它应该是它失去焦点的时候,无论是通过鼠标还是键盘控制。

我看了看,Leave但是虽然 ToolStrips 本身有那个事件,但显然 ToolStripDropDownButton 没有。

最好的方法是什么?

4

1 回答 1

8

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

ToolStripDropDownButton直接没有Closing事件,但由于它只是 a 的包装器,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或失去焦点,则不会阻止它关闭。

于 2016-01-23T14:25:34.967 回答