在VB.NET中如何编程关闭ComboBox下拉框?

3
在一个Windows窗体应用程序(VB.NET)中,我有一个组合框,在某些条件下,当用户打开下拉列表时,我想显示一个警告消息。所有这些都很好:在DropDown事件中,我检查条件,如果需要,我显示警告消息。问题是,当用户在警告消息上单击“是”时,我移动到主窗体上的另一个选项卡,但下拉列表仍然显示,即使我已经离开包含组合框的选项卡。我搜索了很多并尝试设置DroppedDown为False,调用OnDropDownClosed等,但没有任何作用。似乎当我尝试从DropDown事件内部关闭下拉列表时,它不起作用。有人能提出建议吗?
感谢迄今为止的回答。我忘记提到我使用.NET Framework 2。

1
好的,我找到了一个简单有效的解决方案。 在移动到其他选项卡之前(通过引发自定义事件),我将ConboBox DropDownStyle更改为ComboBoxStyle.DropDownList,然后在设置回其原始值ComboBoxStyle.DropDown之后立即进行设置。 - JBB
更改下拉样式解决了我的问题。 - Vasudevan Kannan
2个回答

3

问题在于WinForms在触发事件后才将鼠标“捕获”到下拉菜单中。因此,在事件处理程序中,您无法阻止下拉菜单的出现。但是您可以安排鼠标“取消捕获”。

    private void comboBox1_DropDown(object sender, EventArgs e)
    {
        Dispatcher.CurrentDispatcher.BeginInvoke((Action)(()=>comboBox1.Capture=false));
    }

在.NET 4中,Dispatcher位于System.Windows.Threading命名空间下的WindowsBase程序集中。

2
这对我解决了问题:
private void comboBox_DropDown(object sender, EventArgs e)
{
    Dispatcher.CurrentDispatcher.BeginInvoke((Action)(() => this.comboBox.DroppedDown = false));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接