DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB.NETでフォーム上にカスタムActiveXを生成してメソッドを呼び出すには

環境/言語:[Windows7 VB.NET]
分類:[.NET]

こんにちは。
VB.NETでフォームにカスタムコントロール(ActiveX)を貼り付けてそのメソッドやプロパティを呼びたいのですが、キャストしようとするとエラーになってしまいます。

まず、VBのプロジェクトで、CUSTOM.ControlNameという識別子のActiveX(ocx)を参照し、フォームの生成されるタイミングで次のようにコントロールの生成を試みましたがうまくいきません。

ここから
----------------------------------------------------------------------
Option Explicit On
Imports CUSTOM

Public Class Form1
Public controlObj As Object = Nothing
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'OCXを生成する
Dim t As Type
t = Type.GetTypeFromProgID("CUSTOM.ControlName")
controlObj = Activator.CreateInstance(t)

'この後、controlObjをActiveXの型 CUSTOMにキャストして、ActiveXの "Method"というメソッドを呼び出したいのですがうまくいきません。
'どのように呼び出せばよろしいのでしょうか

End Sub
End Class
----------------------------------------------------------------------
ここまで

VB.NETのフォーム上でocxを作成し、そのメソッドを呼び出す基本的なプログラミング方法を教えてください。よろしくお願いします。
■No28939に返信(せにょもんさんの記事)
> まず、VBのプロジェクトで、CUSTOM.ControlNameという識別子のActiveX(ocx)を参照し、フォームの生成されるタイミングで次のようにコントロールの生成を試みましたがうまくいきません。

なぜ、動的に生成しているのでしょうか?
ツールボックスから ActiveX コントロールを追加するやり方はできないのでしょうか?

> t = Type.GetTypeFromProgID("CUSTOM.ControlName")
> controlObj = Activator.CreateInstance(t)
>
> 'この後、controlObjをActiveXの型 CUSTOMにキャストして、ActiveXの "Method"というメソッドを呼び出したいのですがうまくいきません。
> 'どのように呼び出せばよろしいのでしょうか

キャストすることはできません。
なぜなら、CUSTOM 型を知らないからです。キャストするようなコードを書いてもコンパイルエラーになるでしょう。

メソッドを呼び出したいのであれば、遅延バインディングを使えるようにしなければなりません。
http://dobon.net/vb/dotnet/programing/typeinvokemember.html
■No28941に返信(Azuleanさんの記事)
> なぜ、動的に生成しているのでしょうか?
> ツールボックスから ActiveX コントロールを追加するやり方はできないのでしょうか?

VB.NETのプロジェクトで、「COM」というタブでocxを追加したのですが、ツールボックスにそのカスタムコントロールが表示されません。
(ちなみに、システムへの登録は成功しています。)


>
>> t = Type.GetTypeFromProgID("CUSTOM.ControlName")
>> controlObj = Activator.CreateInstance(t)
>>
>> 'この後、controlObjをActiveXの型 CUSTOMにキャストして、ActiveXの "Method"というメソッドを呼び出したいのですがうまくいきません。
>> 'どのように呼び出せばよろしいのでしょうか
>
> キャストすることはできません。
> なぜなら、CUSTOM 型を知らないからです。キャストするようなコードを書いて
もコンパイルエラーになるでしょう。

カスタムコントロールの型へはキャストできないのですね。それでしたら、その型で直接宣言しなければならないのでしょうか?

また、動的に生成する方法と、静的にフォームに貼り付ける方法を教えていただければ非常にありがたいです。

よろしくお願いします。
■No28942に返信(せにょもんさんの記事)
> VB.NETのプロジェクトで、「COM」というタブでocxを追加したのですが、ツールボックスにそのカスタムコントロールが表示されません。

ツールボックスを右クリックしたメニューから追加していますか?

参照設定から追加するとコントロールをツールボックスに登録できません。
一度、参照設定から削除して、ツールボックスの右クリックメニューのアイテムの追加と削除(だったかな?)から追加してください。


> また、動的に生成する方法と、静的にフォームに貼り付ける方法を教えていただければ非常にありがたいです。

動的な方法はやったことないので何ともいえません。
ただ、いろいろとめんどくさいことが待っていると思います。。。
# 型の問題、解放責任の問題

DOBON.NET | プログラミング道 | プログラミング掲示板