vb.net动态写入listbox,动态添加事件,实现拖拽

根据月份。每天画一个listbox和label,并且为listbox添加事件

Private Sub DrawingPage()

        Try
            'listbox大小
            Dim s As Size
            s.Width = 120
            s.Height = 88


            '获取当月天数
            Dim days As Integer = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)
            '当前时间
            Dim datestr As Date = Now()


            For i As Integer = 1 To days
                'listbox
                Dim list As New ListBox
                'listbox
                Dim label As New Label
                'listbox x轴
                Dim x As Integer
                'listbox y轴
                Dim y As Integer
                'listbox y轴行数
                Dim yIndex As Integer
                'label x轴
                Dim lx As Integer
                'label y轴
                Dim ly As Integer
                '当月第i天
                Dim sday As Date = Year(datestr) & "-" & Month(datestr) & "-" & i
                '第i天周几
                Dim Week As String = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(sday.DayOfWeek)
                '求x轴坐标
                Select Case Week
                    Case "星期日"
                        x = 7
                        lx = 47
                    Case "星期一"
                        x = 133
                        lx = 173
                    Case "星期二"
                        x = 259
                        lx = 299
                    Case "星期三"
                        x = 385
                        lx = 425
                    Case "星期四"
                        x = 511
                        lx = 551
                    Case "星期五"
                        x = 637
                        lx = 677
                    Case "星期六"
                        x = 763
                        lx = 803
                End Select
                '求y轴坐标
                Dim nowDay As Date = Year(datestr) & "-" & Month(datestr) & "-1"
                Dim sWeek As String = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(nowDay.DayOfWeek)
                Select Case sWeek
                    Case "星期日"
                        yIndex = 7
                    Case "星期一"
                        yIndex = 6
                    Case "星期二"
                        yIndex = 5
                    Case "星期三"
                        yIndex = 4
                    Case "星期四"
                        yIndex = 3
                    Case "星期五"
                        yIndex = 2
                    Case "星期六"
                        yIndex = 1
                End Select


                If i <= yIndex Then
                    y = 30
                    ly = 121
                ElseIf i <= yIndex + 7 Then
                    y = 157
                    ly = 248
                ElseIf i <= yIndex + 14 Then
                    y = 284
                    ly = 375
                ElseIf i <= yIndex + 21 Then
                    y = 411
                    ly = 502
                Else
                    y = 538
                    ly = 629
                End If


                list.Location = New System.Drawing.Point(x, y)
                list.Name = Format(sday, "yyyy-MM-dd")
                list.Size = s
                list.Visible = True
                list.AllowDrop = True
                Me.Controls.Add(list)
                AddHandler list.MouseDown, AddressOf ListBox_MouseDown
                AddHandler list.DragEnter, AddressOf ListBox_DragEnter
                AddHandler list.DragDrop, AddressOf ListBox_DragDrop


                label.Location = New System.Drawing.Point(lx, ly)
                label.Name = "label" & Format(sday, "yyyy-MM-dd")
                label.Text = Format(sday, "yyyy-MM-dd")
                label.Size = New Label().Size
                label.Visible = True
                Me.Controls.Add(label)

            Next


        Catch ex As Exception


        End Try

    End Sub

实现拖拽的三个方法

 Private Sub ListBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim ListBox As ListBox = CType(sender, ListBox) '获取当前操作的控件对象,只有这样才能对该控件进行操作  
        Dim DragIndex As Integer = ListBox.IndexFromPoint(e.X, e.Y)
        If DragIndex <> ListBox.NoMatches Then
            ListBox.SelectedIndex = DragIndex
            If e.Button = Windows.Forms.MouseButtons.Left Then
                DoDragDrop(ListBox.Items(DragIndex), DragDropEffects.Copy)
                ListBox.Items.Remove(ListBox.Items(DragIndex))
            ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
                '    DoDragDrop(ListBox1.Items(DragIndex), DragDropEffects.Move)
            End If
        End If
    End Sub
    Private Sub ListBox_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
        e.Effect = e.AllowedEffect
    End Sub
    Private Sub ListBox_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
        Dim ListBox As ListBox = CType(sender, ListBox) '获取当前操作的控件对象,只有这样才能对该控件进行操作  
        Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object)
        Dim item2 As Integer = ListBox.IndexFromPoint(ListBox.PointToClient(New Point(e.X, e.Y)))
        If item2 = -1 Then
            ListBox.Items.Add(item)
        Else
            ListBox.Items.Insert(item2, item)
        End If
        'If e.AllowedEffect = DragDropEffects.Move Then
        ' ListBox1.Items.Remove(item)
        'End If
    End Sub


写入数据的方法。删掉了读取数据库的部分

 For i As Integer = 0 To rst.RecordCount - 1
                    For Each ctrl As Control In Me.Controls
                        Dim yjdg As String = “这里是listbox的name属性,本文里就是日期)”
                        Dim zwcmHc As String =“显示的内容”
                        If ctrl.Name.Equals(yjdg) Then
                            Dim li As ListBox = CType(ctrl, ListBox)
                            li.Items.Add(zwcmHc)
                        End If
                    Next
                    rst.MoveNext()
                Next

你可能感兴趣的:(VB.net)