首先请原谅我,如果你认为我只是懒得在这里询问有关这个VB6错误的信息,而没有正确研究它,因为我不是(有时候),而且我有。
调度到客户端的项目在运行时立即出现此错误 - 但应用程序在这里运行正常。
显然,只有在MDI子项尝试显示表单并将其自身作为其所有者时才会出现此错误。
嗯,这很好,花花公子,但我们的应用程序不使用MDI表单。在所有。这是产生错误的代码行:
Me.Show vbModal, Screen.ActiveForm
正如我所说,该应用程序不使用任何MDI表单,所以我对于为什么报告此错误感到困惑。
有没有人有任何想法?
由于
答案 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?