呼出元のオブジェクトへの参照を取得するには?

解決


reon  2004-12-21 10:48:55  No: 87495  IP: [192.*.*.*]

クラスモジュール内で呼出元のオブジェクトへの参照(フォーム)を取得する  ことはできるのでしょうか?

編集 削除
じゃんぬねっと  URL  2004-12-21 11:14:18  No: 87496  IP: [192.*.*.*]

こんにちは、じゃんぬねっと です。

クラス モジュールってことは VB6 ですよね?

> クラスモジュール内で呼出元のオブジェクトへの参照(フォーム)を取得することはできるのでしょうか?

その "呼び出し元" 自体を渡しちゃうとか。
無数のメソッドで利用するのならば、似非コンストラクタを作成して、
モジュール メンバとして "呼び出し元" 自体を渡すとか...

# もっと高度なお話だったでしょうか?

編集 削除
reon  2004-12-21 13:03:55  No: 87497  IP: [192.*.*.*]

>無数のメソッドで利用するのならば、似非コンストラクタを作成して、
>モジュール メンバとして "呼び出し元" 自体を渡すとか...

難しくてよく分からないです;
もう少し分かりやすくお願いします。

編集 削除
じゃんぬねっと  URL  2004-12-21 13:23:17  No: 87498  IP: [192.*.*.*]

こんにちは、じゃんぬねっと です。

> 難しくてよく分からないです;
> もう少し分かりやすくお願いします。

説明が下手で、判りにくい説明をしてしまったようですね。(^-^A
大変失礼致しました。m(_ _)m

ところで、引数として渡すという点については OK なんですよね?
(でないと以下の説明は無意味になってしまいますが)

クラス モジュールで Private な変数として保持させれば良いのです。
それを、メソッド・プロパティなどで設定しておけば良いのではないでしょうか?

Source:---------------------------------------------------------------

Option Explicit

' プライベート メンバ
Private mFormParent As Form

' 代用コンストラクタ (プロパティで公開しても良い)
Public Sub Constructor(ByRef pForm As Form)
    Set mFormParent = pForm
End Sub

' で、内部のメソッドで扱う時は...
' Private Sub MethodHoge()
'     "mFormParent" を扱えば良い
' End Sub

編集 削除
じゃんぬねっと  URL  2004-12-21 13:25:04  No: 87499  IP: [192.*.*.*]

余計な世話になると思いますが、イベントも受け取りたければ、
  Private WithEvents mFormParent As Form
としてください。

# とは言うものの、呼び出し側を意識した組み方はお勧めできませんが。

編集 削除
reon (こんにちわ^^  2004-12-21 13:37:38  No: 87500  IP: [192.*.*.*]

大変分かりやすいレスありがとうございます。

その方法だと、
'フォーム側

Private mReon as clsReon      'クラスモジュール名:clsReon

Private Sub Form_Load()

   Set mReon = New clsReon
   mReon.Constructor(Me)      '①


End Sub

となりますよね?
個人的に①の部分が気に入らないので、クラスモジュール側で何とかできないのだろうか?  と思ってるのですが・・・無理ですか?

編集 削除
じゃんぬねっと  URL  2004-12-21 13:47:43  No: 87501  IP: [192.*.*.*]

こんにちは じゃんぬねっと です。

> 個人的に①の部分が気に入らないので

はい、私も好きではありません。(^-^;)
というのも、確実性がないのがイヤなんですよね。
VB.NET だと、コンストラクタで引数を強制することが可能ですが、
VB6 だと コンストラクタで別のオーバーロードは使えません。

いくつのメソッドで、親である Form が必要になるかは存じませんが、
毎回、そのメソッドに引数として渡した方が安全でしょうね...。

編集 削除
reon  2004-12-21 13:56:28  No: 87502  IP: [192.*.*.*]

では、そのつど渡す 方法でやってみます。
どうもありがとうございました!

編集 削除