ListView DragEnter, DragOver, событие DragDrop не поднято (AllowDrop = True)
Это очень странно:
Мое приложение работает отлично, но внезапно проклятые события управления ListView больше не возникают. Он приходит и уходит без какой-либо ясной причины. (Очевидно) Я установил свойство AllowDrop в True и обработал события DragEnter, DragOver и DragDrop следующим образом:
Private Sub lstApplications_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragDrop, Me.DragDrop
m_fileNames = CType(e.Data.GetData(DataFormats.FileDrop), String())
mnuType.Show(Cursor.Position, ToolStripDropDownDirection.BelowLeft)
End Sub
Private Sub lstApplications_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragEnter, Me.DragEnter, lstApplications.DragOver, Me.DragOver
If chkMode.Checked OrElse Not e.Data.GetDataPresent(DataFormats.FileDrop, True) Then
e.Effect = DragDropEffects.None
Else
e.Effect = DragDropEffects.Copy
End If
End Sub
Не имеет значения, какой код я написал в этих двух методах, потому что ни одно из событий не возникает.
Есть ли что-то, что мне не хватает здесь?
Я запускаю одно и то же приложение на другом компьютере, и он работает нормально. Затем я перезапустил свою машину, и все снова заработало. Я не уверен, но, похоже, что-то не так с Windows.
Ответы
Ответ 1
У меня просто были часы страданий с аналогичной проблемой. три обязательных требования к перетаскиванию:
- Убедитесь, что ваш целевой элемент пользовательского интерфейса имеет
AllowDrop="True"
, вам не нужно это для всего приложения, просто элемент, который вы хотите включить.
- Некоторые элементы не получают определенные события мыши (включая d & d), если их фон не установлен.
Background="Transparent"
.
- Запуск любой программы с правами администратора приведет к перетаскиванию. убедитесь, что вы запускаете визуальную студию без прав администратора.
Ответ 2
У меня была эта проблема при запуске Visual Studio 2008 в Windows 7. VS2008 должен запускаться с правами администратора в Windows 7, поэтому я запускаю его как другого пользователя. Я уверен, что это предотвращает перетаскивание "n", поскольку приложение отлично работает при запуске в качестве приложения, но drag 'n' drop не будет работать при запуске из Visual Studio.
Ответ 3
Просто вспомнил, что мы действительно видели это раньше, давным-давно.
Я считаю, что это происходит следующим образом:
Перетаскивание прекрасно работает, пока какой-либо код пользователя не выдает исключение во время операции перетаскивания.
Исключение будет употреблено; вы не получите никакого диалогового окна с ошибкой (попробуйте сами и посмотрите). После этой точки перетаскивание перестанет работать.
Ответ 4
У самой формы есть свойство AllowDrop, равное true?
Ответ 5
Если вы получаете прерывистое поведение, может оказаться возможным исключение исключения из ваших обработчиков и непреднамеренное отключение перетаскивания. Попробуйте добавить защитный блок Try/Catch вокруг вашего кода и сделать Debug.Fail в блоке Catch. Это, по крайней мере, исключает возможность того, что необработанное исключение является вашей проблемой.
Ответ 6
Возможно, каким-то образом создается ваше управление. Вы уверены, что дескриптор существует и что запущен полный набор кода инициализации?
Недавно я столкнулся с аналогичной проблемой, когда Control.OnHandleCreated не запускался из-за ошибки, которую я сделал, и это привело к возникновению всех видов плохой ситуации, включая то, что вы здесь описываете.
Ответ 7
Вы пытались удалить заглушки обработчика метода, перекомпилировать, а затем снова отложить его и скомпилировать? Я знаю, это звучит дурацко, но были времена, когда мне просто нужно было reset мои рабочие копии.
Ответ 8
Этот пост был для меня ответом:
С# Перемещение перетаскивания не работает в Windows 7