動的に作成したユーザーコントロールをコンテナに配置したい

解決


るーちゃん  2006-12-02 00:52:43  No: 134418

久しぶりに質問します。
宜しくお願いします。

環境は、VB6.0とWindowsXPです。。

Command1_Clickのイベント処理内で、

まず、
Set mFrame = Me.Controls.Add("VB.PictureBox", "aaaa")
としてフォーム上にピクチャボックスを動的作成して
mFrame.Visible = True
で、ピクチャを表示します。

次に、
Set mExit = Me.Controls.Add("Project1.uctlCmdBtn", "bbbb")
として自作のユーザーコントロールmExitを生成して
mFrame.Container = mExit.Container
としてコンテナの上にmExitを配置したいのですが、
mExitのコンテナは動的に作成したときには存在しないようなんです。
もちろん、普段どおりフォームに直貼りした場合にはContainerは存在
しています。
(結果、PictureBox上に配置されず、フォーム上に配置されます)
mFrameとmExitはprivate変数です。
動的に作成した状況で、コンテナに配置する方法をご教授いただけると
助かります。


るーちゃん  2006-12-02 01:45:15  No: 134419

すいません、お騒がせしました。
自己解決してしまいました。

上記質問中、
mFrame.Container = mExit.Container
は、
Set mExit.Container = mFrame (反対でした)
とし(しかし、mFrame.Containerとしないというのが、理屈が分かりませんが)、
uctlCmdBtnコントロールに以下の自作プロパティを追加することで
解決できました。

Public Property Get Container() As Object
    Set Container = UserControl.Extender.Container
End Property
Public Property Set Container(Value As Object)
    Set UserControl.Extender.Container = Value
End Property

オブジェクトブラウザでみると、ContainerというのはObject型の
ようでした。
Getの方は不要っぽいです。


魔界の仮面弁士  2006-12-02 01:53:40  No: 134420

Add メソッドで、コンテナ指定の引数を省略しなければ良いのでは?


るーちゃん  2006-12-02 02:10:42  No: 134421

魔界の仮面弁士様

いつもお世話になっています。

Addメソッドの引数にありました。(すいません、自分の過去の
ロジックをそのまま使って修正していました。ご指摘の通り
パラメータに書くことが出来ますね orz)

ご指摘の内容での記述の方が簡便なので、修正したいと思います。

ところで、全く関係ない質問で恐縮なんですが、

ここの掲示板がVB初心者掲示板と、Q&Aの2種ありますが、
使い分け方がわかりません。。。どっちに書いてもいいのですか?


魔界の仮面弁士  2006-12-02 02:13:13  No: 134422

# 遅かった。(汗

> Set mExit.Container = mFrame
コンテナ指定無しで Controls.Add し、後から、その追加コントロールの
Container プロパティを修正するという手法ですね。

それでも出来ますが、Add 時に指定しまった方が楽かと思いますよ。

> mExitのコンテナは動的に作成したときには存在しないようなんです。
そんなはずは無いと思いますが…。
(実際、Container プロパティを確認してみても、Nothing ではありませんでした)

ヘルプにも、Controls.Add 時にコンテナ指定を省略すると、
「Controls コレクション自体のコンテナが既定値として使用される」と
書かれていますから、上記では「Me」がコンテナになっているはずです。


るーちゃん  2006-12-02 02:19:21  No: 134423

>そんなはずは無いと思いますが

私の書き方が変でした。
コンテナが存在しない、のではなくて、
Containerプロパティが出現していないに
読み替えていただけませんでしょうか(^^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加