2014-09-30 152 views
0

我有一個自我創建的日曆程序,我遇到了問題。我添加了一個選擇範圍選項,它依靠一個拖動事件來選擇一個範圍。放在運行時創建的控件

如果我在設計器中創建兩個標籤,我可以將數據從一個拖到另一個,沒有任何問題。我遇到的問題是我無法拖到我在運行時創建的控件上。我可以從一個拖動,但不能拖動到一個。

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」處理程序正在添加罰款,並觸發正常。我可以將其中的一個拖放到設計器中創建的控件中。然而,「白天」和「白天」操作員似乎沒有附加,因此我不能拖到他們身上。

對任何暗示打開,

很多謝謝。

Mat。

回答

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