- PR -

For文で変数を変更するには?

投稿者投稿内容
たにくん
会議室デビュー日: 2005/01/19
投稿数: 19
投稿日時: 2005-02-01 11:48
よろしくお願いします。
VB.NET環境です。
フォームにTextBoxを複数配置してあります。
TextBox0,TextBox1,TextBox2,TextBox3,TextBox4,TextBox5…

For文で各TextBoxに違う値を入れたいのですが、変数の指定がうまく行きません。

【ソース】
For i As Integer = 0 To 10
TextBoxi.Text = i
Next

上記だとエラーが出てしまいます。
変数の指定の仕方が分かる方ご指導お願いします。
SE卵
大ベテラン
会議室デビュー日: 2004/10/22
投稿数: 135
投稿日時: 2005-02-01 12:23
こんにちは。

下記URLとか参考になるんじゃないかと思います。

http://dobon.net/vb/dotnet/control/buttonarray.html

TextBox & "i" .Text みたいな書き方はJavaScriptやVBScriptでは可能
だと思いますが、VBにそんな書き方ありましたっけ?たぶんなかったような。。。
どなたか知ってらっしゃるかもしれませんね。

と、余計ですが、WebアプリかWinアプリか書いてくださいね。
hira
常連さん
会議室デビュー日: 2004/05/07
投稿数: 33
投稿日時: 2005-02-01 12:34
以下のような書き方でどうでしょうか?

For i As Integer = 0 To 10
Dim txtBox As WebControls.TextBox
txtBox = FindControl("TextBox" + CStr(i))
txtBox.text=i
Next

動作の検証もしていないんで、動かなかったらごめんなさい
xxななおxx
ベテラン
会議室デビュー日: 2005/01/18
投稿数: 61
お住まい・勤務地: 東京(練馬)
投稿日時: 2005-02-01 13:46
コードを見てちょっと驚きましたが・・。
論理は別として、見た目にやりたいことがわかるので理解できました。
VB(ASP.NET)なら”hiraさん”の方法。

自分では、SE卵さんのような配列の方法が好きですが、
別の方法を提案。。

一端ArryListにTextBoxを全部格納するのはどうでしょう?

Dim objArry As New ArrayList
objArry.Add(TextBox0)
 ::
objArry.Add(TextBox10)
↑(※TextBox0から順番に全部格納しておく)

Dim i As Integer
Dim objText as TextBox

For i = 0 To objArry.Count - 1
  objText = CType(objArry.Item(i), TextBox)

  If objText.Name = "TextBox" + CStr(i) Then
   objText.Text=CStr(i)
  End If

Next i

とうのはいかがでしょうか?

ArryListへの格納順番をランダムに格納するなら、
2重ループで、

Dim i,j As Integer
Dim objText as TextBox

For i = 0 To objArry.Count - 1
  objText = CType(objArry.Item(i), TextBox)
  
  For j= 0 to objArry.Count - 1
    If objText.Name = "TextBox" + CStr(j) Then
      objText.Text=CStr(j)
    End If
  Next j

Next i


うーん。
もっときれいで簡単な方法があるような気もしますが・・。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-02-01 15:27
.NET ってほとんど知らないんだけど、(Array)List じゃなくて (Hash)Map ってないんですか? コントロールの名前を文字列として索引に使えたほうが便利だと思う。そして、それをしてくれるのが、hira さんの書いている FindControl("TextBox" + CStr(i)) なんじゃないのかなあ。
たにくん
会議室デビュー日: 2005/01/19
投稿数: 19
投稿日時: 2005-02-01 15:50
みさなんありがとうございます。
hiraさんのソースはFindControlでエラーが発生して出来ませんでした。
ほかの方々のやりかたで今挑戦中です。
自分のスキルが追いついてないため解決にはまだ時間がかかると思います。
みさなん本当にありがとうございます。
xxななおxx
ベテラン
会議室デビュー日: 2005/01/18
投稿数: 61
お住まい・勤務地: 東京(練馬)
投稿日時: 2005-02-01 16:28
”未記入さん”のおっしゃるとおり、ハッシュテーブルの方が使い勝手が良いですね。

もう遅いかも知れないですが、、。。

Dim objHash as New Hashtable
Dim objText as TextBox

objHash.Add("TextBox0",TextBox0)
:::
objHash.Add("TextBox10",TextBox10)

For i = 0 To objHash.Count - 1
  objText = objHash.Item("TextBox" + i.ToString())
  objText.text=i.ToString()
Next i

todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-02-01 16:35
WebのFindControlと同等な関数を自作する、というのを何処かで見た記憶があります。

スキルアップ/キャリアアップ(JOB@IT)