VB6错误371指定的对象不能用作所有者

时间:2014-11-24 10:59:06

标签: vb6

首先请原谅我,如果你认为我只是懒得在这里询问有关这个VB6错误的信息,而没有正确研究它,因为我不是(有时候),而且我有。

调度到客户端的项目在运行时立即出现此错误 - 但应用程序在这里运行正常。

显然,只有在MDI子项尝试显示表单并将其自身作为其所有者时才会出现此错误。

嗯,这很好,花花公子,但我们的应用程序不使用MDI表单。在所有。这是产生错误的代码行:

   Me.Show vbModal, Screen.ActiveForm

正如我所说,该应用程序不使用任何MDI表单,所以我对于为什么报告此错误感到困惑。

有没有人有任何想法?

由于

1 个答案:

答案 0 :(得分:0)

Screen对象的ActiveForm属性具有抽象类的类型(“Form”)。

错误消息告诉您Show方法将需要引用从Form派生的具体类的实例。这与记录一样:

  

如果您计划将Screen.ActiveForm或MDIForm.ActiveForm传递给过程,则必须使用泛型类型(As Form)而不是特定的表单类型(As MyForm)声明该过程中的参数,即使 ActiveForm 始终引用相同类型的表单。

因此,解决方法是声明所需的基于表单的类型的变量,将其设置为Screen.ActiveForm,然后在Show调用中使用该对象引用。

我们有:

Option Explicit
'
'Form1 code
'

Private Sub Command1_Click()
    Load Form2 'This is not the class Form2, but the predeclared instance named Form2.
End Sub

Option Explicit
'
'Form2 code
'

Private Sub Form_Load()
    'Use a Timer to defer the Show until after we've returned control to Form1:
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    Dim Owner As Form1 'This is the class Form1, not the predeclared instance named Form1.

    Timer1.Enabled = True
    Set Owner = Screen.ActiveForm
    Show vbModal, Owner
End Sub

似乎按照预期和记录的方式工作,但我不知道为什么有人会这样做。

为什么不首先在Form1的代码中调用Form2上的Show?