DataGridView 控件的默认键盘和鼠标行为

下表描述了用户如何通过键盘和鼠标与 DataGridView 控件进行交互。

注释

若要自定义键盘行为,可以处理标准键盘事件,例如 KeyDown。 但是,在编辑模式下,托管的编辑控件接收键盘输入,并且键盘事件不会在 DataGridView 控件上发生。 若要处理编辑控件事件,请将处理程序附加到事件处理程序中的 EditingControlShowing 编辑控件。 或者,可以通过在DataGridView子类中重写ProcessDialogKeyProcessDataGridViewKey方法来自定义键盘行为。

默认键盘处理

基本导航和输入键

键或组合键 DESCRIPTION
向下箭头 将焦点移到当前单元格的正下方单元格。 如果焦点位于最后一行中,则不执行任何操作。
向左箭头 将焦点移动到行中的上一个单元格。 如果焦点位于行的第一个单元格中,则不执行任何操作。
向右键 将焦点移动到行中的下一个单元格。 如果焦点位于行的最后一个单元格中,则不执行任何动作。
向上箭头 将焦点从当前单元格移动到其上方的单元格。 如果焦点位于第一行中,则不执行任何操作。
主页 将焦点移动到当前行中的第一个单元格。
结束 将焦点移动到当前行中的最后一个单元格。
向下翻页 按完全显示的行数向下滚动控件。 将焦点移至最后一个完整显示的行,不更改列。
向上翻页 按完全显示的行数向上滚动控件。 将焦点移动到第一个显示的行,而不更改列。
选项卡 如果属性值为StandardTabfalse,则将焦点移动到当前行中的下一个单元格。 如果焦点已位于行的最后一个单元格中,将焦点移动到下一行中的第一个单元格。 如果焦点位于控件的最后一个单元格中,将焦点移动到父容器的 Tab 键顺序中的下一个控件。

如果StandardTab属性值为true,则将焦点移动到父容器中选项卡顺序的下一个控件。
转变 + 标签 如果属性值为StandardTabfalse,将焦点移动到当前行中的上一个单元格。 如果焦点已位于行的第一个单元格中,将焦点移动到上一行的最后一个单元格。 如果焦点位于控件的第一个单元格中,将焦点移动到父容器的 Tab 键顺序中的上一个控件。

如果StandardTab属性值为true,则将焦点移到父容器标签顺序中的上一个控件。
Ctrl + Tab 如果StandardTab属性值为false,则将焦点移动到父容器中选项卡顺序的下一个控件。

如果属性值为StandardTabtrue,则将焦点移动到当前行中的下一个单元格。 如果焦点已位于行的最后一个单元格中,将焦点移动到下一行中的第一个单元格。 如果焦点位于控件的最后一个单元格中,将焦点移动到父容器的 Tab 键顺序中的下一个控件。
Ctrl + 转变 + 标签 如果StandardTab属性值为false,则将焦点移到父容器标签顺序中的上一个控件。

如果属性值为StandardTabtrue,将焦点移动到当前行中的上一个单元格。 如果焦点已位于行的第一个单元格中,将焦点移动到上一行的最后一个单元格。 如果焦点位于控件的第一个单元格中,将焦点移动到父容器的 Tab 键顺序中的上一个控件。
Ctrl + 方向键 将焦点移动至箭头方向最远的单元格。
Ctrl + Home键 将焦点移动到控件中的第一个单元格。
Ctrl + 结束 将焦点移动到控件中的最后一个单元格。
Ctrl + 向下/向上翻页 “下页 ”或 “向上翻页”相同。
F2 将当前单元格置于单元格编辑模式(如果 EditMode 属性值为 EditOnF2EditOnKeystrokeOrF2)。
F3 如果属性值为 DataGridViewColumn.SortMode.,则Automatic对当前列进行排序。 它与单击当前列标题相同。 自 .NET Framework 4.7.2 起可用。 若要启用此功能,应用程序必须面向 .NET Framework 4.7.2 或更高版本,或者显式选择通过 AppContext 开关加入辅助功能改进。
F4 如果当前单元格是一个 DataGridViewComboBoxCell单元格,将单元格置于编辑模式,并显示下拉列表。
Alt + 向上/向下箭头 如果当前单元格是一个 DataGridViewComboBoxCell单元格,将单元格置于编辑模式,并显示下拉列表。
Alt + 向左/向右箭头 增加或减少当前单元格列的宽度。
空间 如果当前单元格是 DataGridViewButtonCellDataGridViewLinkCellDataGridViewCheckBoxCell,则引发 CellClickCellContentClick 事件。 如果当前单元格是DataGridViewButtonCell,还将按下该按钮。 如果当前单元格是一个 DataGridViewCheckBoxCell,则还会更改检查状态。
输入 提交对当前单元格和行所做的任何更改,并将焦点移动到当前单元格正下方的单元格。 如果焦点位于最后一行,则会在不移动焦点的情况下提交所有更改。
Esc 如果控件处于编辑模式,则取消编辑。 如果控件没有处于编辑模式,而控件绑定的数据源支持编辑,或已实现带有行级提交范围的虚拟模式,则会还原对当前行所做的任何更改。
Backspace 编辑单元格时,删除插入点前的字符。
删除 编辑单元格时,删除插入点后面的字符。
Ctrl + 进入 提交对当前单元格所做的任何更改,而无需移动焦点。 如果控件绑定到支持编辑的数据源,或者已使用行级提交范围实现虚拟模式,则还会提交对当前行所做的任何更改。
Ctrl0 如果可以编辑单元格,请在当前单元格中输入一个 DBNull.Value 值。 默认情况下,单元格值的显示值DBNull是当前单元格生效的属性NullValue的值DataGridViewCellStyle

