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
Надеюсь, что это сработает для вас.