Loop処理内でTextBox1の1の数字を変化させるには?

解決


ケロ  2007-03-22 20:06:38  No: 98342

質問です。
環境はVB 2005です。

Form上に複数のテキストボックスが並んでいます。
それぞれにTextBox1,TextBox2,TextBox3のように連番で数字が振ってあります。

Loop処理でTextBoxに値を入れていきたいのですが、
TextBox"1"の""内の値を変化させていくにはどのように記述したらいいのでしょうか?

Dim aa = 1

Do Until aa = 10
  TextBox1.text = aa
  aa += 1
Loop

といった感じです。変数 aa  を入れていくTextBoxも、
カウントが増える毎に変えていきたいのです。

言い方を変えれば、変数を代入するコントロールを
Loop処理で変えていきたいのです。

よろしくお願い致します。


特攻隊長まるるう  2007-03-22 21:03:24  No: 98343

[ControlCollection.Find メソッド]
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.controlcollection.find(VS.80).aspx
を使うか、

あらかじめ TextBox 型の配列を宣言し、自分で
ループしたい TextBox の参照を設定しておくとか。


我龍院  2007-03-22 23:59:42  No: 98344

TextBoxを6個以上置いて
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles Button1.Click
        For i As Integer = 1 To 6
            TextBox(i).Text = "aaa" + i.ToString
        Next
    End Sub

    Private Function TextBox(ByVal index As Integer) As TextBox
        For Each myControl As Control In Me.Controls
            If (TypeOf myControl Is System.Windows.Forms.TextBox) AndAlso _
                myControl.Name.Equals("TextBox" & index.ToString) Then
                Return DirectCast(myControl, TextBox)
            End If
        Next
        Return Nothing
    End Function
こんなことをすると、TextBoxがあたかも配列のようなインデクサになるのだが。


ケロ  2007-03-23 00:49:05  No: 98345

ありがとうございます。
Controlを使用するということで調べていたら自己解決できました。
ソースを載せておきます。

>>特攻隊長まるるうさん
書き込みからControlを使うのだな、とわかったので、
調べたらできました。
配列については全くの無知なのですが、今後使用する時に調べます。

>>我龍院さん
ありがとうございます。
やりたかったのは似たようなことですが、
記述としては簡単にできました。
サンプルソースを真似たのですけど・・・。

        Dim ControlName As String
        For a = 1 To 20
            ControlName = "TextBox" & i
            Me.Controls(ControlName).Text = a
            i += 1
        Next


我龍院  2007-03-23 01:36:45  No: 98346

なるほど、そういえばVB6の頃からControls(コントロール名)だったな。
こんな簡単になっちゃった、上のコードは忘れてください。

For i As Integer = 1 To 6
     TextBox(i).Text = "aaa" & i.ToString
Next

Private Function TextBox(ByVal index As Integer) As TextBox
     Return DirectCast(Me.Controls("TextBox" & index.ToString), TextBox)
End Function


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加