我一直在教自己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”声明?
谢谢!
答案 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很新。因此,即使上面的代码有效,如果有人知道我认为可能对应用程序或系统有害的原因,我愿意接受建议。