質問です。
環境は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処理で変えていきたいのです。
よろしくお願い致します。
[ControlCollection.Find メソッド]
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.controlcollection.find(VS.80).aspx
を使うか、
あらかじめ TextBox 型の配列を宣言し、自分で
ループしたい TextBox の参照を設定しておくとか。
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があたかも配列のようなインデクサになるのだが。
ありがとうございます。
Controlを使用するということで調べていたら自己解決できました。
ソースを載せておきます。
>>特攻隊長まるるうさん
書き込みからControlを使うのだな、とわかったので、
調べたらできました。
配列については全くの無知なのですが、今後使用する時に調べます。
>>我龍院さん
ありがとうございます。
やりたかったのは似たようなことですが、
記述としては簡単にできました。
サンプルソースを真似たのですけど・・・。
Dim ControlName As String
For a = 1 To 20
ControlName = "TextBox" & i
Me.Controls(ControlName).Text = a
i += 1
Next
なるほど、そういえば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
ツイート | ![]() |