在VB中实现标签名称中的变量?

时间:2013-01-02 17:30:42

标签: vb.net loops label

我目前有一个巨大的IF声明,并希望尽可能减少它。

我有一个数据网格,我从SQL查询填充,然后从这个数据网格我将值传递给单独的标签。

我能够创建一个For Each循环,在其中循环查看变量直到计数器达到7.但是当我需要将Label名称值增加1时出现问题。每次,基本上我都需要在Label名称中添加一个计数器变量。

我需要最小化的代码是:

result73 = DataGridView1.Rows(0).Cells(0).Value.ToString
result74 = DataGridView1.Rows(0).Cells(1).Value.ToString
result75 = DataGridView1.Rows(1).Cells(0).Value.ToString
result76 = DataGridView1.Rows(1).Cells(1).Value.ToString
result77 = DataGridView1.Rows(2).Cells(0).Value.ToString
result78 = DataGridView1.Rows(2).Cells(1).Value.ToString
result79 = DataGridView1.Rows(3).Cells(0).Value.ToString
result80 = DataGridView1.Rows(3).Cells(1).Value.ToString
result81 = DataGridView1.Rows(4).Cells(0).Value.ToString
result82 = DataGridView1.Rows(4).Cells(1).Value.ToString
result83 = DataGridView1.Rows(5).Cells(0).Value.ToString
result84 = DataGridView1.Rows(5).Cells(1).Value.ToString
result85 = DataGridView1.Rows(6).Cells(0).Value.ToString
result86 = DataGridView1.Rows(6).Cells(1).Value.ToString
result87 = DataGridView1.Rows(7).Cells(0).Value.ToString
result88 = DataGridView1.Rows(7).Cells(1).Value.ToString

If result73 = "Monday" Then
    DaySalesLbl1.Text = result74
ElseIf result73 = "Tuesday" Then
    DaySalesLbl2.Text = result74
ElseIf result73 = "Wednesday" Then
    DaySalesLbl3.Text = result74
ElseIf result73 = "Thursday" Then
    DaySalesLbl4.Text = result74
ElseIf result73 = "Friday" Then
    DaySalesLbl5.Text = result74
ElseIf result73 = "Saturday" Then
    DaySalesLbl6.Text = result74
ElseIf result73 = "Sunday" Then
    DaySalesLbl7.Text = result74
End If

对于上面声明的每个变量,此If语句都会继续。

我创建的循环看起来像这样:

Dim cou As Integer
Dim n As Integer
cou = 0
n = 1
Do Until result74 <> ""
    If result73 = cou Then
        DaySalesLbl +n = result74
    End If
    cou = cou + 1
    n = n + 1
Loop

但是DaySalesLbl +n = result74部分会带来错误,因为它会查找生成的方法。

2 个答案:

答案 0 :(得分:1)

如果我怀疑这是一个WinForm项目,那么您可以使用Form.Controls集合按名称访问控件,如下所示:

Dim cou As Integer
Dim n As Integer
cou = 0
n = 1
Do Until result74 <> ""
    If result73 = cou Then
        Dim l As Label = CType(Me.Controls("DaySalesLbl" & n), Label)
        l.Text = result74
    End If
    cou = cou + 1
    n = n + 1
Loop

Controls集合包含作为表单直接子节点的所有控件。您可以按索引(例如Me.Controls(0))或按名称(例如Me.Controls("DaySalesLbl6"))访问它们。但是,集合将列表存储为基本Control类型,因此在访问特定属性之前必须将其强制转换为特定类型。这就是示例中CType(..., Label)的原因。

答案 1 :(得分:0)

我会按如下方式编写代码:

For i as Integer = 0 to 7
   Select Case DataGridView1.Rows(i).Cells(1).Value.ToString 
    Case "Monday"
       Me.Controls("DaySalesLbl" & i+1).Text = DataGridView1.Rows(i).Cells(2).Value.ToString 
    Case "Tuesday"
       Me.Controls("DaySalesLbl" & i+2).Text = DataGridView1.Rows(i).Cells(2).Value.ToString 

   ... etc ...

我在没有IDE的情况下做到了这一点,所以我希望我没有弄乱任何东西,但我希望这能让你朝着正确的方向前进并提供帮助。