2009-02-17 59 views
11

这是一个非常奇怪: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?

+0

是的。奇怪的是,它有一段时间的工作,但突然中断。 – TheAgent 2009-02-17 15:03:10

+0

是什么东西可能会改变你的代码中某处AllowDrop的价值? – 2009-02-17 15:07:48

+0

我查过了。属性值为True且完好无损。 – TheAgent 2009-02-19 09:58:57

0

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

1

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

3

只记得我们很久以前就已经见过这个了。

我相信它会发生这样的:直到一些用户代码拖拽过程中抛出一个异常和拖放操作

拖放工作正常。

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

+0

即使关闭了应用程序并重新运行,它也没有开始工作。我不认为这是关于抛出异常。但我不确定。 – TheAgent 2009-02-19 09:58:07

1

您的控件的创建有可能以某种方式消失。你确定句柄存在吗,并且全套的初始化代码已经运行?

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

+1

+1我刚纠正了一个相同症状的错误,即拖放停止工作。原来我重写了OnHandleCreated,但未能调用基本实现。这也有DragEnter事件转到父控件的奇怪效果。 – 2009-07-03 17:50:37

4

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

8

我只是有苦难小时了类似的问题。对于拖放三个强制性要求的工作:

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