我必须遗漏一些简单的东西,但我的大脑即将流血。
我有一个接口,为了名为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。我在某个地方是个白痴...但我知道在哪里。帮助
答案 0 :(得分:1)
Data
对象将类型用作集合中的键。所以它寻找完全匹配。
我相信您需要检查Object
中是否有Data
(即绝对是任何对象),如果有,请检索它并检查它是否支持{{1}的接口3}}