无效的过程调用或参数

时间:2010-11-26 10:44:31

标签: vb.net winforms

使用时出错 Text1.SetFocus 错误是 无效的过程调用或参数

2 个答案:

答案 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