0

64 個のパネルがあり、それぞれに 2 つのデータ文字列が含まれています。テスト目的で、乱数ジェネレーターを使用してデータを提供しました。

文字列のリスト (パネルごとに 2 つのデータを区切る "," を含む、合計 64 個の文字列) を作成し、それらを各ラベルに書き込む必要があります。

文字列データを分割する方法 (方法はわかっています) を見つけて、各ラベルに書き込む必要があります。

例: 最初の文字列は分割され、Label1a と Label1b という最初のパネルに追加され、2 番目の文字列は Label2a と Label2b に分割されます。

Dim LotData As New List(Of String)

Dim randomnumber1 As Integer, randomnumber2 As Integer, randomchance As Integer
Dim slotnumber As String
Dim sbailes As String
Dim stemp As String

Randomize()

Dim n As Integer
For n = 1 To 64

  randomnumber1 = CInt(Rnd() * 1000000000)
  randomnumber2 = CInt(Rnd() * 300)
  randomchance = CInt(Rnd() * 1000)

  slotnumber = Convert.ToString(randomnumber1)

  'approximately 50% of the lots will be empty in this test
  If randomchance >= 500 Then
    sbailes = CStr(randomnumber2)
  Else
    sbailes = "0"
  End If

  LotData.Add(slotnumber & "," & sbailes)
Next

私の唯一の解決策は、128 行のコードを記述し、各文字列を手動で追加することですが、それよりも優れた解決策があるはずです...

4

1 に答える 1

0

文字列名でコントロールを取得したいと思うでしょう。ここでこれを行うのに役立ついくつかのメソッドがあります(モジュールに入れます)

<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

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

次に、メソッドで、次のように1から64までの整数に応じて、名前でコントロールを取得できます。

For i As Integer = 1 To 64
    CType(GetControlByName(Me, "Label" & i.ToString() & "A"), Label).Text = _
        LotData(i).Split(",").FirstOrDefault()
    CType(GetControlByName(Me, "Label" & i.ToString() & "B"), Label).Text = _
        LotData(i).Split(",").LastOrDefault()
Next

おー!次のようなことを行うことで、デザイン時にすべてのコントロールをフォームに追加する手間を省くことができます。

For i As Integer = 1 To 64
    Dim lblA As New Label()
    Dim lblB As New Label()
    lblA.Name = "Label" & i.ToString() & "A"
    lblB.Name = "Label" & i.ToString() & "B"
    ' do something about Locations here
    Me.Controls.Add(lblA)
    Me.Controls.Add(lblB)
    ' you could even add them to your panel.controls
Next

(例外処理を忘れないでください)

于 2013-03-05T00:06:52.193 に答える