文字列をオブジェクト名として使用しようとしています。例 オブジェクトがあり、名前は Label1 です。これはできますか?
Dim i As String = "Label1"
someVariable = i.Text
オブジェクト名として文字列を使用していますが、可能ですか?
文字列をオブジェクト名として使用しようとしています。例 オブジェクトがあり、名前は Label1 です。これはできますか?
Dim i As String = "Label1"
someVariable = i.Text
オブジェクト名として文字列を使用していますが、可能ですか?
@Christian Sauerが言ったように、すべてのコントロールを反復処理できますが、コントロールがコントロールのコンテナーである場合、問題が発生する可能性があります。それを解決するには、再帰的な検索を行う必要があります。ただし、ControlCollection
実際にFind()
使用できる方法があります。名前に一致するコントロールの配列を返し、オプションで再帰検索を実行します。
''//Our final control
Dim someVariable As Control = Nothing
''//Search recursively for our control
Dim SearchedControls = Me.Controls.Find(key:="Label1", searchAllChildren:=True)
''//If we found one and only one control
If SearchedControls.Count = 1 Then
''//Set it to our variable
someVariable = SearchedControls(0)
Else
''//Whatever your logic dictates here
End If
これは不可能ですが、できることは次のとおりです。
Dim i As String = "Label1"
Dim Obj as Label
for each elem in me.controls
if elem.Name = i then
Obj = elem
exit for
end if
next
someVariable = obj.Text
すべての WinForms コントロールを繰り返し処理して、「Label1」という名前のラベルを見つけます。見つかったら、ラベルを変数に割り当てます。これは機能しますが、特にコントロールを追加する場合は非常に危険です
答えられたことは知っていますが、これは私の図書館からのものであり、私はいつもそれを使用しています。@ChrisHaasが提案したように、すべてのコントロールとコンテナのコントロールを再帰的に繰り返します。
Public Function GetControlByName(ByRef parent As Control, ByVal name As String) As Control
For Each c As Control In parent.ChildControls
If c.Name = name Then
Return c
End If
Next
Return Nothing
End Function
<Extension()> _
Public Function ChildControls(ByVal parent As Control) As ArrayList
Return ChildControls(Of Control)(parent)
End Function
<Extension()> _
Public Function ChildControls(Of T)(ByVal parent As Control) As ArrayList
Dim result As New ArrayList()
For Each ctrl As Control In parent.Controls
If TypeOf ctrl Is T Then result.Add(ctrl)
result.AddRange(ChildControls(Of T)(ctrl))
Next
Return result
End Function
(以前に質問され、回答されました) Webユーザーコントロールのコントロールをループスルーします
私はそれが答えられたと確信していますが、それが修正されたことを確認するために、それが制御配列と結果であることを明確にするためのいくつかの点があります。
Private Sub btn1_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
Dim Ds As New DataSet
Dim str As String = ""
str = " SELECT TOP (10) t_Suppliers.STNo from t_Suppliers "
Ds = SqlHelper.ExecuteDataset(ConnectionString, CommandType.Text, str)
For i As Integer = 0 To Ds.Tables(0).Rows.Count - 1
Dim str1 As String = "lblInv" & i + 1
Dim OBj As New Label
Try
Dim SearchedControls() As Control = Me.Controls.Find(key:=str1, searchAllChildren:=True)
If SearchedControls.Length > 0 Then
SearchedControls(0).Text = Ds.Tables(0).Rows(i).Item("STNo").ToString
End If
Catch
End Try
Next
End Sub