Ну, название довольно хорошо описывает мою проблему. Вот чуть более подробное описание моей проблемы:
Я создаю приложение с помощью TabControl, которое я заполняю во время выполнения с помощью TabPages. В моей первой версии кода эти TabPages были заполнены дочерним ListView. ListView также был создан в коде, используя AddHandlers, чтобы связать его с процедурами DragEnter и DragDrop. Все работало очень хорошо ...
Теперь, когда мне нужны некоторые другие элементы управления на каждой вкладке TabPage, вместо того, чтобы создавать каждый отдельный элемент управления в коде, я создал UserControl, содержащий ListView и несколько кнопок, которые я создаю для каждой новой вкладки TabPage.
Проблема теперь в том, что событие DragDrop больше не вызывается
DragEnter
событие -> повышено OK
DragOver
событие -> повышено OK
DragLeave
событие -> повышено OK
DragDrop
событие -> не возбуждено !!
Эта проблема сводит меня с ума: есть мысли о том, чего мне не хватает?
Не думаю, что код поможет, но отвечу на первый комментарий:
Первая версия: элементы управления, созданные в коде (работает):
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()
Вторая версия: Usercontrol (не работает):
Сначала представим пользовательский элемент управления 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
кода класса у меня есть:
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
выполняются, когда я вхожу в ListView с текстом, но затем, когда я отпускаю мышь, событие AnnonceListView_DragDrop
никогда не возникает.