ActiveXコントロールを動的に参照し、プロパティーの変更・メソッドの起動をするには?

解決


kshr  2005-03-02 16:45:04  No: 120010  IP: [192.*.*.*]

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

ご教授よろしくお願いいたします。

編集 削除
魔界の仮面弁士  2005-03-02 19:37:49  No: 120011  IP: [192.*.*.*]

> ActiveXコントロールを自作し参照設定を行った場合には
「参照設定」ではなく、「コンポーネントの追加」なのでは?

> .PaperName = "文字列をセット"  ← ここで実行時エラー'438'になります。
この部分で使えるのは、「コンテナ側(つまりVB6)が提供しているプロパティ」だけです。

「ActiveXコントロール側が提供しているプロパティ」を操作するには、
objectプロパティ もしくは Objectプロパティ を使います。
http://www.microsoft.com/japan/developer/library/vb98/vbproobjectextd.htm

つまりこの場合は、
  .Object.PaperName = "〜"
ですね。
# 普段は、objectプロパティ経由でアクセスする事はめったに無いので、
# objectプロパティの存在自体を知らない人も多いかも。


たとえば、RichTextBoxであればこんな感じ。

Option Explicit
Private Const RTB_LICENSE_KEY As String = "ここにライセンスキーを記述"
Private WithEvents RTB1 As VBControlExtender
Private Sub Form_Load()
    Licenses.Add "RICHTEXT.RichtextCtrl", RTB_LICENSE_KEY
    Set RTB1 = Controls.Add("RICHTEXT.RichtextCtrl", "RTB1")
    RTB1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
    RTB1.Visible = True

    'これはエラー
    'RTB1.BackColor = vbYellow

    'これならOK
    RTB1.object.BackColor = vbYellow
End Sub

編集 削除
kshr  2005-03-03 09:09:02  No: 120012  IP: [192.*.*.*]

>「参照設定」ではなく、「コンポーネントの追加」なのでは?
そうですね。。。お恥ずかしい

># 普段は、objectプロパティ経由でアクセスする事はめったに無いので、
># objectプロパティの存在自体を知らない人も多いかも。
objectプロパティーの存在自体は知ってましたが、用途については知りませんでした。今まで使わなきゃいけない事態にもならなかったですしね。

本当にありがとうございました。
お蔭様で参照する事ができました。

編集 削除