Ну, название довольно хорошо описывает мою проблему. Вот немного более подробное описание моей проблемы:Событие DragDrop не запускается на объекте внутри usercontrol (но DragEnter делает)
Я создаю приложение с TabControl, которое я заполняю во время выполнения TabPages. В моей первой версии кода эти вкладки были заполнены списком ListView. ListView также был создан в коде, используя AddHandlers, чтобы связать его с процедурами DragEnter и DragDrop. Все работало очень хорошо ...
Теперь, когда мне нужно какие-то другие элементы управления на каждой вкладке, вместо создания каждого элемента управления в коде, я создал 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
событие никогда не поднимается.
Невозможно диагностировать «это не работает!» такие вопросы. Отправьте фрагмент кода. –
Я добавил код в соответствии с запросом, но я очень сомневаюсь, что это будет любая помощь (стандартный код перетаскивания). Я ожидал чего-то большего, чем свойство AllowDrop должно быть установлено True здесь и False там или что-то еще ... – Federico
Посмотрите в окне «Вывод» для уведомлений «First chance exception». Отладка + Исключения, поставьте галочку в поле «Бросок» для исключений CLR, чтобы остановить отладчик. Код HitTest собирается их бросить. –