- PR -

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

投稿者投稿内容
たにくん
会議室デビュー日: 2005/01/19
投稿数: 19
投稿日時: 2005-02-01 16:51
問題が解決せず、たびたび失礼します。
xxななおxx様 ご指導ありがとうございます。

私が事前に細かく説明しないのが悪かったのですが、
TextBoxの数が膨大でざっと300個はあるので一つ一つをハッシュに入れると膨大な量になってしまって、、困っています。
TextBox+"i"
という感じで出来たら一番よいのですが
FindControlでエラーが出てしまって他によい方法がありましたら、ご指導お願いします。

■状況・環境補足
VisualBasic.NETでWindowsアプリケーションを作ろうとしています。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-02-01 17:18
引用:

TextBoxの数が膨大でざっと300個はあるので一つ一つをハッシュに入れると膨大な量になってしまって、、困っています。



ものすごい数ですね。
そんな設計では、きっとこの先他のことでも困ることでしょう。

引用:

FindControlでエラーが出てしまって他によい方法がありましたら、ご指導お願いします。



リフレクションでも使ってみるとか。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2005-02-01 17:28
引用:

FindControlでエラーが出てしまって他によい方法がありましたら、ご指導お願いします。

■状況・環境補足
VisualBasic.NETでWindowsアプリケーションを作ろうとしています。


FindControlメソッドはSystem.Web.UI.Controlのメソッドなので
Windowsアプリケーションでは使用できません。
文字列によるコントロール操作のスレッドが参考になると思います。

[追記]
オブジェクトの取得に関してのスレッドも参考になると思います。

[ メッセージ編集済み 編集者: Hasumi 編集日時 2005-02-01 17:33 ]
xxななおxx
ベテラン
会議室デビュー日: 2005/01/18
投稿数: 61
お住まい・勤務地: 東京(練馬)
投稿日時: 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 でコントロールを見たときに
目的のオブジェクトと認識できたり、できなかったりした動作
(私のコードの問題の可能性大)も経験しているので、
私は使ってない方法ですが・・。
論理的には動作すると思いますが・・



甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-01 17:30
引用:

たにくんさんの書き込み (2005-02-01 16:51) より:
私が事前に細かく説明しないのが悪かったのですが、
TextBoxの数が膨大でざっと300個はあるので一つ一つをハッシュに入れると膨大な量になってしまって、、困っています。
TextBox+"i"
という感じで出来たら一番よいのですが
FindControlでエラーが出てしまって他によい方法がありましたら、ご指導お願いします。


VB.NETにはVB6.0のコントロール配列に相当する機能は無いので、同じ事を期待するのは無理がああります。したがって、自分でコントロールを配列に初期化するしかありません。300個のコントロールを配列にしたいと言うことは、コントロールの配置にはきっと規則性があるのでしょ?コントロールを配置する処理も含めて、コード上で行うようにするのが一番労力を減らせると思いますよ。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-01 21:20
 ん〜?300個もあるテキストボックス。。。それが全部「必須入力」だったらどうしよう。どうやって300個も配置できたんだろう?本当に300個も、一度に必要なの?
猫山みやお
大ベテラン
会議室デビュー日: 2004/09/09
投稿数: 119
投稿日時: 2005-02-01 21:53
素直にgrid系のコントロールを使用した方がいいですよ
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-02-01 23:13
引用:
たにくんさんの書き込み (2005-02-01 16:51) より:
TextBoxの数が膨大でざっと300個はあるので一つ一つをハッシュに入れると膨大な量になってしまって、、困っています。

膨大な量って、コード書くのが大変ってことですか?だとするとnewしたときは
どうしました?膨大な量になっていませんか?

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をどっかに表示して、コピペしてソースに貼る。(こういうのではだめ?・・)

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