- - PR -
オブジェクトの取得に関して
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-07-16 10:47
VisualBasic.NETを初めて3日になります。
フォーム上にいくつかのコントロールを貼り付けたとき、 それらの名前だとかを取得するにはどのようにすればいいのでしょうか? 私か今まで関わっていた言語?では たとえばテキストボックスの場合 まずテキストボックス型の変数を用意して そこにコントールをいれ、 テキストボックス型の変数.classname というかんじで取得できました。 これがVisualBasic.NETではどのようにやっていいのか分かりません。 最終できにやりたいことは テキストボックスが10あるフォーム上のボタンが押されたら、 それぞれの値を順番に関数にわたし、戻り値によって処理を行う。 というものです。 現状では、関数名(テキストボックス名.text)を10回書いています。 よろしくお願いします。 | ||||
|
投稿日時: 2004-07-16 11:14
まず自分の環境を書きましょう。
VB.NETだけではWindowsアプリなのかWebアプリなのか分かりません。 (たぶんWindowsアプリだと思いますが・・・) また、VS.NETを使っている・いないによっても回答が若干変わることがあります。 >それらの名前 とは何のことでしょう? 最終的にやりたいことも良く分かりませんでした。 差し支えなければ関数部分のコードを提示した方が良いかもしれませんね。 もう少し具体的な内容が分かれば的確な回答を得ることができると思いますが、 初心者さんであれば、MSDNや@ITさんの.NET関連記事、ここの会議室の過去ログを調べてみては如何でしょうか。 #VB初心者さんならなおさら、です。 #ちょっと修正。 _________________ Delphiと切なさと心強さと [ メッセージ編集済み 編集者: まゆりん 編集日時 2004-07-16 11:33 ] [ メッセージ編集済み 編集者: まゆりん 編集日時 2004-07-16 11:34 ] | ||||
|
投稿日時: 2004-07-16 11:39
ありがとうございます。
過去ログを見させてもらっていたところです。 似たような話題がいくつかありました。 まずは環境ですが、マシンにはVisualStudio.NET 2003よりVC#とVBが入っています。 作成しているのはWindowsアプリケーションになります。 現在のコードは、同じ処理を複数回やっている単純な物です。 -------------------------------------------------------------- If IsNumeric(TextBox2.Text) = True Then MessageBox.Show("これは数字です.", "数字") End If If IsNumeric(TextBox3.Text) = True Then MessageBox.Show("これは数字です.", "数字") End If If IsNumeric(TextBox4.Text) = True Then MessageBox.Show("これは数字です.", "数字") End If ・ ・ ・ ---------------------------------------------------------------- これを ------------------------------------------------------ For i = 1 To コントロールの数 もし、タイプがテキストボックスなら ret = 関数をよぶ(引数はテキストボックス.text) NEXT Function Num_check (Byval a As string) As Interger If IsNumeric(a) = TRUE THEN MessageBox.Show("これは数字です.", "数字") return(0) Else Return(-1) End if End function -------------------------------------------------------- のように記述したいと思っています。 たとえば、Control[i].textの用に取得できるのかどうか、 そのあたりを調べています。 | ||||
|
投稿日時: 2004-07-16 11:59
ろろさん、こんにちは。
これを、 For Each Control型変数 In フォーム.Controls もし、タイプがテキストボックスなら ret = 関数をよぶ(引数はテキストボックス.text) Next みたいな感じにすればできると思います。 | ||||
|
投稿日時: 2004-07-16 12:09
フォーム名.Controls.Count
でフォーム内のコントロール数が取れますので、 後はそのコントロールがテキストボックスかどうか判定してあげて、 フォーム名.Controls[添え字].Textで入力値が取得できるはずです。 #やり方がちょっと違うけど、かぶっちゃいました。 _________________ Delphiと切なさと心強さと [ メッセージ編集済み 編集者: まゆりん 編集日時 2004-07-16 12:11 ] | ||||
|
投稿日時: 2004-07-16 12:17
NAL-6295です。
コントロールコレクションから特定タイプのコントロール群を再帰的に抽出する。 http://blog.livedoor.jp/nal_6295/archives/286383.html 参考になれば。 | ||||
|
投稿日時: 2004-07-16 13:41
きくちゃんさん、まゆりんさん、NAL-6295さんありがとうございました。
おかげさまでうまく処理が作れました。 今回は、 ------------------------------------------------- For Each c In TabPage2.Controls If TypeOf c Is TextBox Then MsgBox(c.Text) End If Next ------------------------------------------------- このように書きました。 (関数は、手直しのため、メッセージボックスで代用しています。) まゆりんさんの方法は前の言語でやっていた方法なので、これも試してみたいと思います。 | ||||
|
投稿日時: 2004-07-16 14:03
補足ですが、コントロールの中に、コントロールを保持するような場合(例えば、パネルの中にテキストボックスを持つ等・・・)このロジックだけだと、パネルは取得できてもテキストボックスは取得できないといった状態となるので、将来同じような場面に出くわした時は、再帰的に取得する事をお薦めします。 |
1