2010-10-08 69 views
1

我在窗体Visual Basic 2010的Windows上有几组相似的对象(标签,进度条)。在我的代码中,我有包含数据的集合,需要将它们推送到每个的值/文本属性中。在Visual Basic 2010中使用可变字符串引用对象

我想获得在类似PHP,我可以赋值有点像一个解决方案:

For ID as Integer from 0 to count(collectionExample) lblExample{ID}.Text=collectionExample(variableID)

...正因为如此遍历所以每一个不同的lblExample的被更新他们的相应价值。

我遇到的问题是我似乎无法使用变量引用窗体上的对象。我也尝试使用类似

CallByName("lblExample" + variableID, "Text", CallType.Set, exampleCollection(variableID)) ...但是我仍然无法将字符串和变量组合起来以引用对象。

通过组合字符串前缀和变量字符串标识符来引用VB2010中的对象的任何解决方案,类似于PHP的$ variable {$ variable}方法?

编辑:Windows平台

+0

Web或Windows? – Murph 2010-10-08 07:56:30

+0

它适用于Windows。在XP SP3下开发。 – Ellipsis 2010-10-08 08:37:40

+0

如果有人有类似的问题,我需要找出两个“更新”: - 使用someVariable作为控制 - 使用set对象不仅someVariable = elem Dim i As Integer:i = 2 Dim someVariable As Control Dim Name As String:Name =“label”&CStr(i)For Each Elem In Me.Controls If(elem.Name = Name)Then Set someVariable = elem Exit For End If Next someVariable.Text =“What ever” – nn1ka3l 2017-03-07 16:46:51

回答

2

你可以每个控件添加到字典中,使用字符串作为密钥。

然后,您可以使用字符串访问控件。

下面是一个简单的例子,替换for循环与您foreach循环...

有可能会被您关联的控制数据,如把控制由一个整数索引集合中一个更清洁的方式( ID在你的例子),但你问一个字符串!

Public Class Form1 

Dim ctrlDict As New Dictionary(Of String, Control) 

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    ctrlDict.Add("label1", Label1) 
    ctrlDict.Add("label2", Label2) 

    For i As Integer = 1 To 2 
     ctrlDict("label" & i).Text = "Test" & i 
    Next 
End Sub 

End Class 
+0

Hi B Pete,对于之前没有回复的道歉 - 我被重新派遣了,并没有机会测试这个好的答案,但我会尽快回复它!同时,有一个临时勾号。感谢您的时间,我期待着对它进行测试。 – Ellipsis 2011-04-26 23:43:23

+0

如果您要将项目添加到集合中,为什么要使用字符串键:只需创建一个集合来存放您关心的项目并遍历集合中的每个项目。 – 2012-04-16 22:05:15

3

这也适用于:

Dim lab As Label 

    For i As Integer = 1 To 2 
      lab = Me.Controls("label" & i) 
      lab.Text = "Test" & i 
    Next 
相关问题