使用增量变量名称从另一个表单访问面板

时间:2014-07-03 02:31:04

标签: vb.net

Public Sub StatusLoad(ByVal id As String)
    ''Dim F As New Apps
    ''Dim W As Panel = DirectCast(F.Controls(id), Panel)

    Dim count As Long = 0

    Dim strQueryStat As String = "SELECT * FROM sample_db.ronda WHERE id = '" + id + "'"

    Dim SqlCmdStat As New MySqlCommand(strQueryStat, dbCon)

    Reader = SqlCmdStat.ExecuteReader


    While Reader.Read
        count = count + 1
        MsgBox("id" & count)
        Dim status_db = Reader.GetString("status")

        If status_db = 0 Then
            Apps.id.BackColor = Color.Green '<------
            MsgBox("Green")
        Else
            Apps.BackColor = Color.Red
            MsgBox("Red")

        End If
    End While

End Sub

我想使用从其他表单获取的'id'变量来从其他表单中查找面板名称。上面的代码在一个类中。我想访问的面板是另一种形式。 在另一个我发送“con.StatusLoad(id)”。面板的名称是id1,id2,id3 ......错误在箭头

Private Sub app_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    con.ManageConnection(False)
    For index As Integer = 1 To 2
        Dim id As String = "id" & index
        con.StatusLoad(id)
    Next index
End Sub

1 个答案:

答案 0 :(得分:0)

每个控件(包括表单)都有一个Controls属性,其中包含一组子控件。您可以按顺序或名称索引该集合,例如

For i = 1 To 5
    Dim pnl = Me.Controls("Panel" & i)

    '...
Next

请注意,您将获得Control引用,因此您只能使用它来访问Control类的成员。如果要访问特定类型控件的成员,则必须转换为该类型。

Controls是公共成员,因此可以从表单外部访问,但可能不应该访问。相同的规则&#34;适用,因为它总是适用于对表单上的控件进行更改,即最佳实践要求它仅在该表单内完成。