11

这个很奇怪:

我的应用程序工作得很好,但是突然间该死的 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 似乎有问题。

4

7 回答 7

8

我刚刚经历了几个小时的痛苦,遇到了类似的问题。拖放工作的三个强制性要求:

  1. 确保您的目标 UI 元素具有AllowDrop="True",整个应用程序不需要它,只需要您想要启用的元素。
  2. 如果未设置其背景,则某些元素不会接收某些鼠标事件(包括 d&d)。Background="Transparent"会做。
  3. 以管理员权限运行任何程序都会弄乱拖放。确保在没有管理员权限的情况下启动 Visual Studio 。
于 2015-05-06T04:12:06.627 回答
4

我在 Windows 7 上运行 Visual Studio 2008 时遇到了这个问题。VS2008 必须在 Windows 7 上以管理员权限运行,所以我以不同的用户身份运行它。我很确定这可以防止拖放工作,因为应用程序在作为应用程序运行时运行良好,但从 Visual Studio 运行时拖放将不起作用。

于 2009-08-06T10:26:10.693 回答
3

只是记得我们确实在很久以前见过这个。

我相信它是这样发生的:

拖放工作正常,直到某些用户代码在拖放操作期间引发异常。

异常会被吃掉;你不会得到任何错误对话框(你自己试试看)。在此之后,拖放将停止工作。

于 2009-02-17T23:00:41.523 回答
1

表单本身的 AllowDrop 属性是否设置为 true?

于 2009-02-17T15:00:55.470 回答
1

如果您遇到间歇性行为,则可能是异常正在从您的处理程序中逃逸并且无意中断开拖放。尝试在代码周围添加一个全面的 Try/Catch 块,并在 Catch 块中执行 Debug.Fail。这至少可以排除未处理的异常是您的问题的可能性。

于 2009-02-17T15:20:08.497 回答
1

不知何故,您的控件的创建可能被修改了。您确定句柄存在并且完整的初始化代码集已经运行吗?

我最近遇到了一个类似的问题,由于我犯了一个错误,Control.OnHandleCreated 没有运行,这导致了各种不良情况,包括您在此处描述的内容。

于 2009-04-24T19:15:40.847 回答
0

您是否尝试过删除方法处理程序存根,重新编译,然后将它们放回去并再次编译?我知道这听起来很古怪,但有时我只需要重置我的工作副本。

于 2009-02-17T15:12:18.047 回答