我有自己创建的日历程序,我遇到了问题。我正在添加一个选择范围选项,该选项依赖于拖动事件来选择范围。
如果我在设计器中创建了两个标签,我可以毫无问题地将数据从一个拖到另一个。我遇到的问题是我无法拖动到我在运行时创建的控件。我可以从一个但不是一个拖动。
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”处理程序似乎没有附加,因此我无法拖拽它们。
对任何建议开放,
非常感谢。
垫。
答案 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