那麼標題很好地描述了我的問題。這裏是我的問題一點點更詳細的描述:DragDrop事件不在用戶控件內的對象上觸發(但DragEnter確實)
我正在建立一個TabControl的應用程序,我在執行時用TabPages填充。在我的代碼的第一個版本中,這些TabPages填充了一個子ListView。 ListView也是在代碼中創建的,使用AddHandlers將其鏈接到DragEnter和DragDrop例程。一切工作非常好...
現在,當我需要一些其他控件上的每個TabPage的,而不是在代碼中創建的每一個控制,我創建了一個包含ListView和幾個按鈕,我實例化每一個新的一個用戶控件TabPage的。
現在的問題是,DragDrop事件不再被提出
DragEnter
事件 - >引發OKDragOver
事件 - >引發OKDragLeave
事件 - >引發OKDragDrop
事件 - >沒有提出!
這個問題讓我發瘋了:什麼可能會錯過我的任何想法?
我不認爲代碼將是任何幫助,但要回答第一個評論: 第一版:控制在代碼中創建(工程):
Dim NewTab As New TabPage(TextBox1.Text)
Dim NewListView As New ListView()
Dim NewImageList As New ImageList()
'Organise les nouveaux contrôles
NewListView.Parent = NewTab
NewListView.Dock = DockStyle.Fill
NewListView.View = View.LargeIcon
NewListView.LargeImageList = NewImageList
NewListView.AllowDrop = True
AddHandler NewListView.DoubleClick, AddressOf ListViewItem_DblClick
AddHandler NewListView.DragEnter, AddressOf ListViewItem_DragEnter
AddHandler NewListView.DragDrop, AddressOf ListViewItem_DragDrop
TabControl1.TabPages.Add(NewTab)
TabControl1.SelectTab(NewTab)
NewImageList.ImageSize = New Size(100, 100)
NewImageList.ColorDepth = ColorDepth.Depth24Bit
TabControl1.Refresh()
第二個版本:用戶控件(不工作): 首先,設想一個用戶控件TabAnnoncesContent
,其中包含一個AnnoncesListView
和AnnoncesImageList
Dim NewTab As New TabPage(TextBox1.Text)
Dim NewTabContent As New TabAnnoncesContent()
NewTabContent.Parent = NewTab
NewTabContent.Dock = DockStyle.Fill
TabControl1.TabPages.Add(NewTab)
TabControl1.SelectTab(NewTab)
TabControl1.Refresh()
內。然後我TabAnnoncesContent
類代碼我:當我進入的ListView文本
Private Sub AnnoncesListView_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles AnnoncesListView.DragDrop
Dim selection As ListViewItem = sender.HitTest(sender.PointToClient(New Point(e.X, e.Y))).Item
If (selection IsNot Nothing) Then
MsgBox("D&D received -> " & e.Data.GetData(DataFormats.Text))
End If
End Sub
Private Sub AnnoncesListView_DragEnter(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles AnnoncesListView.DragEnter
If (e.Data.GetDataPresent(DataFormats.Text)) Then
' Display the copy cursor.
e.Effect = DragDropEffects.Link
Else
' Display the no-drop cursor.
e.Effect = DragDropEffects.None
End If
End Sub
的AnnonceListView_DragEnter
程序執行,但後來當我鬆開鼠標,該AnnonceListView_DragDrop
事件從未提出。
診斷「不起作用!」是不可能的像這樣的問題。發佈代碼片段。 – 2012-02-12 15:05:43
我已經按要求添加了代碼,但我非常懷疑它會提供任何幫助(標準拖放代碼)。我期待着更多像AllowDrop屬性需要被設置爲True,並在那裏或其他東西... – Federico 2012-02-12 15:20:09
在輸出窗口中查找「第一次機會異常」通知。調試+異常,勾選拋出框爲CLR異常,使調試器停止。 HitTest代碼將會拋出它們。 – 2012-02-12 15:48:03