【发布时间】:2018-10-19 14:40:54
【问题描述】:
我有两种表格:Form1 和 Form2
Form1 创建 Form2 的一个新实例:
Dim NewFrm as new Form2
Newfrm.show
我需要从 NewFrm (Form2) 更新或调用 sub 到调用表单 Form1。
我已经尝试在 Form2 中创建一个 Property Let:
Dim CalledFromFormInstanceFrm as Form1
Public Property Let CalledFromFormInstance(oValue As Form1)
CalledFromFormInstanceFrm = oValue
End Property
所以,我现在在 Form1 中做
Dim NewFrm as New Form2
NewFrm.CalledFromFormInstanceFrm=Me
NewFrm.Show
当它到达表单中的公共属性时,它可以工作 - 但 CalledFromFormInstanceFrm 失败并出现错误:
函数或接口被标记为受限,或者函数使用了 Visual Basic 不支持的自动化类型。
谷歌搜索,错误似乎指向人们在 VB6 中使用其他 3rd 方 ActiveX 而不是表单。
我也尝试将 Property Let 更改为
Public Property Let CalledFromFormInstance(oValue As Form)
并将声明更改为
Dim CalledFromFormInstanceFrm as Form
以防万一它不喜欢 Form 的细节并接受 Form 对象。
我被卡住了 - 虽然第一个 Property Let 允许我使用它,所以我认为它可能在 VB6 中被允许,我只是不确定我应该使用的语法 - .net 中的等价物可以正常工作但.net 距离 VB6 的改进语言还差一百万英里。
有什么想法吗?
【问题讨论】:
-
尝试将您的属性更改为
Property Set,因为您正在处理对象。同样,在属性本身和主窗体上使用Set关键字。 -
不解决直接问题,但“回调”到 Form1 的另一种方法是在 Form2 上定义一个事件,为 Form2 添加一个匹配的事件处理程序到 Form1,然后在 Form2 中引发事件。事件处理程序做它需要做的事情,甚至可以通过事件参数/参数“返回”数据,如果需要的话。