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'是什么。我理解这个的原因,但不知道如何解决这个问题。是一个简单的铸造形成正确的方法来解决这个问题吗?
非常感谢。
答案 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