[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/03/10(Sat) 13:54
投稿者名:ムキア
Eメール:
URL :
タイトル:
ユーザコントロールを動的に作成
こちらのページを参考にして色々なユーザコントロールを作成しました。
メイン画面に全てのユーザコントロールを貼り付けユーザコントロールのVisibleをFalse。
押下されたボタンに従いVisibleをTrue。
bUtton1 = UserControl1表示 bUtton2 = UserControl2表示
としていたのですが、どうしても起動時に時間がかかってしまいます。

動的に作成する方法を教えていただけないでしょうか。
よろしくお願いします。

投稿時間:2007/03/10(Sat) 17:02
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re: ユーザコントロールを動的に作成
> メイン画面に全てのユーザコントロールを貼り付けユーザコントロールのVisibleをFalse。
> 押下されたボタンに従いVisibleをTrue。
> bUtton1 = UserControl1表示 bUtton2 = UserControl2表示
> としていたのですが、どうしても起動時に時間がかかってしまいます。

ロジックや画面構成を見直した後でも時間がかかるとしたら、それは仕方が無いことで。
逃げ手は「暇なときにロードする」例えば起動時にすべてのユーザコントロールをVisibleをFalse
でロードしておきます。

投稿時間:2007/03/12(Mon) 11:03
投稿者名:ムキア
Eメール:
URL :
タイトル:
Re^2: ユーザコントロールを動的に作成
> > メイン画面に全てのユーザコントロールを貼り付けユーザコントロールのVisibleをFalse。
> > 押下されたボタンに従いVisibleをTrue。
> > bUtton1 = UserControl1表示 bUtton2 = UserControl2表示
> > としていたのですが、どうしても起動時に時間がかかってしまいます。
>
> ロジックや画面構成を見直した後でも時間がかかるとしたら、それは仕方が無いことで。
> 逃げ手は「暇なときにロードする」例えば起動時にすべてのユーザコントロールをVisibleをFalse
> でロードしておきます。

起動時に全てのユーザコントロールをロードすると数分かかってしまいます。
その中にはユーザーによっては不要なユーザコントロールもある為、
ボタン押下時に必要なユーザコントロールを作成する手法を考えております。

Private Sub btnAdd_Click()
Set extObj = Controls.Add("VB.CommandButton", "btnNew")
With Controls("btnNew")
.Caption = "NEWボタン"
.Width = 1000
.Height = 500
.Visible = True
End With
End Sub
みたく、ボタンをユーザコントロールにしたいのですが、どうすれば良いのかと。

言葉が足らず申し訳ありませんでした。
よろしくお願いします。

投稿時間:2007/03/12(Mon) 11:34
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re^3: ユーザコントロールを動的に作成
> 起動時に全てのユーザコントロールをロードすると数分かかってしまいます。
> その中にはユーザーによっては不要なユーザコントロールもある為、
> ボタン押下時に必要なユーザコントロールを作成する手法を考えております。

読み返してみたら質問と回答は同じことを言ってたみたいです。失礼をしました。

ユーザコントロールの場合には
Set extObj = Controls.Add("VB.CommandButton", "btnNew") の "VB.CommandButton" を
どう書けば良いのという疑問ですか?
それならオブジェクトブラウザを見れば使用できるコントロール名が列挙されていると思います。

投稿時間:2007/03/12(Mon) 12:57
投稿者名:ムキア
Eメール:
URL :
タイトル:
Re^4: ユーザコントロールを動的に作成
> > 起動時に全てのユーザコントロールをロードすると数分かかってしまいます。
> > その中にはユーザーによっては不要なユーザコントロールもある為、
> > ボタン押下時に必要なユーザコントロールを作成する手法を考えております。
>
> 読み返してみたら質問と回答は同じことを言ってたみたいです。失礼をしました。
>
> ユーザコントロールの場合には
> Set extObj = Controls.Add("VB.CommandButton", "btnNew") の "VB.CommandButton" を
> どう書けば良いのという疑問ですか?
> それならオブジェクトブラウザを見れば使用できるコントロール名が列挙されていると思います。

回答ありがとうございます。
解決することが出来ました。

投稿時間:2007/03/12(Mon) 16:16
投稿者名:ムキア
Eメール:
URL :
タイトル:
Re^4: ユーザコントロールを動的に作成
度々すいません。

ユーザコントロール1を表示してからユーザコントロール2を表示させる際、
UserControl1.Visible=False ではなくアンロードさせたい場合、
なにか手はあるのでしょうか。

投稿時間:2007/03/12(Mon) 17:00
投稿者名:ガッ
Eメール:
URL :
タイトル:
Re^5: ユーザコントロールを動的に作成
> 度々すいません。
>
> ユーザコントロール1を表示してからユーザコントロール2を表示させる際、
> UserControl1.Visible=False ではなくアンロードさせたい場合、
> なにか手はあるのでしょうか。
横から失礼します;
Option Explicit
'Form1:
'1 ユーザコントロール UserControl1 及び UserControl2 をプロジェクトに追加
'2 プロジェクトのプロパティで、使用しないActiveXコントロールについての情報を削除する をオフに
'3 実行
Private WithEvents btn      As CommandButton
Private WithEvents ctl      As VBControlExtender

Private Sub Form_Load()
    'ボタンを追加
    Set btn = Me.Controls.Add("VB.CommandButton", "btn")
    With btn
        .Move 0, 0, 1000, 1000
        .Caption = "Click"
        .Visible = True
    End With
End Sub

Private Sub btn_Click()
    Static flag             As Boolean
    
    'コントロールを削除
    On Error Resume Next
        Call Me.Controls.Remove("ctl")
    On Error GoTo 0
    
    'コントロールを追加
    If flag Then
        Set ctl = Me.Controls.Add("Project1.UserControl1", "ctl")
    Else
        Set ctl = Me.Controls.Add("Project1.UserControl2", "ctl")
    End If
    With ctl
        .Move 0, 1000, 1000, 1000
        .Visible = True
    End With
    
    flag = Not flag
End Sub

多分こんな感じです

投稿時間:2007/03/13(Tue) 10:51
投稿者名:ムキア
Eメール:
URL :
タイトル:
Re^6: ユーザコントロールを動的に作成
> > 度々すいません。
> >
> > ユーザコントロール1を表示してからユーザコントロール2を表示させる際、
> > UserControl1.Visible=False ではなくアンロードさせたい場合、
> > なにか手はあるのでしょうか。
> 横から失礼します;
> Option Explicit
> 'Form1:
> '1 ユーザコントロール UserControl1 及び UserControl2 をプロジェクトに追加
> '2 プロジェクトのプロパティで、使用しないActiveXコントロールについての情報を削除する をオフに
> '3 実行
> Private WithEvents btn      As CommandButton
> Private WithEvents ctl      As VBControlExtender
>
> Private Sub Form_Load()
>     'ボタンを追加
>     Set btn = Me.Controls.Add("VB.CommandButton", "btn")
>     With btn
>         .Move 0, 0, 1000, 1000
>         .Caption = "Click"
>         .Visible = True
>     End With
> End Sub
>
> Private Sub btn_Click()
>     Static flag             As Boolean
>    
>     'コントロールを削除
>     On Error Resume Next
>         Call Me.Controls.Remove("ctl")
>     On Error GoTo 0
>    
>     'コントロールを追加
>     If flag Then
>         Set ctl = Me.Controls.Add("Project1.UserControl1", "ctl")
>     Else
>         Set ctl = Me.Controls.Add("Project1.UserControl2", "ctl")
>     End If
>     With ctl
>         .Move 0, 1000, 1000, 1000
>         .Visible = True
>     End With
>    
>     flag = Not flag
> End Sub
>
> 多分こんな感じです

動作確認問題なく出来ました。
ありがとうございました。

投稿時間:2007/03/12(Mon) 17:02
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re^5: ユーザコントロールを動的に作成
これが良い参考では。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1262482&SiteID=7

投稿時間:2007/03/13(Tue) 10:51
投稿者名:ムキア
Eメール:
URL :
タイトル:
Re^6: ユーザコントロールを動的に作成
> これが良い参考では。
> http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1262482&SiteID=7

参考にさせていただきます。
ありがとうございます。