- ベストアンサー
フォームのテキストボックスなどの変数名を標準モジュールから参照は可能か?
フォームのテキストボックスなどの変数を標準モジュールの関数から参照する方法を教えてください。 お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>test(form1.Text1.Text) > >Public Function test(コントロール変数パラメータ) > >コントロール変数パラメータ=値を代入 > >End Fuction 可能ですよ。サンプルです。試してみてください。 まず、フォームと標準モジュールを準備してください。 フォーム: Form[Form1]にTextbox[Text1]とCommandButton[Command1]を配置してください。 ([]内は、オブジェクト名です。) Private Sub Command1_Click() Call test(Text1) End Sub 標準モジュール: Public Function test(txt As TextBox) txt.Text = "aaa" End Function CommandButtonを押すと、Textboxに”aaa”と表示されます。 ※Public Function test(txt As ****)の****は、 「Textbox」又は「Object」又は「Control」 いずれでもOKです。 例: Public Function test(txt As Textbox) Public Function test(txt As Object) Public Function test(txt As Control) この辺りは、人それぞれになると思いますが・・・。
その他の回答 (3)
- kagep
- ベストアンサー率23% (171/721)
#2の方の答えでほぼパーフェクトなんですが、助言です。 標準モジュール内に作成した、Public宣言されているプロシージャでの処理に 必要となる値を入手したい、ということならば、 フォームモジュール内のオブジェクトの値を直接見に行くのではなく、 プロシージャを呼び出すときに、引数として呼び出し側から明示的に渡しましょう。 #2の方も触れていますが、もしLoadされていないフォームの中の値を参照しようとすると、 フォームは暗黙的にLoad、つまり起動してしまいます。 これに気がつかないでいて、あとあとバグの原因になってしまうことも少なくないです。 異なるモジュール間での値のやり取りは、きちんと入り口と出口を定めて、 決められたルールの中で限定的に行うべきです。 こうしておかないと、絶対管理できなくなってしまいます。 あとあとソースを追って・・・ということが難しくなるわけですね。 特に第3者には。 という助言でした。
補足
ご教授ありがとうございます。 今回の質問と路線はずれますが、コントロール系の変数名をpublic関数等にパラメータを渡して、その取得パラメータでコントロール系の変数を参照するにはどうすればよいのでしょうか? 例) test(form1.Text1.Text) Public Function test(コントロール変数パラメータ) コントロール変数パラメータ=値を代入 End Fuction これが可能であればかなり処理は楽なのですが・・・ ど素人ながらの質問です。
- jincyan
- ベストアンサー率36% (4/11)
先の回答でTextboxにCaptionプロパティはありませんのでTextプロパティが正解です。 標準モジュールだけでなく別のFromから参照する場合もフォーム名に!(或いは.)を前に付けてやれば参照できます。(但しLoadされていないフォームのオブジェクトを参照するとLoadされますが・・) From1!TEXT1.TEXT 或いは Form1.TEXT1.TEXT でいいのでは
- taka_tetsu
- ベストアンサー率65% (1020/1553)
明示的にNew等で作られていないFormは、暗黙的にフォーム名と同じ名前でオブジェクトが作成されています。 Form1というフォームのText1というテキストボックスのCaptionプロパティを参照したい場合は、 Form1.Text1.Caption という記述になります。
お礼
遅れてすみませんでした。 おかげさまで、VB初心者ながら、よい開発が出来たと思います。本当によい経験をしたと思っています。助かりました。ありがとうございました。