1

特定の数のラベルを表示してから入力できるようにしたいと考えています。非効率的な方法は、必要な数のラベルで SELECT CASE を実行し、次にこれらを入力することです。私はこのようなものを探しています:

For i = 1 to RequiredNumOfLabels
    Label & i.visible = true
    Label & i.text = DataTable.Rows(i).Item(2)
Next

ありがとうございました。

編集:

    For i = 1 To NumberOfItems
        Dim lbl = Controls("lbl" & i)
        lbl.Visible = True
        lbl.Text = CStr(DataTable.Rows(i).Item(2))
    Next

ラインだと思います

    Dim lbl = Controls("lbl" & i)

行が実行された後、 lbl はまだ何にも等しいので問題です。

その背後にある理由は、私がvb.netで請求書ジェネレーターを作成しようとしていたことです。これが簡単な方法になることを望んでいました-注文のアイテムの量を数え、ラベルに名前を入力しますアイテム、その多くのラベルを明らかにします。

4

2 に答える 2

2

ラベル コントロールが本当にそのような順序になっている場合は、リストからそれらを参照するだけで試すことができます。

Dim myLabels As New List(Of Label)
myLabels.Add(Label1)
myLabels.Add(Label2)

次に、それらを更新します。

For i as Integer = 1 to myLabels.Count
  myLabels(i - 1).Visible = True
  myLabels(i - 1).Text = DataTable.Rows(i).Item(2).ToString
Next
于 2012-04-09T19:59:48.750 に答える
1

Controlsformsプロパティを介して名前でコントロールを取得できます

For i = 1 To RequiredNumOfLabels
    Dim lbl = TryCast(Controls("Label" & i), Label)
    If lbl IsNot Nothing Then
        lbl.Visible = True
        lbl.Text = CStr(DataTable.Rows(i).Item(2))
    End If
Next

タイプ のオブジェクトを取得するのでControl、それを にキャストする必要がありますLabel


アップデート

Controlとにかくで定義されているプロパティのみを使用しているようです。したがって、コードを次のように単純化できます。

For i = 1 To RequiredNumOfLabels
    Dim lbl = Controls("Label" & i)
    lbl.Visible = True
    lbl.Text = CStr(DataTable.Rows(i).Item(2))
Next
于 2012-04-09T19:57:25.140 に答える