トップ回答者
C#でActiveXコントロール(Word、Excel文書に張り付けられるコントロール)を作成したい

質問
回答
-
まず、Visual Basic/Visual C# では ActiveX コントロールの作成の積極的なサポートは提供されていません。
頑張ればできるかもしれませんが、それなりに茨の道になることを覚悟してください。
また、.NET の DLL は regsvr32 でレジストリに登録することはできません。
.NET Framework に付属する regasm コマンドで実施することになります。
このほか、ActiveX コントロールとして使えるようにするために必要なことが多くあると予想していますが、実際にやったことがないので申し訳ありませんが、アドバイスできかねます。
# 内容は確認していませんが、ぐぐってでてきたもの: http://www.codeproject.com/KB/cs/CreateActiveXDotNet.aspx
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク コンドル 2009年10月8日 0:42
すべての返信
-
いつもお世話になっております。
C#でActiveXコントロールを作成したいと思っています。
要件が実現できれば、ActiveXでなくても構いません。WordやExcelに標準のActiveXコントロールを張り付けることができると
思います。
それと同じように、独自のコントロールを作成して
使いたいと思っています。この場合、どのプロジェクトを選択して、
製造を開始すれば良いのでしょうか?もしよろしければ、アドバイス頂けませんか?
よろしくお願いいたします。
新規プロジェクト作成>C#>WINDOWS>WINDOWSフォームコントロールライブラリからプロジェクトを作成する事で可能です。
また、アセンブリのCOM参照を可能にするには、作成後プロジェクトのプロパティでアプリケーションタグのアセンブリ情報のボタンでCOM参照可にチェックを付けると参照ができるようになると思います。
カスタムコントロールかユーザーコントロールと表現される事が多いと思うので、これらをキーに検索してみればすぐに出てくると思います。
-
細かい環境が分からないので、的外れになるかもしれませんがVS2008とかであれば
新規プロジェクト作成>C#>WINDOWS>WINDOWSフォームコントロールライブラリからプロジェクトを作成する事で可能です。
また、アセンブリのCOM参照を可能にするには、作成後プロジェクトのプロパティでアプリケーションタグのアセンブリ情報のボタンでCOM参照可にチェックを付けると参照ができるようになると思います。
カスタムコントロールかユーザーコントロールと表現される事が多いと思うので、これらをキーに検索してみればすぐに出てくると思います。
chaf_dev様
ご回答ありがとうございました。
環境を明記しておらず、申し訳ございませんでした。
Visual Studio 2008 Professionalです。
教えて頂いたとおりプロジェクトを作成して、コントロールを作成してみました。
作成後、ビルドしてDLLを作成したのですが、そのDLLをレジストリに登録しようとすると
次のメッセージが表示されてしまいます。
-------------------------------------------------------------------------------------------------------------------------
WindowsFormsControlLibrary1.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした。
このファイルが登録されていない可能性があります。
-------------------------------------------------------------------------------------------------------------------------
これは私の手順が間違っているのでしょうか?
作成したDLLをレジストリに登録することで、WordやExcelでActiveXとして使えるのだろうと
思っていたのですが、うまくできませんでした。
作成したコントロールがActiveXになっていないのでしょうか?
もしよろしければ、アドバイス頂けませんか?
ぜひよろしくお願いいたします。 -
chaf_dev様
ご回答ありがとうございました。
環境を明記しておらず、申し訳ございませんでした。
Visual Studio 2008 Professionalです。
教えて頂いたとおりプロジェクトを作成して、コントロールを作成してみました。
作成後、ビルドしてDLLを作成したのですが、そのDLLをレジストリに登録しようとすると
次のメッセージが表示されてしまいます。
-------------------------------------------------------------------------------------------------------------------------
WindowsFormsControlLibrary1.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした。
このファイルが登録されていない可能性があります。
-------------------------------------------------------------------------------------------------------------------------
これは私の手順が間違っているのでしょうか?
作成したDLLをレジストリに登録することで、WordやExcelでActiveXとして使えるのだろうと
思っていたのですが、うまくできませんでした。
作成したコントロールがActiveXになっていないのでしょうか?
もしよろしければ、アドバイス頂けませんか?
ぜひよろしくお願いいたします。
もっとも簡単に使用する方法ですが、自作したコントロールのプロジェクトを使用したいアプリケーションのリューションに追加してアプリケーション側のプロジェクトの参照設定に先ほど追加したユーザーコントロールのプロジェクトを参照に追加します。
後は、一度ビルドするとツールボックスのリストに自作のコントロールが追加されていると思いますので普段通りドラッグアンドドロップでフォームに貼り付ける事が出来ると思います。 -
もっとも簡単に使用する方法ですが、自作したコントロールのプロジェクトを使用したいアプリケーションのリューションに追加してアプリケーション側のプロジェクトの参照設定に先ほど追加したユーザーコントロールのプロジェクトを参照に追加します。
後は、一度ビルドするとツールボックスのリストに自作のコントロールが追加されていると思いますので普段通りドラッグアンドドロップでフォームに貼り付ける事が出来ると思います。
chaf_dev様
ご回答ありがとうございます。
私の説明が悪かったならごめんなさい。
作成したコントロールはフォームに張り付けたいのではなく、
WordやExcelの文書内に張り付けたいのです。
Word文書内に標準で用意されたActiveXのテキストボックスや
コンボボックスを張り付けることができると思います。
それと同じように、独自で作ったコントロールをWord文書内、Excel文書内に
張り付けたいのです。
VB6.0を使っていたときにはActiveX DLLというプロジェクトを作成できて、
そこで作成したDLLをレジストリ登録することで、
WordやExcel文書内に張り付けて使用することができたと記憶しております。
それと同じようなことを、C#で行いたいということは、私の要望です。
しかし、どのプロジェクトを選択してDLLを作成すれば良いか分からず、
質問させて頂いたのです。
ぜひ、よろしくお願いいたします。 -
ご回答ありがとうございます。
読み違えておりました。
私の説明が悪かったならごめんなさい。
作成したコントロールはフォームに張り付けたいのではなく、
WordやExcelの文書内に張り付けたいのです。
Word文書内に標準で用意されたActiveXのテキストボックスや
コンボボックスを張り付けることができると思います。
それと同じように、独自で作ったコントロールをWord文書内、Excel文書内に
張り付けたいのです。
VB6.0を使っていたときにはActiveX DLLというプロジェクトを作成できて、
そこで作成したDLLをレジストリ登録することで、
WordやExcel文書内に張り付けて使用することができたと記憶しております。
それと同じようなことを、C#で行いたいということは、私の要望です。
しかし、どのプロジェクトを選択してDLLを作成すれば良いか分からず、
質問させて頂いたのです。
ぜひ、よろしくお願いいたします。
申し訳ありません。
EXCELから使いたったのですね。
ちょっとどういう方法がベターなのか分からないのですがタイプライブラリに変換する方法がいいのではないかと思います。
RegAsm.exe /tlb UserControlLib.dll /codebase UserControlLib.dll
※RegAsmはシステムディレクトリあたりにあると思うので、探してみてください。
とりあえず、これでVBAのエディタから参照設定で参照可能になると思います。
-
読み違えておりました。
chaf_dev様
申し訳ありません。
EXCELから使いたったのですね。
ちょっとどういう方法がベターなのか分からないのですがタイプライブラリに変換する方法がいいのではないかと思います。
RegAsm.exe /tlb UserControlLib.dll /codebase UserControlLib.dll
※RegAsmはシステムディレクトリあたりにあると思うので、探してみてください。
とりあえず、これでVBAのエディタから参照設定で参照可能になると思います。
ご回答ありがとうございます。
確認してみましたが、私の思うように使えません。
私のイメージをもう一度説明させて頂きます。
WordやExcelの開発タブからActiveXのコントロールをWordやExcelの文書本文に
追加できると思います。
下のイメージです。
上の画像にコントロールの選択画面が表示されていますが、
このコントロールの選択画面で新しいコントロールを追加されるようにしたいのです。
(ほかの方法でも良いのですが、文書内にコントロールを追加したいのです。
本文に張り付けているテキストボックスやコマンドボタンのように使いたいのです。)
VBAの参照設定に追加してみましたが、ここに追加されませんでした。
(別な場所に追加されていて、私に使い方が分からなかっただけかもしれません。)
私の説明が悪くてすいません。
ぜひよろしくお願いいたします。 -
まず、Visual Basic/Visual C# では ActiveX コントロールの作成の積極的なサポートは提供されていません。
頑張ればできるかもしれませんが、それなりに茨の道になることを覚悟してください。
また、.NET の DLL は regsvr32 でレジストリに登録することはできません。
.NET Framework に付属する regasm コマンドで実施することになります。
このほか、ActiveX コントロールとして使えるようにするために必要なことが多くあると予想していますが、実際にやったことがないので申し訳ありませんが、アドバイスできかねます。
# 内容は確認していませんが、ぐぐってでてきたもの: http://www.codeproject.com/KB/cs/CreateActiveXDotNet.aspx
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。- 回答としてマーク コンドル 2009年10月8日 0:42
-
Azulean様
ご回答ありがとうございます。
まず、Visual Basic/Visual C# では ActiveX コントロールの作成の積極的なサポートは提供されていません。
そうですか。
頑張ればできるかもしれませんが、それなりに茨の道になることを覚悟してください。
積極的なサポートがされていないのであれば、選択しない道を選ぼうと思います。
ActiveXを製造するのであれば、C++を選択しようと思います。
また、.NET の DLL は regsvr32 でレジストリに登録することはできません。
.NET Framework に付属する regasm コマンドで実施することになります。
そうなのですね。
知りませんでした。とても勉強になりました。
# 内容は確認していませんが、ぐぐってでてきたもの: http://www.codeproject.com/KB/cs/CreateActiveXDotNet.aspx
参考になりました。
ありがとうございます。
C#での製造は難しそうですので、C++での製造を考えようと思います。
とても参考になりました。
ありがとうございます。