选择按键

如果将MultiSelect属性设置为false,并且将SelectionMode属性设置为CellSelect,那么使用导航键更改当前单元格时,所选内容将变为新单元格。 ShiftCtrlAlt 键不会影响此行为。

SelectionMode设置为RowHeaderSelectColumnHeaderSelect时,会发生相同行为,但有以下附加内容。

键或组合键 DESCRIPTION
Shift + 空格键 选择完整行或列(与单击行或列标题相同)。
导航键(箭头键页面向上/向下开始结束 如果选择了整行或列,将当前单元格更改为新行或列,会将所选内容移动到完整的新行或列(具体取决于选择模式)。

如果 MultiSelect 设置为 false,且 SelectionMode 设置为 FullRowSelectFullColumnSelect,使用键盘将当前单元格变更到新行或列时,选择会移动到整个新行或列。 ShiftCtrlAlt 键不会影响此行为。

如果 MultiSelect 设置为 true,导航行为不会更改,但在按 Shift 时使用键盘导航(包括 Ctrl + Shift)将修改多单元格选择。 在导航开始之前,控件将当前单元格标记为定位单元格。 按住 Shift 键进行导航时,选择的范围包括定位单元格与当前单元格之间的所有单元格。 如果控件中的其他单元格已被选中,将保持选中状态,但如果键盘导航暂时将它们放在定位单元格和当前单元格之间,它们可能会变为未选中状态。

如果MultiSelect设置为true并且SelectionMode设置为FullRowSelectFullColumnSelect时,定位单元格和当前单元格的行为相同,但只有完整的行或列会被选择或取消选择。

默认鼠标处理

基本鼠标处理

注释

单击单元格时,只要使用鼠标左键,总是会更改当前单元格。 在有快捷菜单可用时,右键单击单元格可以打开快捷菜单。

鼠标作 DESCRIPTION
按住鼠标左键 将已单击的单元格设为当前单元格,并引发 DataGridView.CellMouseDown 事件。
鼠标左键向上 引发DataGridView.CellMouseUp事件
鼠标左键单击 引发DataGridView.CellClickDataGridView.CellMouseClick这两个事件
鼠标左键向下拖动,然后拖动列标题单元格 DataGridView.AllowUserToOrderColumns如果该属性为true,则移动列,以便将其放入新位置。

鼠标选择

没有与鼠标中间按钮或鼠标滚轮关联的选择行为。

如果MultiSelect属性设置为false,并且SelectionMode属性设置为CellSelect,则会发生以下行为。

鼠标作 DESCRIPTION
点击 如果用户单击单元格,则仅选择当前单元格。 如果用户单击行或列标题,则无选择行为。
右键单击 显示快捷菜单(如果有)。

相同的行为将会在SelectionMode被设置为RowHeaderSelectColumnHeaderSelect时发生,不过,根据选择模式,单击行或列标题会选择整行或整列,并将当前单元格设置为该行或列中的第一个单元格。

如果 SelectionMode 设置为 FullRowSelectFullColumnSelect单击行或列中的任何单元格,将选择完整行或列。

如果 MultiSelect 设置为 true,则在按 CtrlShift 的同时单击单元格将修改多单元格选择。

在按 Ctrl 的同时单击单元格时,单元格将更改其选择状态,而所有其他单元格将保留其当前选择状态。

在按住 Shift 键单击一个单元格或多个单元格时,所选内容将包括当前单元格与在首次单击前当前单元格所在位置的定位单元格之间的所有单元格。 当您单击并拖动指针跨多个单元格时,基准单元格是拖动操作开始时单击的单元格。 按 Shift 时,后续单击会更改当前单元格,但不会更改定位点单元格。 如果控件中的其他单元格已被选中,将保持选中状态,但如果鼠标导航暂时将它们放在定位单元格和当前单元格之间,它们可能会变为未选中状态。

如果MultiSelect设置为trueSelectionMode设置为或设置为RowHeaderSelectColumnHeaderSelect,则在按 Shift 时单击行或列标题(具体取决于选择模式)将修改完整行或列的现有选择(如果存在此类选择)。 否则,它将清除所选内容,并重新选择完整的行或列。 但是,按 Ctrl 的同时单击行或列标题将添加或删除当前所选内容中单击的行或列,而不会修改当前选定内容。

如果MultiSelect设置为trueSelectionMode设置为FullRowSelectFullColumnSelect,则按ShiftCtrl时单击单元格的行为方式相同,但仅影响完整行和列。

另请参阅