Событие ListView DragEnter, DragOver, DragDrop не вызывается (AllowDrop = True) - PullRequest
11 голосов
/ 17 февраля 2009

Это очень странно:

Мое приложение работает нормально, но внезапно события проклятого элемента управления 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.

Ответы [ 8 ]

8 голосов
/ 06 мая 2015

У меня только что были часы страданий с подобной проблемой. три обязательных требования для перетаскивания на работу:

  1. Убедитесь, что у целевого элемента пользовательского интерфейса есть AllowDrop="True", вам не нужно это для всего приложения, просто элемент, который вы хотите включить.
  2. Некоторые элементы не получают определенные события мыши (включая d & d), если их фон не установлен. Background="Transparent" сделает.
  3. Запуск любой программы с правами администратора приведет к путанице. убедитесь, что вы запускаете Visual Studio без прав администратора .
4 голосов
/ 06 августа 2009

У меня была эта проблема при запуске Visual Studio 2008 в Windows 7. VS2008 должен работать с правами администратора в Windows 7, поэтому я запускаю его как другой пользователь. Я почти уверен, что это препятствует работе drag 'n' drop, поскольку приложение работает нормально, когда запускается как приложение, но перетаскивание 'n' не будет работать при запуске из Visual Studio.

3 голосов
/ 18 февраля 2009

Только что вспомнил, что мы действительно видели это раньше, давным-давно.

Я считаю, что это происходит так:

Функция перетаскивания работает нормально, пока какой-либо пользовательский код не вызывает исключение во время операции перетаскивания.

Исключение будет съедено; вы не получите никакого сообщения об ошибке (попробуйте сами и посмотрите). После этой точки перетаскивание перестанет работать.

1 голос
/ 24 апреля 2009

Вполне возможно, что создание вашего элемента управления каким-то образом обмануто. Вы уверены, что дескриптор существует и что полный набор кода инициализации уже запущен?

Недавно я столкнулся с подобной проблемой, когда Control.OnHandleCreated не запускался из-за ошибки, которую я допустил, и это привело ко всем видам ошибок, включая то, что вы здесь описываете.

1 голос
/ 17 февраля 2009

Если вы получаете прерывистое поведение, возможно, исключение ускользает от ваших обработчиков и непреднамеренно отключает перетаскивание. Попробуйте добавить общий блок Try / Catch вокруг вашего кода и выполните команду Debug.Fail в блоке Catch. Это по крайней мере исключит возможность того, что необработанное исключение станет вашей проблемой.

1 голос
/ 17 февраля 2009

Есть ли у формы свойство AllowDrop, установленное в true?

0 голосов
/ 31 октября 2010

Этот пост был ответом для меня: C # Перетаскивание не работает в Windows 7

0 голосов
/ 17 февраля 2009

Вы пытались удалить заглушки обработчика метода, перекомпилировать, затем вернуть их обратно и снова скомпилировать? Я знаю, это звучит странно, но были времена, когда мне просто нужно было сбросить мои рабочие копии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...