当前位置:编程学习 > C#/ASP.NET >>

vb.net中环境是WINFORM的前提下,实现按住Ctrl,用鼠标点击DataGrid实现多选功能?

在vb.net中我的开发环境是WINFORM,现在要实现的功能是datagrid的多选功能,如何才能实现按住ctrl+Datagrid的行来实现Datagrid多行选择功能。 --------------------编程问答--------------------

    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
--------------------编程问答-------------------- 以下类派生自datagrid,可以实现用ctrl或shift多选,通过访问MultiSelectedIndex属性获得多选的行索引的集合


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的MultiSelect = True就可以实现多选功能啊,
如果是多行选取的话,再将DataGridView的SelectionMode = DataGridViewSelectionMode.FullRowSelect。 --------------------编程问答-------------------- MultiSelect = True --------------------编程问答-------------------- MultiSelect = True
多选属性搞上就可以开工了!
SHIFT也是可以用的哦! --------------------编程问答-------------------- 我的是vs2003的版本 在datagrid的属性里没有找到MultiSelect = True --------------------编程问答-------------------- 大家伙帮帮忙啊~!刚进公司,不能叫白卷
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,