下表描述使用者如何透過鍵盤和滑鼠與 DataGridView 控制項進行互動。
備註
若要自訂鍵盤行為,您可以處理標準鍵盤事件,例如 KeyDown。 不過,在編輯模式中,裝載的編輯控制項會收到鍵盤輸入,且 DataGridView 控制項不會發生鍵盤事件。 若要處理編輯控制項事件,請將處理程序附加至 EditingControlShowing 事件處理程序中的編輯控制項。 或者,您可以覆寫 ProcessDialogKey 和 ProcessDataGridViewKey 方法,在 DataGridView 子類別中自訂鍵盤行為。
預設鍵盤處理
基本導覽和輸入鍵
| 按鍵或按鍵組合 | 說明 |
|---|---|
| 向下箭頭 | 將焦點移至目前的儲存格正下方的儲存格。 如果焦點位於最後一個資料列中,則不會執行任何動作。 |
| 向左箭頭 | 將焦點移至資料列中的上一個儲存格。 如果焦點位於資料列的第一個儲存格中,則不會執行任何動作。 |
| 右箭頭 | 將焦點移至資料列中的下一個儲存格。 如果焦點位於資料列的最後一個儲存格中,則不會執行任何動作。 |
| 向上箭頭 | 將焦點移至目前的儲存格正上方的儲存格。 如果焦點位於第一個資料列中,則不會執行任何動作。 |
| 首頁 | 將焦點移至目前資料列中的第一個儲存格。 |
| 結束 | 將焦點移至目前資料列中的最後一個儲存格。 |
| Page down | 依完全顯示的資料列數目向下捲動控制項。 將焦點移至最後一個完全顯示的資料列,而不變更資料行。 |
| Page up | 依完全顯示的資料列數目向上捲動控制項。 將焦點移至第一個顯示的資料列,而不變更資料行。 |
| Tab鍵 | 如果 StandardTab 屬性值為 false,則會將焦點移至目前資料列中的下一個儲存格。 如果焦點已經在資料列的最後一個儲存格中,則會將焦點移至下一個資料列中的第一個儲存格。 如果焦點位於控制項的最後一個儲存格中,則會以父容器的定位順序將焦點移至下一個控制項。如果 StandardTab 屬性值為 true,則會以父容器的定位順序將焦點移至下一個控制項。 |
| Shift + Tab 鍵 | 如果 StandardTab 屬性值為 false,則會將焦點移至目前資料列中的上一個儲存格。 如果焦點已經在資料列的第一個儲存格中,則會將焦點移至上一列的最後一個儲存格。 如果焦點位於控制項的第一個儲存格中,則會將焦點移至上一個控制項的父容器定位順序。如果 StandardTab 屬性值為 true,則會以父容器的定位順序將焦點移至上一個控制項。 |
| Ctrl + 標籤 | 如果 StandardTab 屬性值為 true,則會以父容器的定位順序將焦點移至下一個控制項。如果 StandardTab 屬性值為 false,則會將焦點移至目前資料列中的下一個儲存格。 如果焦點已經在資料列的最後一個儲存格中,則會將焦點移至下一個資料列中的第一個儲存格。 如果焦點位於控制項的最後一個儲存格中,則會以父容器的定位順序將焦點移至下一個控制項。 |
| Ctrl + Shift + Tab | 如果 StandardTab 屬性值為 true,則會以父容器的定位順序將焦點移至上一個控制項。如果 StandardTab 屬性值為 false,則會將焦點移至目前資料列中的上一個儲存格。 如果焦點已經在資料列的第一個儲存格中,則會將焦點移至上一列的最後一個儲存格。 如果焦點位於控制項的第一個儲存格中,則會將焦點移至上一個控制項的父容器定位順序。 |
| Ctrl + arrow | 將焦點移至箭頭方向最遠的儲存格。 |
| Ctrl + Home | 將焦點移至控制項中的第一個儲存格。 |
| Ctrl + End | 將焦點移至控制項中的最後一個儲存格。 |
| Ctrl + Page down/up | 與 Page down 貨 Page up 相同。 |
| F2 | 如果 EditMode 屬性值為 EditOnF2 或 EditOnKeystrokeOrF2,則會將目前的儲存格置於儲存格編輯模式。 |
| F3 | 如果 DataGridViewColumn.SortMode 屬性值為 Automatic,則會排序目前的資料行。 這與按一下目前的資料行標頭相同。 .NET Framework 4.7.2 (含) 以後的版本皆提供。 若要啟用這項功能,應用程式必須以 .NET Framework 4.7.2 或更新版本為目標,或使用 AppContext 參數明確選擇加入協助工具改進。 |
| F4 | 如果目前的儲存格是 DataGridViewComboBoxCell,請將儲存格置於編輯模式,並顯示下拉式清單。 |
| Alt + Up/Down arrow | 如果目前的儲存格是 DataGridViewComboBoxCell,請將儲存格置於編輯模式,並顯示下拉式清單。 |
| Alt + 向左鍵/向右鍵 | 增加或減少目前的儲存格資料行的寬度。 |
| 空間 | 如果目前的儲存格是 DataGridViewButtonCell、DataGridViewLinkCell 或 DataGridViewCheckBoxCell,則會引發 CellClick 和 CellContentClick 事件。 如果目前的儲存格是 DataGridViewButtonCell,則也會按下按鈕。 如果目前的儲存格是 DataGridViewCheckBoxCell,則也會變更檢查狀態。 |
| 輸入 | 認可目前的儲存格和資料列的任何變更,並將焦點移至目前的儲存格正下方的儲存格。 如果焦點位於最後一個資料列中,則會認可任何變更而不移動焦點。 |
| Esc | 如果控制項處於編輯模式,則會取消編輯。 如果控制項不在編輯模式中,則在控制項繫結至支援編輯或虛擬模式的資料來源已使用資料列層級認可範圍實作,則會還原對目前資料列所做的任何變更。 |
| 退格鍵 | 編輯儲存格時,刪除插入點之前的字元。 |
| 刪除 | 編輯儲存格時,刪除插入點後面的字元。 |
| Ctrl + 進入 | 認可對目前的儲存格的任何變更,而不移動焦點。 如果控制項繫結至支援編輯或虛擬模式的資料來源已實作資料列層級認可範圍,則也會認可對目前資料列的任何變更。 |
| Ctrl + 0 | 如果可以編輯儲存格,則將 DBNull.Value 值輸入至目前的儲存格中。 根據預設,DBNull 儲存格值的顯示值是目前的儲存格作用中 DataGridViewCellStyle 之 NullValue 屬性的值。 |
選取鍵
如果 MultiSelect 屬性設定為 false,且 SelectionMode 屬性設定為 CellSelect,則使用導覽鍵變更目前的儲存格會將選取範圍變更為新的儲存格。 Shift、Ctrl 和 Alt 鍵不會影響此行為。
如果 SelectionMode 設定為 RowHeaderSelect 或 ColumnHeaderSelect,則會發生相同的行為,但有下列額外行為。
| 按鍵或按鍵組合 | 說明 |
|---|---|
| Shift + 空格鍵 | 選取完整資料列或資料列 (與按一下資料列或資料行標頭相同)。 |
| 瀏覽鍵 (方向鍵、Page up/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 並按一下儲存格的行為會相同,不同之處在於只會影響完整資料列和資料行。