DataGridView 控制項的預設鍵盤和滑鼠行為
下表描述使用者如何透過鍵盤和滑鼠與 DataGridView 控制項互動。
注意
若要自訂鍵盤行為,您可以處理標準鍵盤事件,例如 KeyDown 。 不過,在編輯模式中,裝載的編輯控制項會收到鍵盤輸入,而且控制項不會發生 DataGridView 鍵盤事件。 若要處理編輯控制項事件,請將處理常式附加至事件處理常式中的 EditingControlShowing 編輯控制項。 或者,您可以覆寫 ProcessDialogKey 和 ProcessDataGridViewKey 方法,在子類別中 DataGridView 自訂鍵盤行為。
預設鍵盤處理
基本導覽和輸入索引鍵
按鍵或按鍵組合 | 描述 |
---|---|
向下箭頭 | 將焦點移至目前儲存格正下方的儲存格。 如果焦點位於最後一個資料列中,則不會執行任何動作。 |
向左鍵 | 將焦點移至資料列中的上一個儲存格。 如果焦點位於資料列的第一個儲存格中,則不會執行任何動作。 |
向右鍵 | 將焦點移至資料列中的下一個儲存格。 如果焦點位於資料列的最後一個儲存格中,則不會執行任何動作。 |
向上箭頭 | 將焦點移至目前儲存格正上方的儲存格。 如果焦點位於第一個資料列中,則不會執行任何動作。 |
首頁 | 將焦點移至目前資料列中的第一個儲存格。 |
結束 | 將焦點移至目前資料列中的最後一個儲存格。 |
向下頁 | 向下捲動控制項,依完全顯示的資料列數目向下捲動。 將焦點移至最後一個完全顯示的資料列,而不變更資料行。 |
向上頁 | 依完全顯示的資料列數目向上捲動控制項。 將焦點移至第一個顯示的資料列,而不變更資料行。 |
定位字元 | StandardTab如果屬性值為 false ,請將焦點移至目前資料列中的下一個儲存格。 如果焦點已經在資料列的最後一個儲存格中,請將焦點移至下一個資料列中的第一個儲存格。 如果焦點位於控制項的最後一個儲存格中,請將焦點移至父容器索引標籤順序中的下一個控制項。StandardTab如果屬性值為 true ,則會將焦點移至父容器索引標籤順序中的下一個控制項。 |
Shift + Tab | StandardTab如果屬性值為 false ,會將焦點移至目前資料列中的上一個儲存格。 如果焦點已經在資料列的第一個儲存格中,請將焦點移至上一列的最後一個儲存格。 如果焦點位於控制項的第一個儲存格中,請將焦點移至上一個控制項的父容器定位順序。StandardTab如果屬性值為 true ,則會以父容器的定位順序將焦點移至上一個控制項。 |
Ctrl + Tab | StandardTab如果屬性值為 false ,則會將焦點移至父容器索引標籤順序中的下一個控制項。StandardTab如果屬性值為 true ,請將焦點移至目前資料列中的下一個儲存格。 如果焦點已經在資料列的最後一個儲存格中,請將焦點移至下一個資料列中的第一個儲存格。 如果焦點位於控制項的最後一個儲存格中,請將焦點移至父容器索引標籤順序中的下一個控制項。 |
Ctrl + Shift + Tab | StandardTab如果屬性值為 false ,則會以父容器的定位順序將焦點移至上一個控制項。StandardTab如果屬性值為 true ,會將焦點移至目前資料列中的上一個儲存格。 如果焦點已經在資料列的第一個儲存格中,請將焦點移至上一列的最後一個儲存格。 如果焦點位於控制項的第一個儲存格中,請將焦點移至上一個控制項的父容器定位順序。 |
Ctrl + 箭頭 | 將焦點移至箭頭方向最遠的儲存格。 |
Ctrl + Home | 將焦點移至控制項中的第一個儲存格。 |
Ctrl + End | 將焦點移至 控制項中的最後一個儲存格。 |
Ctrl + 頁面向下/向上 | 與 [向下頁面] 或 [向上 頁] 相同。 |
F2 | 如果屬性值為 EditOnF2 或 EditOnKeystrokeOrF2 , EditMode 則將目前儲存格放入儲存格編輯模式。 |
F3 | 如果屬性值為 Automatic , DataGridViewColumn.SortMode 則排序目前的資料行。 這與按一下目前的資料行標頭相同。 .NET Framework 4.7.2 (含) 以後的版本皆提供。 若要啟用這項功能,應用程式必須以 .NET Framework 4.7.2 或更新版本為目標,或使用 AppCoNtext 參數明確加入宣告協助工具改進。 |
F4 | 如果目前的儲存格是 DataGridViewComboBoxCell ,請將儲存格放入編輯模式,並顯示下拉式清單。 |
Alt + 向上/向下鍵 | 如果目前的儲存格是 DataGridViewComboBoxCell ,請將儲存格放入編輯模式,並顯示下拉式清單。 |
Alt + 向左/向右鍵 | 增加或減少目前儲存格資料行的寬度。 |
Space | 如果目前的儲存格是 DataGridViewButtonCell 、 DataGridViewLinkCell 或 DataGridViewCheckBoxCell ,則會 CellClick 引發 和 CellContentClick 事件。 如果目前的儲存格是 DataGridViewButtonCell ,則也會按下按鈕。 如果目前的儲存格是 DataGridViewCheckBoxCell ,也會變更檢查狀態。 |
Enter | 認可目前儲存格和資料列的任何變更,並將焦點移至目前儲存格正下方的儲存格。 如果焦點位於最後一個資料列中,則認可任何變更而不移動焦點。 |
Esc | 如果控制項處於編輯模式,則取消編輯。 如果控制項不在編輯模式中,如果控制項系結至支援編輯或虛擬模式的資料來源已使用資料列層級認可範圍實作,則會還原對目前資料列所做的任何變更。 |
退格鍵 | 編輯儲存格時,刪除插入點之前的字元。 |
刪除 | 編輯儲存格時,刪除插入點後面的字元。 |
Ctrl + Enter | 認可目前儲存格的任何變更,而不移動焦點。 如果控制項系結至支援編輯或虛擬模式的資料來源已實作資料列層級認可範圍,也會認可目前資料列的任何變更。 |
Ctrl + 0 | 如果可以編輯儲存格,則輸入 DBNull.Value 目前儲存格中的值。 根據預設,儲存格值的顯示值 DBNull 是目前儲存格作用中 之 DataGridViewCellStyle 屬性的值 NullValue 。 |
選取索引鍵
MultiSelect如果 屬性設定為 false
,且 SelectionMode 屬性設定為 CellSelect ,則使用導覽鍵變更目前儲存格會將選取範圍變更為新儲存格。 Shift 、 Ctrl 和 Alt 鍵不會影響此行為。
SelectionMode如果 設定為 RowHeaderSelect 或 ColumnHeaderSelect ,則會發生相同的行為,但有下列新增專案。
按鍵或按鍵組合 | 描述 |
---|---|
Shift + 空格鍵 | 選取完整資料列或資料行(與按一下資料列或資料行標頭相同)。 |
流覽鍵( 方向鍵 、 頁面向上/向下 、首頁 、 結束 ) | 如果選取了完整資料列或資料行,請將目前的儲存格變更為新的資料列或資料行,會將選取範圍移至完整的新資料列或資料行(視選取模式而定)。 |
如果 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 ,則會發生下列行為。
滑鼠動作 | 描述 |
---|---|
按一下 | 如果使用者按一下儲存格,則只會選取目前的儲存格。 如果使用者按一下資料列或資料行標頭,則不會有任何選取行為。 |
以滑鼠右鍵按一下 | 如果有的話,顯示快捷方式功能表。 |
當 設定為 RowHeaderSelect 或 ColumnHeaderSelect 時 SelectionMode ,會發生相同的行為,不同之處在于,根據選取模式,按一下資料列或資料行標頭會選取完整的資料列或資料行,並將目前的儲存格設定為數據列或資料行中的第一個儲存格。
如果 SelectionMode 設定為 FullRowSelect 或 FullColumnSelect ,按一下資料列或資料行中的任何資料格,就會選取完整的資料列或資料行。
如果 MultiSelect 設定為 true
,則按下 Ctrl 或 Shift 時按一下儲存格會修改多儲存格選取範圍。
當您按下 Ctrl 時按一下儲存格時,儲存格將會變更其選取狀態,而所有其他儲存格都會保留其目前的選取狀態。
當您按下 Shift 鍵時按一下儲存格或一系列儲存格時,選取範圍會包含目前儲存格與位於目前儲存格位置的錨點儲存格之間的所有儲存格,然後再按一下第一次按一下。 當您按一下指標並拖曳到多個儲存格時,錨點儲存格就是拖曳作業開始時按一下的儲存格。 按下 Shift 鍵時,後續按一下會變更目前的儲存格,但不會變更錨點儲存格。 如果已經選取控制項中的其他儲存格,則仍會保持選取狀態,但如果滑鼠流覽暫時將它們放在錨點儲存格與目前儲存格之間,它們可能會變成未選取。
如果 MultiSelect 設定為 true
且 SelectionMode 設定為 RowHeaderSelect 或 ColumnHeaderSelect ,則按一下資料列或資料行標頭(視選取模式而定),而按下 Shift 會修改現有完整資料列或資料行的選取範圍,如果這類選取專案存在。 否則,它會清除選取範圍,並啟動完整資料列或資料行的新選取範圍。 不過,按下 Ctrl 鍵時按一下資料列或資料行標頭,將會從目前的選取範圍新增或移除已按一下的資料列或資料行,而不需修改目前的選取範圍。
如果 MultiSelect 設定為 true
,且 SelectionMode 設定為 FullRowSelect 或 FullColumnSelect ,則按下 Shift 或 Ctrl 時按一下儲存格的行為會相同,不同之處在于只會影響完整資料列和資料行。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應