Открывать выпадающие (в виде таблицы данных) элементы одним щелчком мыши - PullRequest
20 голосов
/ 14 июня 2011

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

Ответы [ 3 ]

18 голосов
/ 23 января 2013

Установить EditMode свойство DataGridView в EditOnEnter: ссылка

DataGridView.EditMode - Получает или задает значение, указывающее, как начать редактирование ячейки.

EditOnEnter - Редактирование начинается, когда ячейка получает фокус.

15 голосов
/ 14 июня 2011

Этого можно добиться, подписавшись на событие EditingControlShowing сетки и там для контроля типа ComboBox

ComboBox ctl = e.Control as ComboBox;
ctl.Enter -= new EventHandler(ctl_Enter);
ctl.Enter += new EventHandler(ctl_Enter);

А в событии Enter используйте свойство

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

DroppedDown указывает, так как имя указывает на то, отображается ли раскрывающаяся область или нет, поэтому при каждом вводе элемента управления она будет иметь значение true и отображать элементы без необходимости дополнительных щелчков.

6 голосов
/ 29 июля 2013

У меня сработало «установить свойство EditMode DataGridView на EditOnEnter», но я обнаружил еще одну проблему: пользователь не может удалить строку, просто выбрав и нажав клавишу DEL. Итак, поиск в Google дал мне другой способ сделать это. Просто перехватите событие CellEnter и проверьте, является ли ячейка соответствующим типом для выполнения соответствующего действия, такого как пример кода:

private void Form_OnLoad(object sender, EventArgs e){
    dgvArmazem.CellEnter += new DataGridViewCellEventHandler(dgvArmazem_CellEnter);
}

void dgvArmazem_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dg = (DataGridView)sender;

            if (dg.CurrentCell.EditType == typeof(DataGridViewComboBoxEditingControl))
            {
                SendKeys.Send("{F4}");
            }
        }

Теперь ComboBox падает быстрее, и пользователь все равно удаляет строку, выбирая строку и нажимая клавишу DEL.

Вот и все.

...