■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#11825-0フォーム間のユーザー定義構造体の引き渡しmoriken1999-12-16(木) 13:30
     #11829-0RE#11825:フォーム間のユーザー定義構造体の引き渡しアシュラ1999-12-16(木) 14:05
#11825-0
フォーム間のユーザー定義構造体の引き渡し
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 として宣言することでどのフォームモジュールからも使用できるようには出来ますが、
   そのようにグローバルな変数として使用したくはありません。
   
   あくまで引数の引き渡しで行いたいのですが、このような場合はどうすればよいのでしょうか?
   
   説明がわかりにくいかも知れませんが、なにとぞよろしくお願いいたします。
#11829-0
RE#11825:フォーム間のユーザー定義構造体の引き渡し
根本的な解決方法ではないですが一番簡単なのは
 
> ----- 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と宣言した時点でこのユーザー定義型はどのフォーム
からも使用できると思いますけど(^_^;)
私ならユーザー定義型をクラスに宣言してクラスのインスタンスを持ったオブジェクト
のみユーザー定義型を見える様にしますが・・・・一概にこれがイイともいえませんが(^_^;)
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)