我必須錯過簡單的東西,但我的大腦即將流血。VB.NET拖放如果對象實現接口
我有一個接口,爲了名爲MyInterface的參數。
我有一個控件類,讓它命名爲實現MyInterface的「Parent」。
我還有一個控制類,它繼承父,叫「孩子」
我有一個最終控制類可稱之爲「容器」,即接受拖動父到它。
爲的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
我要修改此並不是只接受家長,但接受任何實現MyInterface的。我無法弄清楚它是如何得到它的工作。
更令人困惑的是,如果我將上述代碼拖到Container上,並且代碼如上所示(檢查Parent是否被刪除),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我是否拖了家長或孩子。我在某個地方是個白癡......但我知道在哪裏。幫幫我?
啊,我不知道它是這樣工作的。我一直認爲它在內部做了一些類似TryCast的檢查,反對查找。很高興知道。是的,檢查對象是很容易的,但我會去得到簡單的對象嗎? GetData()需要一個類型,並將MyInterface或者System.Object傳遞給它,它不會返回任何內容。我試過它:e.Data.GetData(GetType(MyInterface)) – instantmusic 2010-09-02 20:31:59
@instantmusic爲了得到一個普通的對象,你需要在第一個地方放置一個普通的對象:)'DataObject.SetData(GetType(Object),your_object) ' – GSerg 2010-09-02 20:55:32
關閉,但沒有雪茄(除非我不明白)。 SetData只是改變了e.Data中的數據,但我已經在其他地方從DoDragDrop獲得了信息。 GetData雖然總是不會返回任何東西,除非我告訴它確切的類型來接收,我自然不想做,因爲我正在檢查MyInterface而不是類型。 果然,拖放信息正在進入子。 – instantmusic 2010-09-02 21:17:10