2012-03-22 81 views

回答

1

下面是一个将引发事件的代码,让用户即将删除一行。

Public Class ConfirmDeleteDataGrid 

Inherits DataGrid 

Public Event DeletedRow(ByVal sender As Object, ByVal e As EventArgs) 

Private Const WM_KEYDOWN = &H100 



Public Overrides Function PreProcessMessage(ByRef msg As 
System.Windows.Forms.Message) As Boolean 

Dim keyCode As Keys = CType((msg.WParam.ToInt32 And Keys.KeyCode), Keys) 

If msg.Msg = WM_KEYDOWN And keyCode = Keys.Delete Then 

If MessageBox.Show("Delete This Row?", "Confirm Delete", _ 

MessageBoxButtons.YesNo) = DialogResult.No Then 

Return True 

Else 

RaiseEvent DeletedRow(Me, New EventArgs) 

End If 

End If 

Return MyBase.PreProcessMessage(msg) 

End Function 

Protected Overrides Function ProcessDialogKey(ByVal keyData As 
System.Windows.Forms.Keys) As Boolean 

Dim pt As Point 

Dim hti As DataGrid.HitTestInfo 

pt = Me.PointToClient(Cursor.Position) 

hti = Me.HitTest(pt) 

If keyData = Keys.Delete Then 

If hti.Type = Me.HitTestType.RowHeader Then 

If MessageBox.Show("Delete this row?", "Confirm Delete", _ 

MessageBoxButtons.YesNo) = DialogResult.No Then 

Return True 

Else 

RaiseEvent DeletedRow(Me, New EventArgs) 

End If 

End If 

End If 

Return MyBase.ProcessDialogKey(keyData) 

End Function 



Protected Overrides Sub OnMouseDown(ByVal e As 
System.Windows.Forms.MouseEventArgs) 

Dim hti As DataGrid.HitTestInfo = Me.HitTest(New Point(e.X, e.Y)) 

If hti.Type = DataGrid.HitTestType.ColumnResize Or hti.Type = 
DataGrid.HitTestType.RowResize Then 

Return 'no baseclass call 

End If 

MyBase.OnMouseDown(e) 

End Sub 

Public Sub New() 

Trace.WriteLine(Me.VertScrollBar.Visible.ToString) 

End Sub 

Protected Overrides Sub OnMouseMove(ByVal e As 
System.Windows.Forms.MouseEventArgs) 

Dim hti As DataGrid.HitTestInfo = Me.HitTest(New Point(e.X, e.Y)) 

If hti.Type = DataGrid.HitTestType.ColumnResize Or hti.Type = 
DataGrid.HitTestType.RowResize Then 

Return 'no baseclass call 

End If 

MyBase.OnMouseMove(e) 

End Sub 


End Class 
+0

System.Windows.Forms.DataGrid没有userDeletingRow事件:( – Radislav 2012-03-22 13:12:39

+0

你不使用System.windows.Forms.DataGridView? – 2012-03-22 13:20:00

+0

不,我有课它们是从System.Windows.Forms.DataGrid继承的,如果我点击删除键在选定的行上立即删除行,我想在这里显示对话框来确认 – Radislav 2012-03-22 13:21:33