2012-03-21 77 views
1

我有一個安裝在表單中的控件。我需要實現一個回調,以便該控件可以使父窗體執行某些操作。我的計劃是用MustOverride方法創建一個MustInherit類,並使窗體繼承MustInherit類。但是,Visual Basic告訴我,表單不能繼承多個類,這意味着它可以繼承我的MustInherit類或System.Windows.Forms.Form,但不能同時繼承這兩個類。Visual Basic:強制執行某些方法的表單

我希望能夠做這樣的事情在我的控制下:

private Parent as iRiksProjectParent 

public sub AttachParent(ByRef parent as iRiksProjectParent) 
    Parent = parent 
End Sub 

...

private sub ProcessData() 
    dim theProcessedData as String 
    ... 
    parent.DoSomethingWithTheData(theProcessedData) 
End Sub 

我怎樣才能做到這一點?

回答

3

要直接回答你的問題:你可以讓你的MustInherit類繼承System.Windows.Forms.Form。然後,如果您的Form從您的自定義類繼承,它將自動繼承System.Windows.Forms.Form


解決你的問題:不要使用明確的回調。只要有您的自定義控制引發事件:

Public Event DoSomethingWithTheData(processedData As String) 

Private Sub ProcessData() 
    Dim theProcessedData as String 
    ... 
    RaiseEvent DoSomethingWithTheData(theProcessedData) 
End Sub 

這樣一來,該表格可以簡單地處理事件:

Private Sub myCustomControl_DoSomethingWithTheData(processedData As String) _ 
    Handles myCustomControl.DoSomethingWithTheData 

    ... 
End Sub 
+1

事件是肯定要走的路。如果你需要你的控件有一個特定的事件,那麼你可以讓它實現一個接口 - 當你認爲你想要多繼承時,這通常是你想要的。 – 2012-03-21 14:08:55

+0

太棒了,就是這份工作! – RikSaunderson 2012-03-21 15:32:32