重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VB6からVB2008へ移行を検討しているものです。
そこで質問なんですが、VB2008でコントロールの反復処理はどう処理すればいいのでしょうか?
VB6の時はコントロール配列を使用して、ForNextで繰り返せばそれらしいことはできました。VB2008はコントロール配列がサポートされていないのでどうすればいいかわかりません。みなさんはどう反復処理を行っているのか教えていただきたいと思います。
具体的な処理として、テキストボックス1~10があり、そのテキストボックスの内容を1~10の順番で、テキストボックス11~20に格納する。以上、宜しくお願いします。

A 回答 (2件)

こんにちは、



VB2008を利用して実行しましたが、
たぶん、VB6と同様なコードだといもいますが。

テキストボックスの数は、少ないですが。
以下を応用すれば、簡単だと思いますよ。
もっと、スマートなコードがあるもいますが。

フォームを、立ち上げ、テキストボックス1,2のテキストプロパティに、テキストを代入して、
ボタンを押すと、テキストボックス3、4にそれぞれを
代入
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim tb As String = "TextBox"

For i As Integer = 0 To 1

Me.Controls(tb & (i + 3)).Text = Me.Controls(tb & (i + 1)).Text

Next


End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = "いひひひひ"
TextBox2.Text = "うひひひひ"
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
VB6の時のコントロール配列と似たような記述方法ですね!
さっそくいろいろ試してみます。
ありがとうございました。

お礼日時:2009/06/08 17:03

コントロール配列自体はなくなってしまいましたが


コントロール型の配列変数は宣言できます

フォームクラスの変数として
dim tb(20) as TextBox
などと宣言しておいて

フォームクラスの Newメソッド追加し
InitializeComponentを呼び出した後で
配列tbに Controlsコレクションから抽出して代入するか
ハードコーディングで個別に代入式を書いてしまうか
といった方法で VB6と同じ感覚で コーディングできると思いますよ

たとえば
dim n as Integer = 0
for each ctl as Control in Me.Controls
  if typeof ctl is TextBox then
    tb(nm) = ctl
    n = n + 1
  end if
next
といった具合で配列に代入するとか ・・・

この回答への補足

回答ありがとうございました。
上記のコードの場合、フォームのコントロールを抽出し、その中のテキストボックスをtb()に格納するのは理解したんですが、テキストボックス1~10以外にもテキストボックスが存在した場合や、格納する順番も考慮したい場合はどうしたらいいのでしょうか?
テキスト1~10の順番で、テキストの内容を参照したいと思っています。
以上、宜しくお願いします。再度ご回答いただけたら嬉しいです。

補足日時:2009/06/08 16:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!