若要自定义键盘行为,可以处理标准键盘事件,例如 KeyDown 。 但是,在编辑模式下,托管的编辑控件接收键盘输入, DataGridView 控件不会发生键盘事件。 若要处理编辑控件事件,请将处理程序附加到 EditingControlShowing 事件处理程序中的编辑控件。 或者,可以通过替代 ProcessDialogKey 和 ProcessDataGridViewKey 方法来自定义 DataGridView 子类中的键盘行为。
false
true
如果将 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 的同时单击单元格的行为是一样的,只不过只有整行和整列受影响。