Как активировать combobox при первом щелчке (Datagridview)
В winforms вам нужно дважды щелкнуть поле со списком, чтобы правильно активировать его - в первый раз, чтобы сфокусировать его, во второй раз, чтобы получить раскрывающийся список.
Как изменить это поведение так, чтобы оно срабатывало при первом нажатии?
Это для выпадающего списка DATAGRIDVIEW.
Ответы
Ответ 1
Я понимаю, что это старый вопрос, но я решил, что я дам свое решение кому бы то ни было, что, возможно, придется это сделать.
Пока я не мог найти ответы на подобные вопросы... Я нашел ответ на другой вопрос, который помог мне.
Это мое решение:
private void datagridview_CellEnter(object sender, DataGridViewCellEventArgs e)
{
bool validClick = (e.RowIndex != -1 && e.ColumnIndex != -1); //Make sure the clicked row/column is valid.
var datagridview = sender as DataGridView;
// Check to make sure the cell clicked is the cell containing the combobox
if(datagridview.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && validClick)
{
datagridview.BeginEdit(true);
((ComboBox)datagridview.EditingControl).DroppedDown = true;
}
}
Вышеприведенный код должен быть привязан к событию CellEnter для datagridview.
Надеюсь, это поможет!
edit: Добавлена проверка индекса столбца, чтобы предотвратить сбой при выборе всей строки.
Спасибо, Наверху ночи для приведенного выше редактирования
edit2: Теперь код привязывается к CellEnter, а не к событию CellClick.
Спасибо, HaraldDutch для приведенного выше редактирования
Ответ 2
Задайте в DataGridView следующее:
EditMode = EditOnEnter
Это, вероятно, самое простое решение и было обходным путем для многих пользователей здесь, когда этот вопрос задан.
EDIT:
Per здесь выполните следующие действия:
Установите Editmode:
EditMode = EditOnKeystrokeOrF2
Изменить событие EditingControlShowing в представлении datagridview:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox ctl = e.Control as ComboBox;
ctl.Enter -= new EventHandler(ctl_Enter);
ctl.Enter += new EventHandler(ctl_Enter);
}
void ctl_Enter(object sender, EventArgs e)
{
(sender as ComboBox).DroppedDown = true;
}
Это даст вам желаемые результаты. Дайте мне знать, если это не так.
Ответ 3
Если вы установите всю сетку в EditOnEnter, вы можете получить довольно забавную активность, когда находитесь в текстовом столбце. Вот мое решение, которое должно быть понятно. Если вы не знаете имена столбцов, вы можете просто проверить тип ячейки на mousemove.
Private Sub GridView_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles GridView.CellMouseMove
Select Case GridView.Columns(e.ColumnIndex).Name
Case "Ad_Edit", "Size_Caption", "Demo_Code"
GridView.EditMode = DataGridViewEditMode.EditOnEnter
Case Else
GridView.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
End Select
End Sub
Ответ 4
Я изменил только свойство EditMode
от datagridview
до EditOnEnter
, и он отлично работает.
EditMode = EditOnEnter
Ответ 5
Задайте свойство DropDownStyle вашего поля со списком DropDownList...