Как программно закрыть выпадающий список ComboBox в VB.NET? - PullRequest
1 голос
/ 15 апреля 2011

В приложении Windows Form (VB.NET) у меня есть поле со списком, и при определенных условиях, когда пользователь открывает список DropDown, я хочу отобразить предупреждающее сообщение.Все это работает хорошо: в событии DropDown я проверяю условия и, при необходимости, отображаю предупреждающее сообщение.Проблема в том, что когда пользователь нажимает Да в предупреждающем сообщении, я перехожу на другую вкладку в главной форме, и раскрывающийся список все еще отображается, даже если я отошел от вкладки, содержащей поле со списком.Я довольно долго искал и пытался установить DroppedDown в False, вызвать OnDropDownClosed и т. Д., Но ничего не получалось.Кажется, что когда я пытаюсь закрыть выпадающий список из события DropDown, он не работает.Кто-нибудь может предложить что-нибудь?

Спасибо за ответы до сих пор.Я забыл упомянуть, что я использую .NET Framework 2.

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Проблема здесь в том, что WinForms «захватывает» мышь до выпадающего списка после того, как вызвало событие. Поэтому в вашем обработчике событий вы ничего не можете сделать, чтобы предотвратить выпадение. Что вы можете сделать, так это навести мышь на «захват».

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

В .NET 4 Dispatcher находится в сборке WindowsBase в пространстве имен System.Windows.Threading.

0 голосов
/ 03 марта 2016

Это решило проблему для меня:

private void comboBox_DropDown(object sender, EventArgs e)
{
    Dispatcher.CurrentDispatcher.BeginInvoke((Action)(()=>this.comboBox.DroppedDown = false;));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...