久しぶりに質問します。
宜しくお願いします。
環境は、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変数です。
動的に作成した状況で、コンテナに配置する方法をご教授いただけると
助かります。
すいません、お騒がせしました。
自己解決してしまいました。
上記質問中、
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の方は不要っぽいです。
Add メソッドで、コンテナ指定の引数を省略しなければ良いのでは?
魔界の仮面弁士様
いつもお世話になっています。
Addメソッドの引数にありました。(すいません、自分の過去の
ロジックをそのまま使って修正していました。ご指摘の通り
パラメータに書くことが出来ますね orz)
ご指摘の内容での記述の方が簡便なので、修正したいと思います。
ところで、全く関係ない質問で恐縮なんですが、
ここの掲示板がVB初心者掲示板と、Q&Aの2種ありますが、
使い分け方がわかりません。。。どっちに書いてもいいのですか?
# 遅かった。(汗
> Set mExit.Container = mFrame
コンテナ指定無しで Controls.Add し、後から、その追加コントロールの
Container プロパティを修正するという手法ですね。
それでも出来ますが、Add 時に指定しまった方が楽かと思いますよ。
> mExitのコンテナは動的に作成したときには存在しないようなんです。
そんなはずは無いと思いますが…。
(実際、Container プロパティを確認してみても、Nothing ではありませんでした)
ヘルプにも、Controls.Add 時にコンテナ指定を省略すると、
「Controls コレクション自体のコンテナが既定値として使用される」と
書かれていますから、上記では「Me」がコンテナになっているはずです。
>そんなはずは無いと思いますが
私の書き方が変でした。
コンテナが存在しない、のではなくて、
Containerプロパティが出現していないに
読み替えていただけませんでしょうか(^^;
ツイート | ![]() |