- PR -

オブジェクトの取得に関して

1
投稿者投稿内容
ろろ
会議室デビュー日: 2004/07/16
投稿数: 8
投稿日時: 2004-07-16 10:47
VisualBasic.NETを初めて3日になります。

フォーム上にいくつかのコントロールを貼り付けたとき、
それらの名前だとかを取得するにはどのようにすればいいのでしょうか?

私か今まで関わっていた言語?では
たとえばテキストボックスの場合
まずテキストボックス型の変数を用意して
そこにコントールをいれ、
テキストボックス型の変数.classname というかんじで取得できました。

これがVisualBasic.NETではどのようにやっていいのか分かりません。
最終できにやりたいことは

テキストボックスが10あるフォーム上のボタンが押されたら、
それぞれの値を順番に関数にわたし、戻り値によって処理を行う。
というものです。
現状では、関数名(テキストボックス名.text)を10回書いています。

よろしくお願いします。
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 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
投稿数: 8
投稿日時: 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の用に取得できるのかどうか、
そのあたりを調べています。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-07-16 11:59
ろろさん、こんにちは。

引用:

For i = 1 To コントロールの数
  もし、タイプがテキストボックスなら
  ret = 関数をよぶ(引数はテキストボックス.text)
NEXT


これを、

For Each Control型変数 In フォーム.Controls
  もし、タイプがテキストボックスなら
  ret = 関数をよぶ(引数はテキストボックス.text)
Next

みたいな感じにすればできると思います。
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-07-16 12:09
フォーム名.Controls.Count
でフォーム内のコントロール数が取れますので、
後はそのコントロールがテキストボックスかどうか判定してあげて、
フォーム名.Controls[添え字].Textで入力値が取得できるはずです。

#やり方がちょっと違うけど、かぶっちゃいました。

_________________
Delphiと切なさと心強さと

[ メッセージ編集済み 編集者: まゆりん 編集日時 2004-07-16 12:11 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-07-16 12:17
NAL-6295です。

コントロールコレクションから特定タイプのコントロール群を再帰的に抽出する。
http://blog.livedoor.jp/nal_6295/archives/286383.html

参考になれば。
ろろ
会議室デビュー日: 2004/07/16
投稿数: 8
投稿日時: 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
-------------------------------------------------

このように書きました。
(関数は、手直しのため、メッセージボックスで代用しています。)

まゆりんさんの方法は前の言語でやっていた方法なので、これも試してみたいと思います。

NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-07-16 14:03
引用:

ろろさんの書き込み (2004-07-16 13:41) より:
-------------------------------------------------
For Each c In TabPage2.Controls
If TypeOf c Is TextBox Then
MsgBox(c.Text)
End If
Next
-------------------------------------------------



補足ですが、コントロールの中に、コントロールを保持するような場合(例えば、パネルの中にテキストボックスを持つ等・・・)このロジックだけだと、パネルは取得できてもテキストボックスは取得できないといった状態となるので、将来同じような場面に出くわした時は、再帰的に取得する事をお薦めします。
1

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