我如何使用for循环在Visual Basic中为可视工作室编辑多个标签

时间:2015-10-02 20:18:39

标签: vb.net visual-studio

这是我的代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim randVal As Integer
    Dim label As String
    Dim val As Integer
    Dim stringVal As String
    For i As Integer = 1 To 256 Step 1
        val = i
        stringVal = CStr(val)
        label = "Label" + stringVal
        randVal = CInt(Math.Floor((20 - 1 + 1) * Rnd())) + 1
        label.BackColor = Color.Green
    Next

End Sub

我收到错误,该字符串没有属性BackColor。

如何在不单独调用所有字符串的情况下编辑所有字符串?

4 个答案:

答案 0 :(得分:0)

您正在尝试访问不存在的属性。

Visual Basic中的String类型有两个属性。见这里(https://msdn.microsoft.com/en-us/library/system.string_properties(v=vs.110).aspx

如果您要更改标签的背景颜色,则需要引用具有该属性的标签名称。

例如:(我假设您要更改标签上的文字和颜色)

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  Dim randVal As Integer
  Dim labelText As String
  Dim val As Integer
  Dim stringVal As String
  For i As Integer = 1 To 256 Step 1
      val = i
      stringVal = CStr(val)
      labelText = "Label" + stringVal
      randVal = CInt(Math.Floor((20 - 1 + 1) * Rnd())) + 1
      labelName.BackColor = Color.Green
  Next
End Sub

话虽如此,您还可以使用标签属性来更改标签的文本。     labelName.Text ="标签" + stringVal

以下是一些参考资料 (How to change the text color. Simple?

此外,这里还有指向标签属性(https://msdn.microsoft.com/en-us/library/system.windows.forms.label_properties(v=vs.110).aspx

的链接

和你的按钮属性(https://msdn.microsoft.com/en-us/library/system.windows.forms.button(v=vs.110).aspx

答案 1 :(得分:0)

错误消息是正确的:字符串上没有名为BackColor的属性。

然而,Button上有一个BackColor属性,看起来好像你可能试图在点击时设置Button对象的背景颜色。如果是这样,那么您需要先获取Button对象,然后才能设置颜色。事件处理程序通过将对象作为参数" sender"传递给您的处理程序,使得(适度)容易。唯一的问题是它将它作为一个对象发送,而不是一个Button,所以你首先必须将它转换为你想要的类型,如下所示:

Dim button As Button
button = DirectCast(sender, Button)

然后您可以设置颜色:

button.BackColor = Color.Green

另外,如果要设置按钮的文本,则必须使用button.Text属性设置它:

button.Text = "What I want to see on the button"

但是,您的计划很难遵循。我无法从代码中清楚地看到您为什么要执行循环,或者为什么要设置像randVal这样没有使用的值,因此很难给出具体建议。

答案 2 :(得分:0)

您设法将变量标签设置为Label控件的名称,但不设置为对象本身。现在,您需要从名称中获取Control对象。

VB6:

 Me.Controls(label).BackColor = vbGreen

VB.Net:

Me.Controls(label).BackColor = Color.Green

但是,您可以更轻松地跨越标签控件并更新其背景:

   Dim c as Control
   For Each c In Me.Controls
       If (TypeOf c Is Label) Then c.BackColor = Color.Green
   Next c

答案 3 :(得分:0)

如果你想在循环中引用Label1到Label256,无论它们在哪个容器中,那么使用Controls.Find()

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i As Integer = 1 To 256
        Dim lbl As Label = Me.Controls.Find("Label" & i, True).FirstOrDefault
        If Not IsNothing(lbl) Then
            lbl.BackColor = Color.Green
        End If
    Next
End Sub