■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
|
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った): |
■ ページの共有: |
[ サイト内検索 ]
![]()
カスタム検索
|
#11825-0フォーム間のユーザー定義構造体の引き渡しmoriken1999-12-16(木) 13:30
#11829-0RE#11825:フォーム間のユーザー定義構造体の引き渡しアシュラ1999-12-16(木) 14:05
#11829-0RE#11825:フォーム間のユーザー定義構造体の引き渡しアシュラ1999-12-16(木) 14:05
morikenといいます。 しばらくVBを触っていなかったのですが、最近少しVBでプログラムすることになりまして、 問題が発生したので質問させていただきたいと思います。 VBは5.0を使用しています。 質問の内容ですが、タイトルにもありますが、フォーム間のユーザー定義構造体の受け渡しについてです。 1. 2つのフォームモジュール、Form1およびForm2があります。 ユーザー定義構造体(Type TYPE_LONG)をひとつの標準モジュールの中で public として定義しています。 ----- Module1 ----- Public Type TYPE_LONG lValue1 As Long lValue2 As Long lValue3 As Long End Type ----- Module1 ----- 2. Form1において、グローバル域に private で上記の構造体を宣言しています。 ----- Form1 ----- Private myType As TYPE_LONG ----- Form1 ----- 3. Form1に存在するコマンドボタンをクリックしたとき、Form2をロードして、Form2の public 関数に この構造体の内容を引きたわしたいのですが、ここで問題が発生します。 ----- Form1 ----- Private Sub cmdShow_Click() Load Form2 myType = Form2.Init(myType) End Sub ----- Form1 ----- Form2のInit関数の定義は次のようになっています。 ----- Form2 ----- Public Function Init(myType As TYPE_LONG) As TYPE_LONG Init = myType End Function ----- Form2 ----- 実行しようとすると、上記Form2のInit定義部分が反転表示され、 「ユーザー定義型や固定長の文字列型は、オブジェクトモジュールのパブリックメンバのデータ型として宣言することはできません。 プライベートモジュールはパブリックオブジェクトモジュールのパブリックメンバとして宣言することはできません。」 というエラーメッセージが表示されます。 Init を private で宣言すればコンパイルは通るのですが、当たり前ですがForm1からInit関数が呼び出せません。 このような使用方法は、VBでは使用できないのでしょうか。 上記の myType 自体を public として宣言することでどのフォームモジュールからも使用できるようには出来ますが、 そのようにグローバルな変数として使用したくはありません。 あくまで引数の引き渡しで行いたいのですが、このような場合はどうすればよいのでしょうか? 説明がわかりにくいかも知れませんが、なにとぞよろしくお願いいたします。
アシュラ1999-12-16(木) 14:05
根本的な解決方法ではないですが一番簡単なのは > ----- Form2 ----- > Public Function Init(myType As TYPE_LONG) As TYPE_LONG > Init = myType > End Function > ----- Form2 ----- を > ----- Form2 ----- > Friend Function Init(myType As TYPE_LONG) As TYPE_LONG > Init = myType > End Function > ----- Form2 ---- とすれば出来ますが・・・・ Public Type TYPE_LONGと宣言した時点でこのユーザー定義型はどのフォーム からも使用できると思いますけど(^_^;) 私ならユーザー定義型をクラスに宣言してクラスのインスタンスを持ったオブジェクト のみユーザー定義型を見える様にしますが・・・・一概にこれがイイともいえませんが(^_^;)
このページと関連する記事:
#39844-0ActiveX DLLのファンクションの引数にユーザー定義型を使いたい2001-03-05(月) 15:22#10500-0VBのクラスとユーザー定義型について1999-11-27(土) 00:49
#28526-0クラスモジュールのメソッドにType型を渡したいのですが、、、2002-05-06(月) 16:12
#60-4ユーザー定義型をクラスモジュールで使う2003-11-06(木) 12:11
#25210-0Publicプロシージャの引数の型2001-12-09(日) 01:14
#1141-1Typeのスコープがよくわからないんですが2004-02-18(水) 22:51
#33694-0エラーの内容・・・2000-11-18(土) 09:05
#2379-1フォームモジュールに構造体を渡したい1999-07-30(金) 18:59
#1303-1パブリックオブジェクトモジュール1999-07-13(火) 13:07
#86-1構造体を引数にする時の宣言について1999-06-19(土) 01:11