在Winforms应用程序中,请考虑以下Form类:
Public Class frmOwner
Public MyProperty As String = "Test"
Private Sub btnShowDialog_Click(sender As Object, e As EventArgs) _
Handles btnShowDialog.Click
Using frm As New frmDialog
frm.ShowDialog(Me)
End Using
End Sub
End Class
现在,每当我想MyProperty
从对话框表单中访问时,我都会使用如下代码:
MessageBox.Show(DirectCast(Me.Owner, frmOwner).MyProperty) 'Test
到目前为止,一切都很好。问题是当我有另一种形式(例如frmOwner2
)也有成员MyProperty
,同时也显示了一个实例frmDialog
。
我的问题是:如何确定frmDialog
所有者可以通过哪种形式访问其公共成员?
如果要通过对话框访问所有者的某些公共属性,但是所有者可能是不同的类,则可以选择两种不同的方法:1.类继承2.实现接口。
在这两种情况下,都强制转换为适当的父级或接口,然后调用该对象的属性名称。
另一种方法是使用反射,但在您的情况下,这将是对付小鸟的大炮。
您可以以父级形式定义所需的公共属性。然后,您使用Inherits ParentForm
指令从此父项派生其他形式。
Public Class frmOwnerBase
Protected _MyProperty1 As String
Public Property MyProperty1() As String
Get
Return _MyProperty1
End Get
Set(ByVal value As String)
_MyProperty1 = value
End Set
End Property
Protected _MyProperty2 As String
Public Property MyProperty2() As String
Get
Return _MyProperty2
End Get
Set(ByVal value As String)
_MyProperty2 = value
End Set
End Property
End Class
然后在frmOwner1.Designer.vb和frmOwner2.Designer.vb文件中,您重新编写祖先:
Partial Class frmOwner1
Inherits frmOwnerBase
Partial Class frmOwner2
Inherits frmOwnerBase
您可以在接口中定义属性的类型和名称。然后在frmOwner
和frmOwner2
类中,Implements InterfaceName
在它们的声明中应用。然后,您使用指令定义属性Public MyProperty As String Implements InterfaceName.MyProperty
Public Interface InterfaceOwner
Property MyProperty1() As String
Property MyProperty2() As String
End Interface
Public Class frmOwner
Implements InterfaceOwner
Private _MyProperty1 As String
Public Property MyProperty1() As String Implements InterfaceOwner.MyProperty1
Get
Return _MyProperty1
End Get
Set(ByVal value As String)
_MyProperty1 = value
End Set
End Property
Private _MyProperty2 As String
Public Property MyProperty2() As String Implements InterfaceOwner.MyProperty2
Get
Return _MyProperty2
End Get
Set(ByVal value As String)
_MyProperty2 = value
End Set
End Property
End Class
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句