Обработка клавиатуры и мыши по умолчанию в элементе управления Windows Forms DataGridViewDefault keyboard and mouse handling in the Windows Forms DataGridView control

В следующих таблицах описано, как пользователи могут взаимодействовать с элементом управления DataGridView с помощью клавиатуры и мыши.The following tables describe how users can interact with the DataGridView control through a keyboard and a mouse.

Примечание

Для настройки поведения клавиатуры можно выполнять стандартные события клавиатуры, такие как KeyDown.To customize keyboard behavior, you can handle standard keyboard events such as KeyDown. Однако в режиме редактирования размещаемый элемент управления редактирования получает ввод с клавиатуры и события клавиатуры не возникают для элемента управления DataGridView.In edit mode, however, the hosted editing control receives the keyboard input and the keyboard events do not occur for the DataGridView control. Для обработки событий элемента управления редактирования присоедините обработчики к элементу управления редактирования в обработчике событий EditingControlShowing.To handle editing control events, attach your handlers to the editing control in an EditingControlShowing event handler. Кроме того, можно настроить поведение клавиатуры в подклассе DataGridView, переопределив методы ProcessDialogKey и ProcessDataGridViewKey.Alternatively, you can customize keyboard behavior in a DataGridView subclass by overriding the ProcessDialogKey and ProcessDataGridViewKey methods.

Обработка клавиатуры по умолчаниюDefault keyboard handling

Основные клавиши навигации и вводаBasic navigation and entry keys

Сочетание клавиш или ключаKey or key combination DescriptionDescription
СТРЕЛКА ВНИЗDOWN ARROW Перемещает фокус на ячейку непосредственно под текущей ячейкой.Moves the focus to the cell directly below the current cell. Если фокус находится в последней строке, не выполняет никаких действий.If the focus is in the last row, does nothing.
СТРЕЛКА ВЛЕВОLEFT ARROW Перемещает фокус на предыдущую ячейку в строке.Moves the focus to the previous cell in the row. Если фокус находится в первой ячейке строки, не выполняет никаких действий.If the focus is in the first cell in the row, does nothing.
СТРЕЛКА ВПРАВОRIGHT ARROW Перемещает фокус на следующую ячейку в строке.Moves the focus to the next cell in the row. Если фокус находится в последней ячейке строки, не выполняет никаких действий.If the focus is in the last cell in the row, does nothing.
СТРЕЛКА ВВЕРХUP ARROW Перемещает фокус на ячейку непосредственно над текущей ячейкой.Moves the focus to the cell directly above the current cell. Если фокус находится в первой строке, не выполняет никаких действий.If the focus is in the first row, does nothing.
HOMEHOME Перемещает фокус на первую ячейку в текущей строке.Moves the focus to the first cell in the current row.
ENDEND Перемещает фокус на последнюю ячейку в текущей строке.Moves the focus to the last cell in the current row.
PAGE DOWNPAGE DOWN Прокручивает элемент управления вниз на число полностью отображаемых строк.Scrolls the control downward by the number of rows that are fully displayed. Перемещает фокус на последнюю полностью отображаемую строку без изменения столбцов.Moves the focus to the last fully displayed row without changing columns.
PAGE UPPAGE UP Прокручивает элемент управления вверх на число полностью отображаемых строк.Scrolls the control upward by the number of rows that are fully displayed. Перемещает фокус на первую отображаемую строку без изменения столбцов.Moves focus to the first displayed row without changing columns.
TABTAB Если значение свойства StandardTab равно false, перемещает фокус в следующую ячейку в текущей строке.If the StandardTab property value is false, moves the focus to the next cell in the current row. Если фокус уже находится в последней ячейке строки, перемещает фокус на первую ячейку в следующей строке.If the focus is already in the last cell of the row, moves the focus to the first cell in the next row. Если фокус находится в последней ячейке элемента управления, перемещает фокус на следующий элемент управления в порядке табуляции родительского контейнера.If the focus is in the last cell in the control, moves the focus to the next control in the tab order of the parent container.

