ListView的DragEnter,DragOver,DragDrop事件未引发(AllowDrop = True)

时间:2009-02-17 14:57:27

标签: .net winforms listview drag-and-drop events

这个很奇怪:

我的应用程序运行正常,但突然之间该死的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 个答案:

答案 0 :(得分:8)

我只是因为类似的问题而痛苦了几个小时。拖放工作的三个强制性要求:

  1. 确保目标UI元素为AllowDrop="True",整个应用程序不需要这个,只需要启用的元素。
  2. 如果未设置背景,某些元素不会收到某些鼠标事件(包括d& d)。 Background="Transparent"会这样做。
  3. 使用管理员权限运行任何程序都会拖延拖放。确保启动visual studio 没有管理员权限

答案 1 :(得分:4)

我在Windows 7上运行Visual Studio 2008时遇到此问题.VS2008必须在Windows 7上以管理员权限运行,因此我将其作为其他用户运行。我很确定这会阻止拖放工作,因为应用程序在作为应用程序运行时运行正常,但是从Visual Studio运行时拖放'n'不起作用。

答案 2 :(得分:3)

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

我相信它是这样的:

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

有可能某种程度上你的控件的创建被激活了。您确定句柄是否存在以及是否已运行完整的初始化代码集?

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

这篇文章是我的答案: C# Drag drop does not work on windows 7

相关问题