VB.NET WinForms实现了一个接口

时间:2015-12-05 02:35:25

标签: vb.net winforms interface

VB.NET

我想要一些WinForms来实现一个接口,并且能够将这些接口传递给一个可以“看到”已实现的属性以及Form的“标准方法”的过程。这就是我到目前为止......

Public Interface IMyInterface

    Property MyProperty As String

End Interface

Public Class MyForm

    Implements IMyInterface

    Private _MyProperty As String

    Public Property MyProperty() As String Implements IMyInterface.MyProperty
    Get
        Return _MyProperty
    End Get
    Set(ByVal value As String)
        _MyProperty = value
    End Set

End Property

End Class

然后,在其他地方,我的方法如下......

Public Sub DoSomething(MyForm As IMyInterface)

    MyForm.MyProperty = "x"
    MyForm.ShowDialog()

End Sub

显而易见的问题是编译器不知道.ShowDialog是什么,如果我将表单作为'MyForm As Form'传递,它不知道'MyProperty'是什么。我理解这个的原因,但不知道如何解决这个问题。是一个简单的铸造形成正确的方法来解决这个问题吗?

非常感谢。

2 个答案:

答案 0 :(得分:0)

您需要继承System.Windows.Forms.Form才能获得所有常规表单功能,然后实施IMyInterface

Public Class MyForm
    Inherits System.Windows.Forms.Form
    Implements IMyInterface

MyForm As IMyInterface传递到DoSomething()方法很好,但要使用您需要投射它的常规表单方法。或者,您可以传递Form然后转换为您选择的IMyInterface

Public Sub DoSomething(MyIForm As IMyInterface)
        MyIForm.MyProperty = "x"

        Dim MyForm As Form = TryCast(MyIForm, Form)
        MyForm.ShowDialog()

答案 1 :(得分:0)

另一个aproach可以使用你自己的基类

Public Class MyBaseForm
    Inherits System.Windows.Forms.Form

    Public Property MyProperty As String

End Class

然后所有表单都可以继承该基本表单

Public Class MyForm
    Inherits MyBaseForm

End Class

您可以使用System.Windows.Forms.Form的属性和标准方法而无需投射

Public Sub DoSomething(someform As MyForm)
    someform.MyProperty = "Some value"
    someform.ShowDialog()
End Sub