- 締切済み
ラベルなどオブジェクトを変数で指定する
環境はVB2012です。 N個の値を持った変数をN個のラベルに表示したいのですが、今のところ Select Case を使用してずらずらと列記しています。とても面倒くさいし可読性も悪いし、ミスもよく起こすので、内容を変更するラベルの指定を変数でできない物かと思いました。 以下のコードの場合、child0.Text、child1.Textというように名前+No.という構成になっています。最終的にはchild(i).Textといったように数値変数で直接指定できればと思います。 過去にはコントロール配列などがあるようでしたが、このバージョンでは今ひとつ分かりません。 Dim child_string(N) As String Dim cnt_1 As Integer Dim cnt_2 As Integer Dim fitness(N) As Integer For cnt_1 = 0 To 9 Select Case cnt_1 Case 0 Me.child0.Text = child_string(cnt_1) Me.fitness0.Text = fitness(cnt_1) Case 1 Me.child1.Text = child_string(cnt_1) Me.fitness1.Text = fitness(cnt_1) Case 2 Me.child2.Text = child_string(cnt_1) Me.fitness2.Text = fitness(cnt_1) ’##################################### 同様の物が100個とか200個とかずらずら並ぶ。 下ではその数をNとする。 ’##################################### Case N Me.childN.Text = child_string(cnt_1) Me.fitnessN.Text = fitness(cnt_1) End Select Next cnt_1
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
>同様の物が100個とか200個とかずらずら並ぶ。 根本的にGrid系かList系のコントロール使えって話。 > CType(Me.Controls("child" & cnt_1), TextBox).Text 意味としてはフォームが持っているコントロールの中から該当する文字列 の名前の付いたものを探す。。。だからコントロールがたくさんある 処理で事ある毎に検索する処理が走る。。。ので重くなるかもね。 昨今のPC性能だと問題ないのかもしれないし、テストしてみれば すぐ分かる話だけど、ラベルをそんなに並べる必要性を感じないから 食指が全く動かないなぁ。
- n-jun
- ベストアンサー率33% (959/2873)
纏めるってだけなら For cnt_1 = 0 To 9 CType(Me.Controls("child" & cnt_1), TextBox).Text = child_string(cnt_1) CType(Me.Controls("fitness" & cnt_1), TextBox).Text = fitness(cnt_1) Next これでも出来るような気がしますよ。
- Yune-Kichi
- ベストアンサー率74% (465/626)
List(Of Tuple(Of Label, Label))でも作ってそこにコントロールを放り込んでおき, あとはインデックスアクセスで処理すれば良いでしょう。 とはいえ,初期化コードも馬鹿にならないですから, T4テンプレートでコードの自動生成することをお薦めします。 # ラベル200個とか400個とか,それ自体をあまり見たくないですが……。