将文本框控件传递给私有子/函数
Posted
技术标签:
【中文标题】将文本框控件传递给私有子/函数【英文标题】:Passing text box control to private sub/function 【发布时间】:2014-11-05 17:53:01 【问题描述】:我有一系列文本框,我想在表单加载时对其进行评估,以更改表单的其他一些元素。我不想逐行处理它们,而是想创建一个函数。如何将文本框的名称传递给函数。例如:
Private Sub Form_Load()
Call SetIntialToggleValue(MyTextboxName)
End Sub
Private Sub SetIntialToggleValue(ByRef ControlName As Control)
MsgBox ControlName.Value
End Sub
这给了我 MsgBox 行上的“需要对象”错误。这让我觉得我没有正确传递文本框控件。
【问题讨论】:
【参考方案1】:如果我有足够的代表发表评论,我会要求澄清,但这里有一些想法:
如果您没有显式声明您的变量 MyTextboxName,它将是变量类型。您不能将变体传递给对象参数。这可能就足够了:
dim MyTextBoxName as Control
但在这种情况下,您根本不会使用名称。如果要使用名称,则必须更改函数。更改签名以获取一个字符串,然后将该字符串用作 Controls 集合的索引(如果 Access Forms 上有一个):
Private Sub SetIntialToggleValue(ByRef ControlName As String)
MsgBox Form.Controls(ControlName).Value
End Sub
【讨论】:
【参考方案2】:下面的内容怎么样:
Option Explicit
Dim ctl as Control
Private Sub Form_Load()
set ctl = Me.MyTextboxName
Call SetIntialToggleValue(ctl)
End Sub
Private Sub SetIntialToggleValue(ByRef ControlName As Control)
MsgBox ControlName.Value
End Sub
【讨论】:
如果您只打算使用一种方法,请不要将变量声明为全局变量...Dim
语句应该放在 Form_Load()
方法中。【参考方案3】:
我找到了答案here。你可以声明:
Private Sub SetIntialToggleValue(ByRef ControlName As MSForms.TextBox)
【讨论】:
【参考方案4】:目前,您没有传入文本框的名称。您正在传递文本框对象本身。您确实在方法中将其引用为Control
,但如果您只使用文本框,则可以将Control
替换为Textbox
。事实上,Textbox
是它自己的类型。
【讨论】:
以上是关于将文本框控件传递给私有子/函数的主要内容,如果未能解决你的问题,请参考以下文章
vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息
C#做winform时,登录系统后怎么写判断一个子窗体的文本框中输入的密码是不是与当前登录的密码一致?