Если значение свойства StandardTab равно true, перемещает фокус на следующий элемент управления в порядке табуляции родительского контейнера.If the StandardTab property value is true, moves the focus to the next control in the tab order of the parent container.
SHIFT + TABSHIFT+TAB Если значение свойства StandardTab равно false, перемещает фокус на предыдущую ячейку в текущей строке.If the StandardTab property value is false, moves the focus to the previous cell in the current row. Если фокус уже находится в первой ячейке строки, перемещает фокус на последнюю ячейку в предыдущей строке.If the focus is already in the first cell of the row, moves the focus to the last cell in the previous row. Если фокус находится в первой ячейке элемента управления, перемещает фокус на предыдущий элемент управления в порядке табуляции родительского контейнера.If the focus is in the first cell in the control, moves the focus to the previous control in the tab order of the parent container.

Если значение свойства StandardTab равно true, перемещает фокус на предыдущий элемент управления в порядке табуляции родительского контейнера.If the StandardTab property value is true, moves the focus to the previous control in the tab order of the parent container.
CTRL + TABCTRL+TAB Если значение свойства StandardTab равно false, перемещает фокус на следующий элемент управления в порядке табуляции родительского контейнера.If the StandardTab property value is false, moves the focus to the next control in the tab order of the parent container.

Если значение свойства StandardTab равно true, перемещает фокус в следующую ячейку в текущей строке.If the StandardTab property value is true, moves the focus to the next cell in the current row. Если фокус уже находится в последней ячейке строки, перемещает фокус на первую ячейку в следующей строке.If the focus is already in the last cell of the row, moves the focus to the first cell in the next row. Если фокус находится в последней ячейке элемента управления, перемещает фокус на следующий элемент управления в порядке табуляции родительского контейнера.If the focus is in the last cell in the control, moves the focus to the next control in the tab order of the parent container.
CTRL + SHIFT + TABCTRL+SHIFT+TAB Если значение свойства StandardTab равно false, перемещает фокус на предыдущий элемент управления в порядке табуляции родительского контейнера.If the StandardTab property value is false, moves the focus to the previous control in the tab order of the parent container.

