我有 20 多个具有一致命名公共变量的 MDI 表单。当子窗体关闭 MDI Parent 上的方法时,称为将 Me 作为通用窗体类型传递。如何通过表单引用按名称访问公共变量?我只需要读取变量。当然 Variables() 方法不存在...
Public Sub CleanupForm(ByVal frm As Form)
Dim sTable_Name As String = frm.Variables("TABLE_NAME") ' Public at form level
Dim cLock As clsRecLocks
cLock = frm.Variables("Rec_Lock")
cLock.DeleteThisLock()
'..
我看过一些关于类似请求的帖子,但大多数都是从“不要那样做......”开始的,然后在杂草中没有回答这个问题。我承认这是糟糕的设计。我不能在短期内改变所有的调用形式,所以我需要使用这种方法。
VS2010, VB.Net, Win Forms, .Net 2.0
我能够使用 CallByName 获得一个简单的变量:
Try
Dim s As String = CallByName(frm, "TABLE_NAME", CallType.Get)
Stop
Catch ex As Exception
MsgBox(ex.Message)
End Try
到类对象。也许我可以为返回我需要的 ID 的类添加一个默认的 Get。
默认属性将不起作用,因为 Locks 对象未声明为 Public - 至少对于 CallByName() 方法。
反射可以形成未声明为公共的级别变量吗?似乎是一个安全问题,但...
我可以在实例化的 Locks 类中获得“父”引用吗?即对建立 Locks 对象的表单的引用?我可以更改 clsRecLocks() 类。
我找到了一个可以访问的属性,告诉我该表单是“只读的”,我可以使用该消息删除正确的(或更正确的 - 仍然不是 100%)锁定记录。因此,该错误已修复 90%。我想我需要使用记录我需要达到 100% 的信息的代码来更新所有表单。
谢谢大家!