Выполняемая по умолчанию обработка событий мыши и клавиатуры элементом управления DataGridView в Windows Forms
В следующей таблице представлен способ взаимодействия пользователя с элементом управления DataGridView посредством клавиатуры и мыши.
Примечание
Поведение клавиатуры можно настроить путем обработки стандартных событий клавиатуры, таких как KeyDown.Однако в режиме редактирования ввод данных с клавиатуры получает размещаемый элемент редактирования, и для элемента управления DataGridView события клавиатуры не возникают.Для обработки событий элемента редактирования необходимо подключить обработчики к элементу редактирования в обработчике событий EditingControlShowing.Кроме того, настройка поведения клавиатуры может производиться с помощью подкласса DataGridView путем переопределения методов ProcessDialogKey и ProcessDataGridViewKey.
Обработка событий клавиатуры по умолчанию
Основные клавиши перехода и ввода
Клавиша или сочетание клавиш |
Описание |
---|---|
Стрелка вниз |
Передает фокус ячейке, расположенной непосредственно под текущей ячейкой. Если фокус находится в последней строке, никакие действия не производятся. |
Стрелка влево |
Передает фокус предыдущей ячейке в строке. Если фокус находится в первой ячейке строки, никакие действия не производятся. |
Стрелка вправо |
Передает фокус следующей ячейке в строке. Если фокус находится в последней ячейке строки, никакие действия не производятся. |
Стрелка вверх |
Передает фокус ячейке, расположенной непосредственно над текущей ячейкой. Если фокус находится в первой строке, никакие действия не производятся. |
HOME |
Передает фокус первой ячейке текущей строки. |
END |
Передает фокус последней ячейке текущей строки. |
PAGE DOWN |
Прокручивает элемент управления вниз на количество полностью отображаемых на экране строк. Передает фокус последней полностью отображаемой строке с сохранением столбцов. |
PAGE UP |
Прокручивает элемент управления вверх на количество полностью отображаемых на экране строк. Передает фокус первой полностью отображаемой строке с сохранением столбцов. |
TAB |
Если свойство StandardTab имеет значение false, передает фокус следующей ячейке в текущей строке. Если фокус находится в последней ячейке строки, передает фокус первой ячейке следующей строки. Если фокус находится в последней ячейке элемента управления, передает фокус следующему элементу управления в порядке перехода родительского контейнера. Если свойство StandardTab имеет значение true, передает фокус следующему элементу управления в порядке перехода родительского контейнера. |
SHIFT+TAB |
Если свойство StandardTab имеет значение false, передает фокус предыдущей ячейке в текущей строке. Если фокус находится в первой ячейке строки, передает фокус последней ячейке предыдущей строки. Если фокус находится в первой ячейке элемента управления, передает фокус предыдущему элементу управления в порядке перехода родительского контейнера. Если свойство StandardTab имеет значение true, передает фокус предыдущему элементу управления в порядке перехода родительского контейнера. |
CTRL + TAB |
Если свойство StandardTab имеет значение false, передает фокус следующему элементу управления в порядке перехода родительского контейнера. Если свойство StandardTab имеет значение true, передает фокус следующей ячейке в текущей строке. Если фокус находится в последней ячейке строки, передает фокус первой ячейке следующей строки. Если фокус находится в последней ячейке элемента управления, передает фокус следующему элементу управления в порядке перехода родительского контейнера. |
CTRL + SHIFT + TAB |
Если свойство StandardTab имеет значение false, передает фокус предыдущему элементу управления в порядке перехода родительского контейнера. Если свойство StandardTab имеет значение true, передает фокус предыдущей ячейке в текущей строке. Если фокус находится в первой ячейке строки, передает фокус последней ячейке предыдущей строки. Если фокус находится в первой ячейке элемента управления, передает фокус предыдущему элементу управления в порядке перехода родительского контейнера. |
CTRL+СТРЕЛКА |
Передает фокус самой крайней ячейке в направлении стрелки. |
CTRL + HOME |
Передает фокус первой ячейке элемента управления. |
CTRL + END |
Передает фокус последней ячейке элемента управления. |
CTRL + PAGE DOWN/UP |
То же что и PAGE DOWN или PAGE UP. |
F2 |
Переводит текущую ячейку в режим редактирования, если свойство EditMode имеет значение EditOnF2 или EditOnKeystrokeOrF2. |
F4 |
Если текущая ячейка принадлежит классу DataGridViewComboBoxCell, переводит ячейку в режим редактирования и отображает раскрывающийся список. |
ALT + Стрелка вверх или вниз |
Если текущая ячейка принадлежит классу DataGridViewComboBoxCell, переводит ячейку в режим редактирования и отображает раскрывающийся список. |
Пробел |
Если текущая ячейка принадлежит классу DataGridViewButtonCell, DataGridViewLinkCell или DataGridViewCheckBoxCell, вызываются события CellClick и CellContentClick. Если текущая ячейка принадлежит классу DataGridViewButtonCell, также происходит нажатие кнопки. Если текущая ячейка принадлежит классу DataGridViewCheckBoxCell, также изменяется состояние флажка. |
ВВОД |
Сохраняет изменения, внесенные в текущую ячейку и строку, и передает фокус ячейке, расположенной непосредственно под текущей ячейкой. Если фокус находится в последней строке, изменения сохраняются без передачи фокуса. |
ESC |
Если элемент управления находится в режиме редактирования, приводит к отмене редактирования. Если элемент управления не находится в режиме редактирования, отменяет изменения, внесенные в текущую строку. Это происходит при условии, что элемент управления связан с источником данных, поддерживающим редактирование, либо при использовании виртуального режима с областью фиксации на уровне строк. |
BACKSPACE |
Удаление знака, находящегося перед курсором, при редактировании ячейки. |
DELETE |
Удаление знака, находящегося непосредственно после курсора, при редактировании ячейки. |
CTRL + Ввод |
Сохранение изменений, внесенных в текущую ячейку, без передачи фокуса. Также приводит к сохранению изменений, внесенных в текущую строку, при условии, что элемент управления связан с источником данных, поддерживающим редактирование, либо при использовании виртуального режима с областью фиксации на уровне строк. |
CTRL + 0 |
Ввод значения DBNull.Value в текущую ячейку, если ее содержимое может быть отредактировано. По умолчанию значением, отображаемым в качестве значения ячейки DBNull, является значение свойства NullValue объекта DataGridViewCellStyle для текущей ячейки. |
Клавиши выделения
Если свойство MultiSelect имеет значение false, а свойство SelectionMode имеет значение CellSelect, изменение текущей ячейки с помощью клавиш перехода приводит к выделению новой ячейки. Клавиши SHIFT, CTRL и ALT не влияют на выполнение данных действий.
Если свойство SelectionMode имеет значение RowHeaderSelect или ColumnHeaderSelect, результат будет таким же с добавлением следующих особенностей.
Клавиша или сочетание клавиш |
Описание |
---|---|
SHIFT + Пробел |
Выбор всей строки или столбца (аналогично щелчку по заголовку строки или столбца) |
клавиша перехода (клавиши со стрелками, PAGE UP или PAGE DOWN, HOME, END) |
Если выделена вся строка или столбец, выбор текущей ячейки в новой строке или столбце приводит к выделению всей новой строки или столбца (в зависимости от режима выделения). |
Если свойство MultiSelect имеет значение false, а свойство SelectionMode имеет значение FullRowSelect или FullColumnSelect, выбор текущей ячейки в новой строке или столбце с помощью клавиатуры приводит к выделению всей новой строки или столбца. Клавиши SHIFT, CTRL и ALT не влияют на выполнение данных действий.
Если свойству MultiSelect присвоено значение true, способ перехода не изменяется, однако способ выделения нескольких ячеек с использованием клавиш перехода при нажатой клавише SHIFT (а также CTRL+SHIFT) изменится. Перед выполнением перехода элемент управления помечает текущую ячейку как базовую. При выполнении перехода с нажатой клавишей SHIFT выделяются все ячейки между базовой и текущей ячейками. Выделенные ранее ячейки элемента управления останутся выделенными. Однако если при выполнении перехода они временно окажутся между базовой и текущей ячейками, выделение с них будет снято.
Если свойству MultiSelect присвоено значение true, а свойству SelectionMode присвоено значение FullRowSelect или FullColumnSelect, поведение базовой и текущей ячеек будет аналогичным, однако выделяться строки или столбцы будут полностью.
Обработка событий мыши по умолчанию
Обработка основных событий мыши
Примечание
При щелчке левой кнопкой мыши по ячейке, текущая ячейка изменяется.При щелчке правой кнопкой мыши по ячейке открывается контекстное меню, если оно предусмотрено.
Действие мыши |
Описание |
---|---|
Нажатие левой кнопки мыши |
Ячейка, в которой было произведено нажатие, становится текущей, и генерируется событие DataGridView.CellMouseDown. |
Отжатие левой кнопки мыши |
Вызывает событие DataGridView.CellMouseUp |
Щелчок левой кнопкой мыши |
Генерирует события DataGridView.CellClick и DataGridView.CellMouseClick |
Нажатие левой кнопки мыши на ячейке заголовка столбца и перетаскивание |
Если свойство DataGridView.AllowUserToOrderColumns имеет значение true, приводит к перемещению столбца для изменения его позиции. |
Выделение мышью
Со средней кнопки мыши или колесом прокрутки не связаны операции выделения.
Если свойству MultiSelect присвоено значение false, а свойству SelectionMode присвоено значение CellSelect, происходит следующее.
Действие мыши |
Описание |
---|---|
Щелчок левой кнопкой мыши |
Выделение только текущей ячейки при щелчке по ней. При щелчке по заголовку строки или столбца выделение не производится. |
Щелчок правой кнопкой мыши |
Отображается контекстное меню, если оно предусмотрено. |
Результат будет аналогичным, если свойству SelectionMode присвоено значение RowHeaderSelect или ColumnHeaderSelect, за исключением того, что при щелчке по заголовку строки или столбца будет выделяться вся строка или столбец, а текущей ячейкой станет первая ячейка данной строки или столбца.
Если свойству SelectionMode присвоено значение FullRowSelect или FullColumnSelect, при щелчке по любой ячейке строки или столбца будет выделяться вся строка или столбец.
Если свойству MultiSelect присвоено значение true, способ выделения нескольких ячеек при щелчке мышью с нажатой клавишей CTRL или SHIFT будет иным.
При щелчке мышью по ячейке с нажатой клавишей CTRL, состояние выделения данной ячейки изменится, в то время как остальные ячейки сохранят текущее состояние выделение.
При щелчке мышью по ячейке или последовательности ячеек с нажатой клавишей SHIFT в область выделения будут включены все ячейки, расположенные между текущей ячейкой и базовой ячейкой, соответствующей положению текущей ячейки до первого щелчка. При щелчке мышью и перетаскивании курсора по нескольким ячейкам, базовой ячейкой будет являться ячейка, с которой началась операция перетаскивания. Последующие щелчки мышью при нажатой клавише SHIFT приводят к изменению текущей, но не базовой ячейки. Выделенные ранее ячейки элемента управления останутся выделенными. Однако если при выполнении перехода они временно окажутся между базовой и текущей ячейками, выделение с них будет снято.
Если свойству MultiSelect присвоено значение true, а свойству SelectionMode присвоено значение RowHeaderSelect или ColumnHeaderSelect, щелчок мышью по заголовку строки или столбца (в зависимости от режима выделения) при нажатой клавише SHIFT приведет к изменению состояния выделения целых строк или столбцов, если они были выделены ранее. В противном случае выделение будет снято, и будут выделяться новые строки или столбцы. Щелчок мышью по заголовку строки или столбца при нажатой клавише CTRL в свою очередь приведет выделению выбранных строк или столбцов или снятию выделения с ранее выделенных, причем состояние выделения остальных строк или столбцов не изменится.
Если свойству MultiSelect присвоено значение true, а свойству SelectionMode присвоено значение FullRowSelect или FullColumnSelect, щелчок по ячейке при нажатой клавише SHIFT или CTRL приведет к аналогичному результату с той разницей, что изменения будут применяться только целиком к строкам или столбцам.