我也是,將KeyPreview設為True後,按Del,DataGridview沒有反應,只好重寫DataGridView:
Public Class CustomKeyEventDataGridView
Inherits DataGridView
Public Event RowRemoving(ByVal iRowIndex As Integer)
<System.Security.Permissions.UIPermission( _
System.Security.Permissions.SecurityAction.LinkDemand, _
Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
' Extract the key code from the key value.
Dim key As Keys = keyData And Keys.KeyCode
If key = Keys.Delete AndAlso Me.SelectedRows.Count > 0 Then
RaiseEvent RowRemoving(Me.CurrentRow.Index)
Return False ' Me.ProcessDeleteKey(keyData)
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
<System.Security.Permissions.SecurityPermission( _
System.Security.Permissions.SecurityAction.LinkDemand, Flags:= _
System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _
Protected Overrides Function ProcessDataGridViewKey( _
ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
If e.KeyCode = Keys.Delete AndAlso Me.SelectedRows.Count > 0 Then
Return Me.ProcessDeleteKey(e.KeyData)
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
End Class
自定義了RowRemoving事件,但在Winform中:
Private Sub RemoveRowing(ByVal iRow As Integer) Handles dgvDatas.rowremoving