2012-03-21 51 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