Winforms: как правильно открыть combobox?

У меня есть combobox на winforms. В поле "Enter" я открою его:

cbo.DroppedDown = true;

Но если я это сделаю, комбо открывается и закрывается немедленно. Что я делаю неправильно?

Причина, по которой я использую это событие: мне нужно открыть комбо на вкладке, когда пользователь нажимает вкладку на предыдущем элементе управления, эта комбинация открывается должным образом. Но если пользователь нажимает на комбо, он открывается и закрывается. Как это сделать правильно?

Спасибо

Ответы

Ответ 1

Я попробовал это так:

private void comboBox1_enter(object sender, EventArgs e)
      {
         comboBox1.DroppedDown = true;
      }

нет изменений в кнопках мыши или таймерах. он вел себя так, как ожидалось. Независимо от того, выбрал ли я comboBox с щелчком мыши или вложил в него вкладку, выпадающий список появился и остался открытым, пока я ничего не выбрал.

Я бы посмотрел, есть ли что-то еще, снимающее фокус с коробки.

Ответ 2

Причина, по которой у вас возникает эта проблема, заключается в том, что событие mouseup возникает после события ввода, а оконная процедура по умолчанию закрывает поле со списком.

В поле ввода вы можете проверить состояние кнопки мыши, и если кнопка не нажата, не открывайте комбо. Затем у вас есть другой обработчик событий для события mouseup, чтобы открыть комбо.

Другой вариант - установить таймер на несколько миллисекунд и открыть комбо, когда он погаснет.

Ответ 3

Зная, что это немного устарело, но я обнаружил, что это хорошо работает. Вы можете TAB в поле со списком при его открытии, и если вы нажмете стрелку, она не закрывается.

private void ComboBox_Enter(object sender, EventArgs e)
    {            
        if (MouseButtons == MouseButtons.None)
            ((System.Windows.Forms.ComboBox)sender).DroppedDown = true;
    }

Ответ 4

Установите DroppedDown = true в событии GotFocus в поле со списком. В противном случае выпадающий список будет отображаться в неправильном месте.

void cbo_GotFocus(object sender, EventArgs e)
    {
        ComboBox cbo = sender as ComboBox;
        cbo.DroppedDown = true;
    }

Ответ 5

Я думаю, вам просто нужно сфокусировать его сначала, прежде чем открыть comboBox.

cbo.Focus();
cbo.DroppedDown = True

Надеюсь, что это сработает для вас.