vb.net中环境是WINFORM的前提下,实现按住Ctrl,用鼠标点击DataGrid实现多选功能?
在vb.net中我的开发环境是WINFORM,现在要实现的功能是datagrid的多选功能,如何才能实现按住ctrl+Datagrid的行来实现Datagrid多行选择功能。 --------------------编程问答----------------------------------------编程问答-------------------- 以下类派生自datagrid,可以实现用ctrl或shift多选,通过访问MultiSelectedIndex属性获得多选的行索引的集合
Private Sub DataGridView1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
If e.KeyData = Keys.Control Then
'按下ctrl键
End If
End Sub
--------------------编程问答-------------------- 将datagridview的MultiSelect = True就可以实现多选功能啊,
Public Class MultiLineDataGrid
Inherits System.Windows.Forms.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)
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
Throw New Exception(ex.ToString)
End Try
End Function
End Class
如果是多行选取的话,再将DataGridView的SelectionMode = DataGridViewSelectionMode.FullRowSelect。 --------------------编程问答-------------------- MultiSelect = True --------------------编程问答-------------------- MultiSelect = True
多选属性搞上就可以开工了!
SHIFT也是可以用的哦! --------------------编程问答-------------------- 我的是vs2003的版本 在datagrid的属性里没有找到MultiSelect = True --------------------编程问答-------------------- 大家伙帮帮忙啊~!刚进公司,不能叫白卷
补充:.NET技术 , VB.NET