- 題名: 複数階層のUserControlより親フォームオブジェクトの取得
- 日時: 2004/12/02 17:48:42
- ID: 7795
- この記事の返信元:
- (なし)
- この記事への返信:
- [7796] Re[1]: 複数階層のUserControlより親フォームオブジェクトの取得2004/12/02 18:23:43
- ツリーを表示
すみません、VBじゃないし親子関係じゃないし回答になってないかも知れません。
私はこのような時は強引に勝手に下記のようなチェインを作ってしまいます>.<
class classB{
public classC c;
public classB(classC X) {//クラスBのコンストラクタ X は局所変数
c = X;
}
}
class classA{
public classB b;
public classC c;
public classA(classB X){//クラスAのコンストラクタ X は局所変数
b = X;
c = b.c;
}
}
これじゃあ、クラスのスパゲッティ!!
もっとうまい方法があると思います。誰か教えて欲しいですね。
こんにちは、じゃんぬねっと です。
■No7801に返信(ねくすかさんの記事)
> (A)の一回目のParentでは(B)ユーザーコントロールが返って来ます。
親コンテナがユーザーコントロールならば、ユーザーコントロールが返ります。
> なのでParentのさらにParentをと考えたのですがうまく取れません。
そのコントロール自身の、Parent プロパティは取得できるのですが、
動的に、別のコントロールの Parent を見に行くことはできないようです。
ですので、親であるユーザーコントロールの Parent をプロパティで公開すれば良いです。
> 実際に実行時エラーが発生する場所でウォッチウィンドウを
> 開き、(A).Parentを参照するとそのParentプロパティに
> 親フォームが入っているのですが。
ええ、確かに入ってますね (w
しかし、コードで参照しようとするとコンパイルエラーになってしまいます。
> どうにか、最末端のユーザーコントロールから
> 親フォームのオブジェクトを取得する方法はないでしょうか?
こういう感じになりますね。
Source:-------------------------------------------------------------------
' ユーザーコントロール (親)
Option Explicit
' 親Formを返すプロパティ (読み取り専用)
Public Property Get ParentForm() As Form
If TypeOf Parent Is Form Then
Set ParentForm = Parent
End If
End Property
---------------------------------------------------------------------------
' ユーザーコントロール (子)
Option Explicit
Private Sub Hoge()
Dim hParent As CtrlParent
Dim hForm As Form
' 親コントロールがユーザーコントロール(親)か
If TypeOf Parent Is CtrlParent Then
' CtrlParent を取得
Set hParent = Parent
' CtrlParent の公開プロパティから、親フォームを取得
Set hForm = hParent.ParentForm
' その親フォームのタイトルを表示してみるテスト
Call MsgBox(hForm.Caption)
End If
End Sub
---------------------------------------------------------------------------
ユーザーコントロールより親フォームを
取得したいと思っています。
まず、ユーザーコントロール(A)を作成し、
そのAを貼り付けたユーザーコントロール(B)を
作成します。
そして、フォームに(B)を貼り付け、
(A)から一番上位のフォームを検索したいと
思っています。
(B)からは
Dim frmParent As Form
Set frmParent = B.Parent
で取得できるのですが、
(A)からは
Dim frmParent As Form
Set frmParent = A.Parent.Parent
とすると
「実行時エラー'438'
オブジェクトは、このプロパティまたは
メソッドをサポートしていません。」
となってしまいます。
どなたかこのような複数層のユーザーコントロールの
最末端(もしくは中間)より
親フォームを取得する方法をご存知の方いませんか?
開発環境は
Win2K+VB6(SP6)です。