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

默认键盘处理

基本导航和输入键

键或组合键 如果 StandardTab 属性值为 false ,则将焦点移至当前行中的下一个单元格。 如果焦点已经位于该行的最后一个单元格,则将焦点移至下一行的第一个单元格。 如果焦点位于控件中的最后一个单元格,则将焦点移至父容器的 Tab 键顺序中的下一个控件。

如果 StandardTab 属性值为 true ,则将焦点移至父容器的 Tab 键顺序中的下一个控件。 Shift + Tab 如果 StandardTab 属性值为 false ,则将焦点移至当前行中的上一个单元格。 如果焦点已经位于该行的第一个单元格,则将焦点移至上一行的最后一个单元格。 如果焦点位于控件中的第一个单元格,则将焦点移至父容器的 Tab 键顺序中的上一个控件。

如果 StandardTab 属性值为 true ,则将焦点移至父容器的 Tab 键顺序中的上一个控件。 Ctrl + Tab 如果 StandardTab 属性值为 false ,则将焦点移至父容器的 Tab 键顺序中的下一个控件。

如果 StandardTab 属性值为 true ,则将焦点移至当前行中的下一个单元格。 如果焦点已经位于该行的最后一个单元格,则将焦点移至下一行的第一个单元格。 如果焦点位于控件中的最后一个单元格,则将焦点移至父容器的 Tab 键顺序中的下一个控件。 Ctrl + Shift + Tab 如果 StandardTab 属性值为 false ,则将焦点移至父容器的 Tab 键顺序中的上一个控件。

如果 StandardTab 属性值为 true ,则将焦点移至当前行中的上一个单元格。 如果焦点已经位于该行的第一个单元格,则将焦点移至上一行的最后一个单元格。 如果焦点位于控件中的第一个单元格,则将焦点移至父容器的 Tab 键顺序中的上一个控件。 Ctrl + 箭头键 沿箭头方向将焦点移至最远的单元格。 Ctrl + Home 将焦点移至控件中的第一个单元格。 Ctrl + End 将焦点移至控件中的最后一个单元格。 Ctrl + Page Down/Up Page Down Page Up 相同。 如果 EditMode 属性值为 EditOnF2 EditOnKeystrokeOrF2 ,则将当前单元格置于单元格编辑模式。 如果 DataGridViewColumn.SortMode 属性值为 Automatic ,则对当前列进行排序。 它与单击当前列标题相同。 自 .NET Framework 4.7.2 起可用。 若要启用此功能,应用程序必须以 .NET Framework 4.7.2 或更高版本为目标,或者使用 AppContext 开关显式选择进行辅助功能改进。 如果当前单元格是 DataGridViewComboBoxCell ,则将该单元格置于编辑模式并显示下拉列表。 Alt + 向上键/向下键 如果当前单元格是 DataGridViewComboBoxCell ,则将该单元格置于编辑模式并显示下拉列表。 Alt + 向左键/向右键 增加或减少当前单元格的列宽。 Space 如果当前单元格是 DataGridViewButtonCell DataGridViewLinkCell DataGridViewCheckBoxCell ,则引发 CellClick CellContentClick 事件。 如果当前单元格是 DataGridViewButtonCell ,则同时按下按钮。 如果当前单元格是 DataGridViewCheckBoxCell ,则同时更改复选状态。 Enter 提交对当前单元格和行的任何更改,并将焦点移至当前单元格正下方的单元格。 如果焦点在最后一行,则在不移动焦点的情况下提交所有更改。 如果控件处于编辑模式,则取消编辑。 如果控件不处于编辑模式,并且控件绑定到支持编辑的数据源或者已通过行级提交范围实现虚拟模式,则恢复对当前行所做的任何更改。 Backspace 在编辑单元格时删除插入点之前的字符。 在编辑单元格时删除插入点之后的字符。 Ctrl + Enter 在不移动焦点的情况下,提交对当前单元格所做的任何更改。 如果控件绑定到支持编辑的数据源,或者已通过行级提交范围实现虚拟模式,则同时提交对当前行所做的任何更改。 Ctrl + 0 如果可以编辑当前单元格,则在该单元格中输入 DBNull.Value 值。 默认情况下, DBNull 单元格值的显示值是对当前单元格有效的 DataGridViewCellStyle NullValue 属性值。

如果将 MultiSelect 属性设置为 false ,将 SelectionMode 属性设置为 CellSelect ,则使用导航键更改当前单元格会将所选内容更改为新单元格。 Shift Ctrl Alt 键不会影响此行为。

如果将 SelectionMode 设置为 RowHeaderSelect ColumnHeaderSelect ,则会发生相同的行为,但添加以下操作。

键或组合键

如果将 MultiSelect 设置为 false ,将 SelectionMode 设置为 FullRowSelect FullColumnSelect ,则使用键盘将当前单元格更改为新行或新列会将所选内容移至新的整行或整列。 Shift Ctrl Alt 键不会影响此行为。

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

如果将 MultiSelect 设置为 true ,将 SelectionMode 设置为 FullRowSelect FullColumnSelect ,则定位单元格和当前单元格的行为相同,只有整行或整列变为选中或未选中状态。

默认鼠标处理

基本鼠标处理

用鼠标左键单击单元格始终会更改当前单元格。 用鼠标右键单击单元格会打开快捷菜单(如果有)。

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 的同时单击单元格的行为是一样的,只不过只有整行和整列受影响。

  • DataGridView
  • DataGridView 控件
  •