【问题标题】:Error "Function or interface marked as restricted, or the function uses an Automation type not supported" assigning a form object分配表单对象时出现错误“函数或接口标记为受限,或函数使用不支持的自动化类型”
【发布时间】: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 中引发事件。事件处理程序做它需要做的事情,甚至可以通过事件参数/参数“返回”数据,如果需要的话。

标签: forms vb6


【解决方案1】:

Set 是您在处理对象引用时需要的东西,所以它应该是:

Dim CalledFromFormInstanceFrm As Form1

Public Property Set CalledFromFormInstance(oValue As Form1) '//set
    Set CalledFromFormInstanceFrm = oValue '//set
End Property 

称为:

Dim NewFrm As New Form2
Set NewFrm.CalledFromFormInstance = Me '// set
NewFrm.Show

还请注意,您尝试使用私有变量:NewFrm.CalledFromFormInstanceFrm = Me,而不是公共属性 NewFrm.CalledFromFormInstance

【讨论】:

  • Gordon Bennett - 这真是一种享受!我忘记了我必须在 VB6 中设置所有内容,老实说,我从未尝试在 VB6 中正确使用 OOP,我总是最终使用 Form1.whateveritis 而无需创建它,但自从发现它之后,.NET 我已经弹出了所有表单在这个地方大声笑 - 这是一个救生员 - 我希望我在 3 小时前问过这个问题,这样可以节省一些时间!谢谢布莱恩,谢谢亚历克斯——两位明星! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多