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
答案 0 :(得分:0)
每个控件(包括表单)都有一个Controls
属性,其中包含一组子控件。您可以按顺序或名称索引该集合,例如
For i = 1 To 5
Dim pnl = Me.Controls("Panel" & i)
'...
Next
请注意,您将获得Control
引用,因此您只能使用它来访问Control
类的成员。如果要访问特定类型控件的成员,则必须转换为该类型。
Controls
是公共成员,因此可以从表单外部访问,但可能不应该访问。相同的规则&#34;适用,因为它总是适用于对表单上的控件进行更改,即最佳实践要求它仅在该表单内完成。