Если значение свойства StandardTab равно true, перемещает фокус на предыдущую ячейку в текущей строке.If the StandardTab property value is true, moves the focus to the previous cell in the current row. Если фокус уже находится в первой ячейке строки, перемещает фокус на последнюю ячейку в предыдущей строке.If the focus is already in the first cell of the row, moves the focus to the last cell in the previous row. Если фокус находится в первой ячейке элемента управления, перемещает фокус на предыдущий элемент управления в порядке табуляции родительского контейнера.If the focus is in the first cell in the control, moves the focus to the previous control in the tab order of the parent container.
CTRL + стрелкаCTRL+ARROW Перемещает фокус на наиболее крайние ячейки в направлении стрелки.Moves the focus to the farthest cell in the direction of the arrow.
CTRL + HOMECTRL+HOME Перемещает фокус на первую ячейку в элементе управления.Moves the focus to the first cell in the control.
CTRL + ENDCTRL+END Перемещает фокус на последнюю ячейку в элементе управления.Moves the focus to the last cell in the control.
CTRL + PAGE ВНИЗ/ВВЕРХCTRL+PAGE DOWN/UP То же, что и страница, или страница выше.Same as PAGE DOWN or PAGE UP.
F2F2 Помещает текущую ячейку в режим редактирования ячейки, если значение свойства EditMode равно EditOnF2 или EditOnKeystrokeOrF2.Puts the current cell into cell edit mode if the EditMode property value is EditOnF2 or EditOnKeystrokeOrF2.
F3F3 Сортирует текущий столбец, если значение свойства DataGridViewColumn.SortMode Automatic.Sorts the current column if the DataGridViewColumn.SortMode property value is Automatic. Это то же самое, что и щелчок по заголовку текущего столбца.It's the same as clicking the current column header. Доступно с момента .NET Framework 4.7.2.Available since .NET Framework 4.7.2. Чтобы включить эту функцию, приложения должны быть нацелены на .NET Framework 4.7.2 или более поздней версии или явно отказаться от улучшения специальных возможностей с помощью коммутаторов AppContext.To enable this feature, applications must target .NET Framework 4.7.2 or later versions or explicitly opt into accessibility improvements using AppContext switches.
F4F4 Если текущая ячейка является DataGridViewComboBoxCell, переводит ячейку в режим редактирования и отображает раскрывающийся список.If the current cell is a DataGridViewComboBoxCell, puts the cell into edit mode and displays the drop-down list.
ALT + СТРЕЛКА "ВВЕРХ/ВНИЗ"ALT+UP/DOWN ARROW Если текущая ячейка является DataGridViewComboBoxCell, переводит ячейку в режим редактирования и отображает раскрывающийся список.If the current cell is a DataGridViewComboBoxCell, puts the cell into edit mode and displays the drop-down list.
SPACESPACE Если текущая ячейка является DataGridViewButtonCell, DataGridViewLinkCellили DataGridViewCheckBoxCell, вызывает события CellClick и CellContentClick.If the current cell is a DataGridViewButtonCell, DataGridViewLinkCell, or DataGridViewCheckBoxCell, raises the CellClick and CellContentClick events. Если текущая ячейка является DataGridViewButtonCell, также нажимает кнопку.If the current cell is a DataGridViewButtonCell, also presses the button. Если текущая ячейка является DataGridViewCheckBoxCell, также изменяет состояние проверки.If the current cell is a DataGridViewCheckBoxCell, also changes the check state.
ВВОДENTER Фиксирует все изменения в текущей ячейке и строке и перемещает фокус на ячейку непосредственно под текущей ячейкой.Commits any changes to the current cell and row and moves the focus to the cell directly below the current cell. Если фокус находится в последней строке, все изменения фиксируются без перемещения фокуса.If the focus is in the last row, commits any changes without moving the focus.
ESCESC Если элемент управления находится в режиме редактирования, отменяет изменение.If the control is in edit mode, cancels the edit. Если элемент управления не находится в режиме редактирования, возвращает все изменения, внесенные в текущую строку, если элемент управления привязан к источнику данных, поддерживающему редактирование или виртуальный режим, реализованного с областью фиксации на уровне строк.If the control is not in edit mode, reverts any changes that have been made to the current row if the control is bound to a data source that supports editing or virtual mode has been implemented with row-level commit scope.
BACKSPACEBACKSPACE Удаляет символ перед точкой вставки при редактировании ячейки.Deletes the character before the insertion point when editing a cell.
DELETEDELETE Удаляет символ после точки вставки при редактировании ячейки.Deletes the character after the insertion point when editing a cell.
CTRL + ВВОДCTRL+ENTER Фиксирует все изменения в текущей ячейке без перемещения фокуса.Commits any changes to the current cell without moving the focus. Также фиксирует все изменения в текущей строке, если элемент управления привязан к источнику данных, поддерживающему редактирование или виртуальный режим, реализованному с областью фиксации на уровне строк.Also commits any changes to the current row if the control is bound to a data source that supports editing or virtual mode has been implemented with row-level commit scope.
CTRL + 0CTRL+0 Вводит DBNull.Value значение в текущую ячейку, если ячейка может быть изменена.Enters a DBNull.Value value into the current cell if the cell can be edited. По умолчанию отображаемое значение для DBNull значения ячейки — это значение свойства NullValue DataGridViewCellStyle, действующего для текущей ячейки.By default, the display value for a DBNull cell value is the value of the NullValue property of the DataGridViewCellStyle in effect for the current cell.

Ключи выбораSelection keys

Если для свойства MultiSelect задано значение false и для свойства SelectionMode задано значение CellSelect, то изменение текущей ячейки с помощью клавиш навигации позволяет изменить выделение на новую ячейку.If the MultiSelect property is set to false and the SelectionMode property is set to CellSelect, changing the current cell by using the navigation keys changes the selection to the new cell. Клавиши SHIFT, CTRL и ALT не влияют на это поведение.The SHIFT, CTRL, and ALT keys do not affect this behavior.

Если SelectionMode имеет значение RowHeaderSelect или ColumnHeaderSelect, то происходит такое же поведение, но со следующими дополнениями.If the SelectionMode is set to RowHeaderSelect or ColumnHeaderSelect, the same behavior occurs but with the following additions.

Сочетание клавиш или ключаKey or key combination DescriptionDescription
SHIFT + ПРОБЕЛSHIFT+SPACEBAR Выбирает полную строку или столбец (то же, что и щелчок по заголовку строки или столбца).Selects the full row or column (the same as clicking the row or column header).
Клавиша навигации (клавиша со стрелкой, страница вверх/вниз, Главная, КОНЕЧная)navigation key (arrow key, PAGE UP/DOWN, HOME, END) Если выбрана полная строка или столбец, то изменение текущей ячейки на новую строку или столбец приводит к перемещению выделения в новую строку или столбец (в зависимости от режима выбора).If a full row or column is selected, changing the current cell to a new row or column moves the selection to the full new row or column (depending on the selection mode).

