- - PR -
For文で変数を変更するには?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-02-01 16:51
問題が解決せず、たびたび失礼します。
xxななおxx様 ご指導ありがとうございます。 私が事前に細かく説明しないのが悪かったのですが、 TextBoxの数が膨大でざっと300個はあるので一つ一つをハッシュに入れると膨大な量になってしまって、、困っています。 TextBox+"i" という感じで出来たら一番よいのですが FindControlでエラーが出てしまって他によい方法がありましたら、ご指導お願いします。 ■状況・環境補足 VisualBasic.NETでWindowsアプリケーションを作ろうとしています。 | ||||||||
|
投稿日時: 2005-02-01 17:18
ものすごい数ですね。 そんな設計では、きっとこの先他のことでも困ることでしょう。
リフレクションでも使ってみるとか。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2005-02-01 17:28
FindControlメソッドはSystem.Web.UI.Controlのメソッドなので Windowsアプリケーションでは使用できません。 文字列によるコントロール操作のスレッドが参考になると思います。 [追記] オブジェクトの取得に関してのスレッドも参考になると思います。 [ メッセージ編集済み 編集者: Hasumi 編集日時 2005-02-01 17:33 ] | ||||||||
|
投稿日時: 2005-02-01 17:29
300個もテキストボックスがあるなら
最初のTextBoxをNewする段階で配列したほうがいいと思います。。 そのフォームにどのくらいの部品と関連のない他のテキストボックス が張ってあるかはわからないですが、 TextBoxの命名で逃れるとしてですが、 (↓下3文字がコントロール番号 TextBox001〜TextBox300) Dim objControl as Control Dim objTextBox as TextBox For Each objControl In Controls if TypeName(objControl)="TextBox" Then objTextBox= CType(objControl,TextBox) objTextBox.Text=objTextBox.Name.SubString(objTextBox.Name.Length-3,3) End if Next という方法もありますが、、。 コントロールを全部見に行くのは??と自分でもいまいち疑問なコードです。 個人的に、VB.NETで、For each Next でコントロールを見たときに 目的のオブジェクトと認識できたり、できなかったりした動作 (私のコードの問題の可能性大)も経験しているので、 私は使ってない方法ですが・・。 論理的には動作すると思いますが・・ | ||||||||
|
投稿日時: 2005-02-01 17:30
VB.NETにはVB6.0のコントロール配列に相当する機能は無いので、同じ事を期待するのは無理がああります。したがって、自分でコントロールを配列に初期化するしかありません。300個のコントロールを配列にしたいと言うことは、コントロールの配置にはきっと規則性があるのでしょ?コントロールを配置する処理も含めて、コード上で行うようにするのが一番労力を減らせると思いますよ。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||
|
投稿日時: 2005-02-01 21:20
ん〜?300個もあるテキストボックス。。。それが全部「必須入力」だったらどうしよう。どうやって300個も配置できたんだろう?本当に300個も、一度に必要なの?
| ||||||||
|
投稿日時: 2005-02-01 21:53
素直にgrid系のコントロールを使用した方がいいですよ
| ||||||||
|
投稿日時: 2005-02-01 23:13
どうしました?膨大な量になっていませんか? 300個のテキストボックスは仕様としていいとは思いません。が、とりあえず それはおいておきます(実験的にやってるだけ、とかならそれはそれで構いませんし) 例えばです。別のプログラムで以下のようにする。 Dim str As String For i As Integer = 1 To 300 str += "objHash.Add(""TextBox" + i.ToString() + """, TextBox" + i.ToString() + ")" + vbLf Next i できたstrをどっかに表示して、コピペしてソースに貼る。(こういうのではだめ?・・) |