ユーザーコントロールを標準モジュールから使用するには?

解決


メンマ  2008-10-07 08:10:51  No: 140578

WindowsXP SP2/VB6 
自作のユーザーコントロールを標準モジュールから使用したいのですが
標準モジュールにユーザーコントロールの名称を入力しても参照できま
せんでした。
フォームにユーザーコントロールを貼り付けると標準モジュールから
フォーム経由で使用できるのですが・・・。
(Form1.MakeUC.Start・・・といった指定方法で)

ユーザーコントロールはフォームに貼り付けないと使用できないものなのでしょうか。

よろしくお願いいたします。


魔界の仮面弁士  2008-10-07 21:47:06  No: 140579

> ユーザーコントロールはフォームに貼り付けないと使用できないものなのでしょうか。

ですね。動作には ActiveX の実行ホストが必要なので、UserControl は
  ・フォーム
  ・別のUserControl
  ・PropertyPage
などに貼らないと利用できません。


メンマ  2008-10-08 20:10:40  No: 140580

魔界の仮面弁士様

ご回答ありがとうございます。

UserControlは  ①フォーム②別のUserControl③PropertyPage
に貼って利用・・・

ということで現在②を試していたのですが、自分が考えてることは
実現できない気がしてきました。
最初の質問が意味が違っていましたので以下に訂正させてください。
「ActiveXコントロール(プロジェクトの主UC)を標準モジュール内で
指定することは可能でしょうか。」

ActiveXは作成元のブラウザで作成されるまでは実体?が無いので
標準モジュールからActiveXを呼ぼうとするのはお門違い・・・という事
になるのでしょうか?よろしければご意見いただきたく。

なお③のPropertyPageについてはどんな機能なのか把握していないので
勉強してきます。(--;)


魔界の仮面弁士  2008-10-08 22:21:24  No: 140581

> UserControlは  (1)フォーム(2)別のUserControl(3)PropertyPage
この他には、UserDocument オブジェクトとか。

> ということで現在(2)を試していたのですが
それは駄目でしょう。その親となる UserControl を利用するために
また同じ問題を抱えてしまうので、堂々巡りです。

> 「ActiveXコントロール(プロジェクトの主UC)を標準モジュール内で
> 指定することは可能でしょうか。」

その点は、最初にメンマさん御自身が出された結論と同じ答えです。
>>> フォーム経由で使用できるのですが・・・。

> ActiveXは作成元のブラウザで作成されるまでは実体?が無いので
…あれ。「ブラウザ」ですか?

もしかして、生成したいのは UserControl ではなく、コンパイルされた
ActiveX コントロール(*.ocx ファイル)なのでしょうか。

だとすれば、Form/UserControl/PropertyPage/UserDocument等以外にも
VB6 の DataRepeater コントロール や DHTMLPage オブジェクト、
あるいは HTA や Excel のワークシート、MSForm など、利用可能な
ホストの数が増えてきます。(今回の目的に合致するかどうかは別として)

また、その ActiveX コントロールの実装如何によっては、
  Set X = CreateObject("Project1.UserControl1")
  X.SampleProperty = "data"
  X.SampleMethod "arg1", "arg2"
などとして呼べる事もあります。幾許かの制限はありますけれども。

> PropertyPageについては
ActiveX コントロール(たとえば、CommonDialog や ListView 等) の
『プロパティ ページ』画面を自作するために使われる物です。


メンマ  2008-10-09 02:53:18  No: 140582

>それは駄目でしょう。その親となる UserControl を利用するために
また同じ問題を抱えてしまうので、堂々巡りです。

そうですよね。質問を出した後にこれは無理かも・・・と思い始めていました。

>もしかして、生成したいのは UserControl ではなく、コンパイルされた
ActiveX コントロール(*.ocx ファイル)なのでしょうか。

はい。HTMLからActiveXコントロール(CAB)を指定して使用するといった
ものを作ろうと思っています。そのActiveX内に自作のUC、標準モジュール
が含まれていて、標準モジュールから自作のUC(ActiveXに貼り付け済)を
参照したかったのですが・・・。
まとめますと、自作のUCが貼り付け元UC(ActiveXの大本)、標準モジュール
といった、プロジェクトに含まれてるならどこからでも参照可能な万能オブ
ジェクト(Formのような)にできないかと考えていました。

今では根本的に無茶な考えだった気がします。
自作のUCは貼り付けたActiveX内か、HTML内でしか参照できないですよね・・・。
(プロジェクト内で実体が存在しないのに参照しようとしてました)

ひとまず解決とさせていただきます。
丁寧なご回答、ありがとうございました。作り方を見直してみます。


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

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






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