Vb.net 如何向其他过程传递/引用表单类参数
我有两张表格:街道和地址 我想在它们中定义一个具有相同名称的变量,这样当我从过程中调用任何一种形式时,无论调用的是哪种形式,我都可以使用该变量 例如,街道形状如下所示Vb.net 如何向其他过程传递/引用表单类参数,vb.net,forms,class,parameter-passing,Vb.net,Forms,Class,Parameter Passing,我有两张表格:街道和地址 我想在它们中定义一个具有相同名称的变量,这样当我从过程中调用任何一种形式时,无论调用的是哪种形式,我都可以使用该变量 例如,街道形状如下所示 Public Class Street Public ID As Integer = 0 Private Sub LoadForm() Dim myID As integer = ID End Sub End Class 地址表如下所示: Public Class Address Public I
Public Class Street
Public ID As Integer = 0
Private Sub LoadForm()
Dim myID As integer = ID
End Sub
End Class
地址表如下所示:
Public Class Address
Public ID As Integer = 0
Private Sub LoadForm()
Dim myID As integer = ID
End Sub
End Class
Module Caller
Public Sub Address(ByVal frm As Form)
'...several codes here
If IamHappy Then
frm.ID = 2'this is illegal because ID is not part of form parameters
Else
frm.ID = 3'this is illegal because ID is not part of form parameters
End if
frm.show()
End Sub
End Module
我的ParentMDI菜单将是:
Private Sub AddressClick()
Call Address(Address)
End Sub
Private Sub StreetClick()
Call Address(Street)
End Sub
具有打开表单过程的模块如下所示:
Public Class Address
Public ID As Integer = 0
Private Sub LoadForm()
Dim myID As integer = ID
End Sub
End Class
Module Caller
Public Sub Address(ByVal frm As Form)
'...several codes here
If IamHappy Then
frm.ID = 2'this is illegal because ID is not part of form parameters
Else
frm.ID = 3'this is illegal because ID is not part of form parameters
End if
frm.show()
End Sub
End Module
基本上,我不希望菜单做“繁重的工作”,因为表单可以从几个不同的菜单/源调用。我希望模块中的公共过程在打开之前负责为表单参数赋值
我已经看到了关于如何将类作为参数发送的讨论,但这无助于我获取表单类中声明的值“ID”。我在想,有没有一种方法可以创建我自己的变量,使其成为我表单的一部分?或任何适合实现这一目标的方法
编辑以提供更多信息
谢谢。System.Windows.Forms.Form没有ID属性。当您调用Address Sub时,您正在将
Address
和Street
表单转换回简单表单。您可以编写一个带有ID的基类表单,并从中继承地址和街道,然后:
Public Sub Address(ByVal frm As MDIChildBase)
或者您可以使用重载:
Public Sub Address(ByVal frm As Address)
Public Sub Address(ByVal frm As Street)
这将产生更多的代码,这似乎是您试图避免的
或者将frm
变量转换回类型,前提是您可以确定需要哪一个:
Public Sub Address(ByVal frm As Form)
'...several codes here
If ICanTellWhichIsWhich Then
CType(frm, Address).ID = 2
这些都不理想。一般来说,最好让一个类来管理所有这些内容,该类将实际引用所涉及的表单,并知道要做什么以及如何做。表单中的程序逻辑越少越好
但是,您似乎也在使用表单的默认实例:
Private Sub AddressClick()
Call Address(Address)
End Sub
表单是类,因此应显式实例化:
Dim frmA As New Address
...
frmA.Show
...
Call Address(frmA)
谢谢我从你的帖子中得到了一些想法,我目前正在尝试。特别是创建基类表单。我不知道如何实现重载。但是第三个建议,正确地说,是我试图避免的——我可以有很多种形式!表单基类的问题是需要编译它,以便IDE获取属性。如果一个类引用了表单
frmAddr As Address
你可以引用任何你想引用的东西,而无需特别的步骤。我正在尝试的东西撞到了一堵墙。那么我如何用一个类来实现这一点呢?我无法建立连接,因为我只知道如何创建独立于表单的类。让我更详细地解释一下我想做什么,以便你能帮上忙。ID用于检查用户是否具有打印数据的权限。如果ID=1,则表单中的打印按钮将被禁用。因此,我需要一种外部方法来在每个表单打开之前设置该ID的值。我现在使用tag,但一次只能使用一个变量,因此不灵活。