VB.NET拖放如果对象实现接口

时间:2010-09-02 19:51:15

标签: vb.net interface drag-and-drop

我必须遗漏一些简单的东西,但我的大脑即将流血。

我有一个接口,为了名为MyInterface的参数。

我有一个控件类,让我们将它命名为“Parent”,它实现了MyInterface。

我有另一个继承Parent的Control类,名为“Child”

我有一个最终的Control Class让它称之为“Container”,它接受将父项拖到它上面。

Container for Dragover中的代码很简单,如下所示:

    Protected Overrides Sub OnDragOver(ByVal e As System.Windows.Forms.DragEventArgs)
       If e.Data.GetDataPresent(GetType(Parent)) Then
           e.Effect = DragDropEffects.Move
       End If
       MyBase.OnDragOver(e)
       Refresh()
    End Sub

我想修改它不只是接受Parent,而是接受任何实现MyInterface的东西。我无法弄清楚如何让它发挥作用。

更令人困惑的是,如果我将子项拖到Container上,并使用上面的代码(检查父项是否被删除),GetDataPresent总是返回false。我认为它会起作用,因为Child继承了父母。

理想情况下,我会这样:

    Protected Overrides Sub OnDragOver(ByVal e As System.Windows.Forms.DragEventArgs)
       If e.Data.GetDataPresent(GetType(MyInterface)) Then
           e.Effect = DragDropEffects.Move
       End If
       MyBase.OnDragOver(e)
       Refresh()
   End Sub

但无论我是拖动父母还是孩子,它都会发生炸弹和GetDataPresent返回false。我在某个地方是个白痴...但我知道在哪里。帮助

1 个答案:

答案 0 :(得分:1)

Data对象将类型用作集合中的键。所以它寻找完全匹配。

我相信您需要检查Object中是否有Data(即绝对是任何对象),如果有,请检索它并检查它是否支持{{1}的接口3}}