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 мои рабочие копии.