Если параметр MultiSelect имеет значение false а SelectionMode имеет значение FullRowSelect или FullColumnSelect, то изменение текущей ячейки на новую строку или столбец с помощью клавиатуры приводит к перемещению выделенной строки в полную новую строку или столбец.If MultiSelect is set to false and SelectionMode is set to FullRowSelect or FullColumnSelect, changing the current cell to a new row or column by using the keyboard moves the selection to the full new row or column. Клавиши SHIFT, CTRL и ALT не влияют на это поведение.The SHIFT, CTRL, and ALT keys do not affect this behavior.

Если MultiSelect имеет значение true, поведение навигации не изменяется, но переход с помощью клавиатуры при нажатии клавиши SHIFT (включая CTRL + SHIFT) приведет к изменению выбора из нескольких ячеек.If MultiSelect is set to true, the navigation behavior does not change, but navigating with the keyboard while pressing SHIFT (including CTRL+SHIFT) will modify a multi-cell selection. Перед началом навигации элемент управления помечает текущую ячейку как ячейку привязки.Before navigation begins, the control marks the current cell as an anchor cell. При нажатии клавиши SHIFT выделенные элементы будут содержать все ячейки между ячейками привязки и текущей ячейкой.When you navigate while pressing SHIFT, the selection includes all cells between the anchor cell and the current cell. Другие ячейки в элементе управления остаются выбранными, если они уже выбраны, но они могут быть невыбранными, если перемещение по клавиатуре временно помещает их между ячейкой привязки и текущей ячейкой.Other cells in the control will remain selected if they were already selected, but they may become unselected if the keyboard navigation temporarily puts them between the anchor cell and the current cell.

Если параметр MultiSelect имеет значение true а SelectionMode имеет значение FullRowSelect или FullColumnSelect, поведение ячейки привязки и текущей ячейки будет одинаковым, но только полные строки или столбцы будут выбраны или не выбраны.If MultiSelect is set to true and SelectionMode is set to FullRowSelect or FullColumnSelect, the behavior of the anchor cell and current cell is the same, but only full rows or columns become selected or unselected.

Обработка мыши по умолчаниюDefault mouse handling

Базовая обработка мышиBasic mouse handling

Примечание

Щелчок по ячейке с левой кнопкой мыши всегда изменяет текущую ячейку.Clicking a cell with the left mouse button always changes the current cell. Если щелкнуть ячейку с правой кнопкой мыши, откроется контекстное меню, когда оно будет доступно.Clicking a cell with the right mouse button opens a shortcut menu, when one is available.

Действие мышиMouse action DescriptionDescription
Нажатие левой кнопки мышиLeft mouse button down Делает выбранную ячейку текущей ячейкой и вызывает событие DataGridView.CellMouseDown.Makes the clicked cell the current cell, and raises the DataGridView.CellMouseDown event.
Левая кнопка мыши вверхLeft mouse button up Вызывает событие DataGridView.CellMouseUp.Raises the DataGridView.CellMouseUp event
Щелчок левой кнопкой мышиLeft mouse button click Вызывает события DataGridView.CellClick и DataGridView.CellMouseClickRaises the DataGridView.CellClick and DataGridView.CellMouseClick events
Нажатие левой кнопки мыши и перетаскивание ячейки заголовка столбцаLeft mouse button down, and drag on a column header cell Если свойство DataGridView.AllowUserToOrderColumns true, перемещает столбец, чтобы его можно было удалить в новую точку.If the DataGridView.AllowUserToOrderColumns property is true, moves the column so that it can be dropped into a new position.

Выбор мышиMouse selection

Нет выделения, связанного с средней кнопкой мыши или колесиком мыши.No selection behavior is associated with the middle mouse button or the mouse wheel.

Если свойство MultiSelect имеет значение false и для свойства SelectionMode задано значение CellSelect, происходит следующее поведение.If the MultiSelect property is set to false and the SelectionMode property is set to CellSelect, the following behavior occurs.

