c# - 不要在选中的子项上关闭 ToolStripDropDownButton

标签 c# .net winforms toolstripdropdown

我有一个 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

所以我做了以下事情:

toolStripDropDownButton1.DropDown.Closing += toolStripDropDownButton1_Closing;

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

通过这种方式,我只会在单击某项时阻止它关闭,但不会在用户单击 ToolStripDropDownButton 之外或它失去焦点时阻止它关闭。

关于c# - 不要在选中的子项上关闭 ToolStripDropDownButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34962371/

相关文章:

c# - 从数据库中过滤 MVC SelectList

.net - 为什么 UWP 类库项目引用被复制到主项目?

c# - 程序在调用 InitializeComponent() 时崩溃

c# - 组合框下拉位置

c# - 根据其他属性设置属性的方式

c# - 如何使用c#获取元素值

.net - ThreadStatic 与 ThreadLocal<T> 性能 : speedups or alternatives?

c# - DataGridView 中的复选框未触发 CellValueChanged 事件

c# - ClickOnce如何设置图标

c# - .NET CultureInfo.InvariantCulture.CompareInfo IndexOf 与 LastIndexOf - 发生了什么?