这是我的代码:
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。
如何在不单独调用所有字符串的情况下编辑所有字符串?
答案 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