テキストボックスの名称

タグの編集
投稿者 SS  (学生) 投稿日時 2009/8/26 19:57:55
質問させてください

フォーム内に、TextBox0,TextBox1,TextBox2といった名前のテキストボックスがいくつかあり、
それぞれのテキストボックスにループで値を順番に入力したいのですがうまくいきません。

具体的には

for i = 0 to 3
(textbox & i).text = i
next

のような感じです。
お願いします。
投稿者 るきお  (社会人) 投稿日時 2009/8/26 22:08:34
こんにちは。

たとえば、次のようになります。
 
Dim i As Integer

For i = 1 To 3
    Me.Controls("TextBox" & i).Text = i
Next


こちらの記事でも説明しているのでよろしければ参照してください。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard20.htm

(textbox & i).text = i
これがダメなのは、
& は文字列をつなぐ記号(演算子)であって、プログラムで使用するのキーワードやオブジェクト名をつなぐことはできないからです。
プログラムで使用するキーワードやオブジェクト名をつなぐ手段はありません。
必要な場合にはたいてい今回のControlsプロパティのような何かの要求ごとの機能が用意されています。

投稿者 SS  (学生) 投稿日時 2009/8/28 01:03:18
ありがとうございます!解決しました。

&でつなぐにはTextboxを文字列としなければだめなのですね。
投稿者 るしぇ  (社会人) 投稿日時 2009/8/28 02:01:57
>&でつなぐにはTextboxを文字列としなければだめなのですね。 
たとえ文字列にしたとしても、絵に描いた餅は食べられません。
文字列の"Textbox1"はいつまでたっても Textbox1 オブジェクト
にはなりません。

Controlsプロパティが用意されていない場合は、
>こちらの記事でも説明しているのでよろしければ参照してください。
>http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard20.htm
の最後の方に書いてあるとおり、自分で文字列の"Textbox1"と
Textbox1 オブジェクトを結びつけるようなコレクションを作成
するか、速度が遅くて良いなら、画面上の全てのコントロールを
ループで回し、Name が"Textbox1"と一致するものを探すことを
考えます。

プログラムに魔法はありません。地道に誰が考えてもできる方法を
積み重ねて処理が出来上がっていきます。