- - PR -
ActiveXコントロールを動的に参照し、プロパティーの変更・メソッドの起動をするには?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-02 17:08
まずはじめに・・・VB6の質問です。
VB6に関する質問はここではしない方がいいのでしょうが、他に妥当な会議室が見つからなかった為、ここへ質問させて頂きましたm(__)m ActiveXコントロールを自作し参照設定を行った場合には Formからプロパティーの取得や設定・メソッドの起動(?)ができます。 しかし、OCXを動的に参照した場合の記述方法がわかりません。 開発環境 WindowsXP Pro VisualBasic 6.0(SP6) 例えば・・プロパティー1個、メソッド1個のコントロールを作成 〆OCX情報 ・ライブラリ名:Project1 ・クラス名 :UserControl ・プロパティー:PaperName ・メソッド :DataBind 〆標準Exeを新規作成し、Form1のクリックイベントなどへ記述 Dim CtlObj as Object Set CtlObj = Controls.Add(Project1.UserControl, "UCon") With CtlObj .Top = 50 .Left = 50 .Height = 250 .Width = 250 .PaperName = "文字列をセット" ← ここで実行時エラー'438'になります。 .DataBind ← もちろんここでもエラー【オブジェクトとは、このプロパティー又はメソッドをサポートしていません。】 End With ご教授よろしくお願いいたします。 [ メッセージ編集済み 編集者: kshr 編集日時 2005-03-02 17:11 ] | ||||
|
投稿日時: 2005-03-02 17:36
できるかどうかは自信がありませんが・・・
その1 Object 型の代わりに VBControlExtender 型にしてみる その2 with はあきらめて CallByName で設定する のどちらかでだめですか? | ||||
|
投稿日時: 2005-03-02 17:49
ご返答ありがとうございます。
VBControlExtender型でも同様でした。 CallByNameについては知りませんでした。 これから調べてみます。 CallByNameはObjectなら使えるもの? VBControlExtenderでも使用できるもの? ま、一度調べてみます。 ありがとうございました。 [ メッセージ編集済み 編集者: kshr 編集日時 2005-03-02 18:00 ] | ||||
|
投稿日時: 2005-03-02 19:45
Debug.Print CallByName(CtlObj, "PaperName", VbGet) としても、同じエラーコード'438'が表示されました。。。 Dim CtlObj as Object と Dim CtlObj as VBControlExtender の両パターンで試しました。 | ||||
|
投稿日時: 2005-03-03 09:12
解決いたしました。
ご報告まで。 Dim CtlObj as Object Dim CtlObj as VBControlExtender のどちらかを使用し外部OCXを参照した場合に CtlObj.object.PaperName = "文字列をセット" で値のセット、値の取得ができるようになりました。 | ||||
|
投稿日時: 2005-03-03 10:30
お役にはたてませんでしたが
解決されたそうなので ここからは蛇足なんですけど・・・
CallByName は IDispatch(IDispatchEx かも) 経由で呼ばれると思ってたので 失敗するとは思えないのですが・・・? 私の環境(WinXP Pro VB6 SP5)では動作するのですが・・・。 ・・・不思議です。 プロジェクトプロパティの 「使用しない ActiveX コントロールについての情報を削除する」 にチェックが入ってたりしませんか? |
1