VB.NET 2013:更改标签文本

时间:2014-03-10 17:51:01

标签: mysql vb.net dynamic label

我一直在教自己VB.NET几周了,我很难过。我有超过18年的PHP经验,到目前为止,逻辑非常相似。我无法弄清楚的是如何动态指定标签来更改文本。我所拥有的是50个标签,每个州一个。然后我有一个MySQL查询拉取该状态的计数,然后更新状态的标签。

我的代码目前是:

While dataReader.Read
   If dataReader.Item("state") = "CO" Then
     lblCO.Text = "(" & dataReader.Item("total") & ")"
     lblCO.Visible = True
   End If
End While

我不想做的是制作50“IF”语句来指定每个标签的新文本。每个标签以lbl开头,以两个州的缩写结束。例如:lblCA,lblCO,lblFL。

我以为我可以这样连接:(在PHP中连接类似的风格)

While dataReader.Read
   lbl&dataReader.Item("state").Text = "(" & dataReader.Item("total") & ")"
   lbl&dataReader.Item("state").Visible = True
End While

我很快发现你不能在VB.NET中这样连接。

有谁知道如何动态执行此操作?还是我被困在制作50“IF”声明?

谢谢!

2 个答案:

答案 0 :(得分:0)

只要您处于您尝试操作的表单后面的代码中,就可以执行以下操作:

Dim currControl = From r In Me.Controls Where DirectCast(r, Control).Name = "lbl" & StateAbbreviation Select r

如果您有DirectCast,则只需要option strict部分,否则您可以这样做:

Dim currControl = From r As Control In Me.Controls Where r.Name = "lbl" & StateAbbreviation Select r

将StateAbbreviation替换为您当前正在尝试编辑的状态。

然后做:

If currControl IsNot Nothing AndAlso currControl.Any Then
    currControl(0).Text = "Whatever you want to assign to the label"
End If

这需要.NET 3.5或更高版本。但它基本上只是使用LINQ来找到你想要编辑的控件,然后使用对该控件的引用来设置显示值。

答案 1 :(得分:0)

我首先要感谢Plutonix和Mike_OBrien。我能够将你的两个回答结合起来,为我提供一个完美的解决方案。

Plutonix:我发现你在错误的地方有“.Text”,但总的来说你的片段有效。哦,在VB.NET 2013中,它迫使我使用“我”。而不是表格名称。

Mike_OBrien:我喜欢你的“IsNot Nothing”检查

适合我的解决方案:

 While dataReader.Read
   If Me.Controls("lbl" & dataReader.Item("state")) IsNot Nothing Then
     Me.Controls("lbl" & dataReader.Item("state")).Text = "(" & dataReader.Item("total") & ")"
     Me.Controls("lbl" & dataReader.Item("state")).Visible = True
   End If
 End While

所以上面的内容将确保标签存在。如果它确实存在,那么它会将文本更新为从MySQL中提取的计数。就像我之前说过的,我对VB.NET很新。因此,即使上面的代码有效,如果有人知道我认为可能对应用程序或系统有害的原因,我愿意接受建议。