Действие мышиMouse action DescriptionDescription
Нажмите левую кнопку мышиClick left mouse button Выбирает только текущую ячейку, если пользователь щелкает ячейку.Selects only the current cell if the user clicks a cell. Отсутствие выбора, если пользователь щелкает заголовок строки или столбца.No selection behavior if the user clicks a row or column header.
Нажмите правую кнопку мышиClick right mouse button Отображает контекстное меню, если оно доступно.Displays a shortcut menu if one is available.

Такое же поведение возникает, когда SelectionMode имеет значение RowHeaderSelect или ColumnHeaderSelect, за исключением того, что в зависимости от режима выбора, если щелкнуть заголовок строки или столбца, будет выбрана полная строка или столбец и установлена текущая ячейка в первой ячейке строки или столбца.The same behavior occurs when the SelectionMode is set to RowHeaderSelect or ColumnHeaderSelect, except that, depending on the selection mode, clicking a row or column header will select the full row or column and set the current cell to the first cell in the row or column.

Если SelectionMode имеет значение FullRowSelect или FullColumnSelect, то при щелчке любой ячейки в строке или столбце выбирается полная строка или столбец.If SelectionMode is set to FullRowSelect or FullColumnSelect, clicking any cell in a row or column will select the full row or column.

Если для параметра MultiSelect задано значение true, то при нажатии клавиш CTRL или SHIFT будет изменено выделение в нескольких ячейках.If MultiSelect is set to true, clicking a cell while pressing CTRL or SHIFT will modify a multi-cell selection.

Если щелкнуть ячейку при нажатой клавише CTRL, ячейка изменит свое состояние выбора, тогда как все остальные ячейки сохраняют свое текущее состояние выбора.When you click a cell while pressing CTRL, the cell will change its selection state while all other cells retain their current selection state.

Если щелкнуть ячейку или ряд ячеек, удерживая нажатой клавишу SHIFT, выделение включает все ячейки между текущей ячейкой и ячейкой привязки, расположенной в позиции текущей ячейки до первого щелчка.When you click a cell or a series of cells while pressing SHIFT, the selection includes all cells between the current cell and an anchor cell located at the position of the current cell before the first click. Если щелкнуть и перетащить указатель по нескольким ячейкам, то ячейка привязки является ячейкой, которую щелкнули в начале операции перетаскивания.When you click and drag the pointer across multiple cells, the anchor cell is the cell clicked at the beginning of the drag operation. Последующие нажатия клавиши SHIFT меняют текущую ячейку, но не ячейку привязки.Subsequent clicks while pressing SHIFT change the current cell, but not the anchor cell. Другие ячейки в элементе управления остаются выбранными, если они уже выбраны, но они могут стать невыбранными, если переход между ячейками привязки и текущей ячейкой временно помещается.Other cells in the control will remain selected if they were already selected, but they may become unselected if mouse navigation temporarily puts them between the anchor cell and the current cell.

Если параметр MultiSelect имеет значение true а SelectionMode имеет значение RowHeaderSelect или ColumnHeaderSelect, то при щелчке заголовка строки или столбца (в зависимости от режима выбора) при нажатии клавиши SHIFT будет изменен существующий набор полных строк или столбцов, если такой выбор существует.If MultiSelect is set to true and SelectionMode is set to RowHeaderSelect or ColumnHeaderSelect, clicking a row or column header (depending on the selection mode) while pressing SHIFT will modify an existing selection of full rows or columns if such a selection exists. В противном случае он очистит выбор и начнет новый выбор полных строк или столбцов.Otherwise, it will clear the selection and start a new selection of full rows or columns. При щелчке заголовка строки или столбца при нажатии клавиши CTRL будет добавлен или удалена выбранная строка или столбец из текущего выделения без изменения текущего выделения.Clicking a row or column header while pressing CTRL, however, will add or remove the clicked row or column from the current selection without otherwise modifying the current selection.

Если для параметра MultiSelect задано значение true а для параметра SelectionMode задано значение FullRowSelect или FullColumnSelect, то нажатие клавиши SHIFT или CTRL ведет себя одинаково, за исключением того, что затрагиваются только полные строки и столбцы.If MultiSelect is set to true and SelectionMode is set to FullRowSelect or FullColumnSelect, clicking a cell while pressing SHIFT or CTRL behaves the same way except that only full rows and columns are affected.

См. также разделSee also