使用时出错 Text1.SetFocus 错误是 无效的过程调用或参数
答案 0 :(得分:1)
如果您是从模块调用它,而不是从表单代码调用它,则需要引用text1所在的表单对象。 你可能需要做的另一件事就是获得一些持久性药丸,更频繁地点击F1并在寻求帮助时大量使用单词。
答案 1 :(得分:0)
您需要从Form_Activate引用Text1.SetFocus而不从Form_Load引用 -
http://www.vb6.us/tutorials/understanding-forms-vb6-tutorial
Form_Load与Form_Activate
在Form_Load事件中,您通常会执行初始化类型的任务。但是,由于表单仅在Load事件完成后才完全加载,因此无法在Load事件中执行某些类型的操作。首先,在Load事件中完成后,打印到表单将不起作用。此外,如果您尝试在Load事件期间将焦点设置到窗体上的特定控件,您将收到消息运行时错误“5”:无效的过程调用或参数。例如,假设您在表单上有一个名为Text1的文本框。以下代码将导致该错误:
Private Sub Form_Load()
' other initialization stuff
Text1.SetFocus ' causes an error
End Sub
错误的原因是,由于表单未完全加载,因此它上面没有任何控件 - 并且您无法将焦点设置为尚不可用的控件。 要解决此问题,您应该使用其他Form事件之一,例如Activate事件。 (当VB加载表单时,它实际上会循环执行许多事件,例如:Initialize,Load,Resize,Activate,GotFocus和Paint。其中,Load和Activate可能是最常用的。)放置代码将焦点设置为控件将在Form_Activate事件中起作用:
Private Sub Form_Activate()
' other statements
Text1.SetFocus ' no problem here
End Sub
关于activate事件的警告:只要您的应用程序切换到该表单,它就会触发。例如,如果在Form1和Form2之间来回切换,请注意当切换到该表单时,将在执行这些表单的Activate事件时可能具有的任何代码。因此,如果激活事件中的代码只是“第一次”执行,则需要使用布尔值开关控制执行。例如,在表单的“常规声明”中,您可以定义以下变量:
Private mblnFormActivated As Boolean ' will be initialized to False by default
然后您可以在Activate事件中使用此开关,如下所示:
Private Sub Form_Activate()
If mblnFormActivated Then Exit Sub
' statements you only want to execute once, including the following
' statement to turn the switch on:
mblnFormActivated = True
End Sub