Подтвердить что ты не робот

Как активировать combobox при первом щелчке (Datagridview)

В winforms вам нужно дважды щелкнуть поле со списком, чтобы правильно активировать его - в первый раз, чтобы сфокусировать его, во второй раз, чтобы получить раскрывающийся список.

Как изменить это поведение так, чтобы оно срабатывало при первом нажатии?

Это для выпадающего списка DATAGRIDVIEW.

4b9b3361

Ответ 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...