放到运行时创建的控件上

时间:2014-09-30 09:24:01

标签: vb.net drag-and-drop

我有自己创建的日历程序,我遇到了问题。我正在添加一个选择范围选项,该选项依赖于拖动事件来选择范围。

如果我在设计器中创建了两个标签,我可以毫无问题地将数据从一个拖到另一个。我遇到的问题是我无法拖动到我在运行时创建的控件。我可以从一个但不是一个拖动。

Private Sub SetupMonths()
    Dim dayNo As Integer

    For monthNo As Integer = 0 To 11
        grpMonth(monthNo) = New GroupBox
        grpMonth(monthNo).Text = MonthName(monthNo + 1)
        Me.pnlCalendar.Controls.Add(grpMonth(monthNo))
        For dayY = 0 To 4
            For dayX = 0 To 6
                dayNo = dayX + dayY * 7
                lblDay(monthNo, dayNo) = New Label
                lblDay(monthNo, dayNo).Font = Me.lblDayFont.Font
                lblDay(monthNo, dayNo).Text = dayNo
                lblDay(monthNo, dayNo).BorderStyle = BorderStyle.FixedSingle
                grpMonth(monthNo).Controls.Add(lblDay(monthNo, dayNo))

                AddHandler lblDay(monthNo, dayNo).MouseDown, AddressOf DayDrag
                AddHandler lblDay(monthNo, dayNo).DragOver, AddressOf DayOver
                AddHandler lblDay(monthNo, dayNo).DragDrop, AddressOf DayDrop

            Next
        Next
    Next
End Sub


Private Sub DayDrag(ByVal sender As Label, ByVal e As System.Windows.Forms.MouseEventArgs)
    Debug.WriteLine("Start draging " & dayDragFrom)
    sender.DoDragDrop(sender.Tag, DragDropEffects.Copy)
    Debug.WriteLine("End")
End Sub
Private Sub DayOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
    Debug.WriteLine("Over")
    If (e.Data.GetDataPresent(DataFormats.Text)) Then
        e.Effect = DragDropEffects.Copy
    Else
        e.Effect = DragDropEffects.None
    End If
End Sub
Private Sub DayDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
    Debug.WriteLine("Drop")
    ' More code will go here
End Sub

“DayDrag”处理程序正在添加正常,并且触发正常。我可以从其中一个拖动到设计器中创建的控件。然而,“Day Over”和“Day Drop”处理程序似乎没有附加,因此我无法拖拽它们。

对任何建议开放,

非常感谢。

垫。

1 个答案:

答案 0 :(得分:1)

这可能会更好,但我没有足够的代表。

您是否尝试过将AllowDrop属性设置为True?

lblDay(monthNo, dayNo) = New Label
lblDay(monthNo, dayNo).AllowDrop = True
...

它标记一个控件是否可以接受拖到它上面的数据,所以如果它是假的,这可能就是你的鼠标处理程序工作但你的拖动处理程序没有的原因。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.allowdrop%28v=vs.110%29.aspx

http://msdn.microsoft.com/en-us/library/aa984430%28v=vs.71%29.aspx