如何在VB.NET中以编程方式关闭ComboBox下拉列表?

时间:2011-04-15 18:09:40

标签: .net vb.net winforms

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

感谢目前为止的答案。我忘了提到我使用的是.NET framework 2。

2 个答案:

答案 0 :(得分:3)

这里的问题是,在引发事件后,WinForms会将鼠标捕获到下拉列表。因此,在您的事件处理程序中,您无法阻止下拉列表。您可以做的事情是安排鼠标“取消捕获”。

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

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

答案 1 :(得分:0)

这解决了我的问题:

private void comboBox_DropDown(object sender, EventArgs e)
{
    Dispatcher.CurrentDispatcher.BeginInvoke((Action)(()=>this.comboBox.DroppedDown = false;));
}