如何通过名称引用Windows窗体控件(C#/ VB)

时间:2009-07-24 17:17:41

标签: c# vb.net winforms

假设我在名为“UserName”的Windows窗体上有一个标签控件。如何使用标签名称以编程方式引用该标签?

例如我可以这样做:

For each ctrl as Control in TabPage.Controls
If ctrl.Name = "UserName" Then
' Do something
End If
Next

这似乎效率很低。我想做点什么:

TabPage.Controls("UserName").Text = "Something"

我做了一些谷歌搜索,但找不到满意的答案。大多数建议循环,有些人说.NET 2005不支持使用字符串名称直接refenece,而FindControl方法只是asp.net ...

修改

感谢目前为止的回复。这里有一些细节。

我有一个带有三个标签页面的窗体,所有这些设计和功能都非常相似,即相同的下拉菜单,标签,以类似的方式对事件做出反应等。

我没有为每个标签页的每个事件编写代码,而是构建了一个控制每个标签页的事件等的类。

例如,在每个标签页上都有一个名为“RecordCounter”的标签,它只是通过在下拉菜单中选择变量来填充数据网格视图中的行数。

所以我想要做的是,在下拉菜单中选择变量后,datagridview会自己填充数据,然后我只想显示标签中的行数(“RecordCounter”) )。

这是每个标签页上的完全相同的过程,所以我正在做的是将标签页传递给类,然后我希望能够引用“RecordCounter”然后更新它。

在我的课程中,我将ActivePage属性设置为用户选择的TabPage,然后希望能够执行以下操作:

ActivePage.RecordCounter.Text = GetNumberOfRows()

6 个答案:

答案 0 :(得分:10)

您应该可以使用Find()

TabPage.Controls.Find("UserName", false);

这将搜索所有子控件并返回与该字符串匹配的数组。如果为第二个参数指定true,它也将查看子控件的控件。

答案 1 :(得分:8)

您的控件是在设计时还是运行时添加的?

如果在设计时添加,那么您可以简单地按名称引用它:Me.UserName.Text =“Something”

如果在运行时添加它,您可以使用以下内容:

TabPage.Controls.Find("UserName", true) 

第二个参数告诉它也搜索所有孩子,所以这肯定会找到你的控制。

答案 2 :(得分:4)

除非我误解了问题背景,否则我觉得你太难​​了。在代码中,您只需使用标签名称作为参考,如:

UserName.Text = "Something"

你有什么想要完成的事情,这使得那不对吗?

答案 3 :(得分:2)

您是如何创建控件的?

如果是在设计时,那么每个控件都应该有一个命名参考。

如果您在运行时添加控件,则可以创建一个字典以包含由字符串索引的引用,并在创建该字典时将每个控件添加到该字典中。

答案 4 :(得分:0)

除了tabpage之外或代替tabpage,一种解决方案是将控件传递给类。例如,除了ActivePage属性之外,您还可以拥有RecordCounter属性。 (顺便提一下,Find对代码有效,但在运行时效率不高。)

答案 5 :(得分:0)

TabPage.Controls.Find(“UserName”,true)适合我。但是我需要将它分配给controls []类,接下来我将它分配给文本框,就像控件一样。