那么标题很好地描述了我的问题。这里是我的问题一点点更详细的描述: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