如何在visual basic中使用变量替换来引用对象名称?

时间:2018-05-09 13:29:31

标签: vb.net object visual-studio-2015

我最近几个月一直在编写bash脚本,但是我需要编写一个Visual Basic Window Forms应用程序并打到墙上。我认为bash毁了我。这可能是显而易见的,但我似乎无法弄明白。

我有一些标签和单选按钮我需要迭代并进行一些检查,而我可以为每一个做这个当然它真的膨胀代码,即20个按钮和20个标签是每个检查40个额外的行。 所以问题是:如果我有例如radiobutton1,radiobutton2,radiobutton3 ......或label1,label2,label3 ......如何使用变量替换引用它们或者是什么解决方法?无论对象类型如何,这都是有用的,因为VB命名的方式。

for i = 1 to 3
t=cstr(i)
  if radiobutton# $t %t (t) {t}.Checked= true then "-EXAMPLES"
    label# $t %t (t) {t}.Text ="You Clicked Me On"
  end if
next

无论如何,我整个上午都在寻找,现在已经有4个小时了,似乎无法找到解决方案。我确实需要能够使用对象的属性等。

1 个答案:

答案 0 :(得分:0)

for i = 1 to 3
  Dim rb as Radiobutton = CType(Me.controls("RadioButton" & i.ToString), RadioButton)
  if rb.Checked = true then 
    Dim lab as Label = CType(Me.controls("Label" & i.ToString), Label)
    lab.Text ="You Clicked Me On"
  end if
next

......好吧,我希望我能正确理解你的想法。

这是一种处理不同容器中的单选按钮的方法:

Dim RBlist as List(Of RadioButton)
RBlist.Add(Me.RadioButton1)
RBlist.Add(Me.RadioButton2)
RBlist.Add(Me.RadioButton3)

For Each rb in RBlist
    If rb.Checked = True Then
        ...
    End If
Next

或者,如果需要公开迭代,可以像这样编写最后一位:

For ir = 0 to RBlist.Count - 1
    If RBlist(ir).Checked = True Then
        ...
    End If
Next

请注意,在向列表添加单选按钮时,放置哪个父容器并不重要。将RadioButtons添加到列表的最佳时间是创建它们。

如果您需要不同的对象(例如Labels,Buttons,NumericUpDowns,...),则必须分别为每个对象创建一个List(Of Object)。还有其他可能的数据结构,但这个结构很简单并且经过验证。