功能:点击datagrid并且按住键盘上的ctrl或shift可选择多行 Public Class MyDataGridCLASS Inherits DataGrid Private m As New ArrayList Public ReadOnly Property MultiSelectedIndex() As Integer() Get Return m.ToArray(GetType(Integer)) End Get End Property Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) Debug.WriteLine("DataGrid has hit") Dim posdg As Point = New Point(e.X, e.Y) Dim hitDG As DataGrid.HitTestInfo = HitTest(posdg) If HitDataGrid(hitDG) Then MyBase.OnMouseDown(e) Debug.WriteLine("Mousedown has gogogo.....") End If End Sub Private Function HitDataGrid(ByVal Hit As DataGrid.HitTestInfo) As Boolean Try Select Case Me.ModifierKeys Case Keys.Control If Hit.Row > -1 Then If m.IndexOf(Hit.Row) > -1 Then m.Remove(Hit.Row) Me.UnSelect(Hit.Row) Else m.Add(Hit.Row) Me.Select(Hit.Row) End If End If Return False Case Keys.Shift If Hit.Row > -1 Then For Each IndexOld As Integer In m Me.UnSelect(IndexOld) Next m.Clear() Dim i, intStep As Integer If Hit.Row > Me.CurrentRowIndex Then intStep = 1 Else intStep = -1 End If For i = Me.CurrentRowIndex To Hit.Row Step intStep m.Add(i) Me.Select(i) Next End If Return False Case Else For Each index As Integer In m Me.UnSelect(index) Next m.Clear() If Hit.Type = DataGrid.HitTestType.RowHeader Then m.Add(Hit.Row) End If Return True End Select Catch ex As Exception Debug.WriteLine(ex.ToString) End Try End Function End Class 
|