none
C#でActiveXコントロール(Word、Excel文書に張り付けられるコントロール)を作成したい RRS feed

  • 質問

  • いつもお世話になっております。

    C#でActiveXコントロールを作成したいと思っています。
    要件が実現できれば、ActiveXでなくても構いません。

    WordやExcelに標準のActiveXコントロールを張り付けることができると
    思います。
    それと同じように、独自のコントロールを作成して
    使いたいと思っています。

    この場合、どのプロジェクトを選択して、
    製造を開始すれば良いのでしょうか?

    もしよろしければ、アドバイス頂けませんか?
    よろしくお願いいたします。

    2009年10月6日 10:16

回答

  • まず、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
    2009年10月7日 14:54
    モデレータ

すべての返信

  • いつもお世話になっております。

    C#でActiveXコントロールを作成したいと思っています。
    要件が実現できれば、ActiveXでなくても構いません。

    WordやExcelに標準のActiveXコントロールを張り付けることができると
    思います。
    それと同じように、独自のコントロールを作成して
    使いたいと思っています。

    この場合、どのプロジェクトを選択して、
    製造を開始すれば良いのでしょうか?

    もしよろしければ、アドバイス頂けませんか?
    よろしくお願いいたします。

    細かい環境が分からないので、的外れになるかもしれませんがVS2008とかであれば
    新規プロジェクト作成>C#>WINDOWS>WINDOWSフォームコントロールライブラリからプロジェクトを作成する事で可能です。
    また、アセンブリのCOM参照を可能にするには、作成後プロジェクトのプロパティでアプリケーションタグのアセンブリ情報のボタンでCOM参照可にチェックを付けると参照ができるようになると思います。
    カスタムコントロールかユーザーコントロールと表現される事が多いと思うので、これらをキーに検索してみればすぐに出てくると思います。

    2009年10月6日 21:53
  • 細かい環境が分からないので、的外れになるかもしれませんがVS2008とかであれば
    新規プロジェクト作成>C#>WINDOWS>WINDOWSフォームコントロールライブラリからプロジェクトを作成する事で可能です。
    また、アセンブリのCOM参照を可能にするには、作成後プロジェクトのプロパティでアプリケーションタグのアセンブリ情報のボタンでCOM参照可にチェックを付けると参照ができるようになると思います。
    カスタムコントロールかユーザーコントロールと表現される事が多いと思うので、これらをキーに検索してみればすぐに出てくると思います。


    chaf_dev様

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

    環境を明記しておらず、申し訳ございませんでした。
    Visual Studio 2008 Professionalです。

    教えて頂いたとおりプロジェクトを作成して、コントロールを作成してみました。
    作成後、ビルドしてDLLを作成したのですが、そのDLLをレジストリに登録しようとすると
    次のメッセージが表示されてしまいます。

    -------------------------------------------------------------------------------------------------------------------------
    WindowsFormsControlLibrary1.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした。
    このファイルが登録されていない可能性があります。
    -------------------------------------------------------------------------------------------------------------------------

    これは私の手順が間違っているのでしょうか?
    作成したDLLをレジストリに登録することで、WordやExcelでActiveXとして使えるのだろうと
    思っていたのですが、うまくできませんでした。
    作成したコントロールがActiveXになっていないのでしょうか?

    もしよろしければ、アドバイス頂けませんか?
    ぜひよろしくお願いいたします。
    2009年10月7日 1:36

  • chaf_dev様

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

    環境を明記しておらず、申し訳ございませんでした。
    Visual Studio 2008 Professionalです。

    教えて頂いたとおりプロジェクトを作成して、コントロールを作成してみました。
    作成後、ビルドしてDLLを作成したのですが、そのDLLをレジストリに登録しようとすると
    次のメッセージが表示されてしまいます。

    -------------------------------------------------------------------------------------------------------------------------
    WindowsFormsControlLibrary1.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした。
    このファイルが登録されていない可能性があります。
    -------------------------------------------------------------------------------------------------------------------------

    これは私の手順が間違っているのでしょうか?
    作成したDLLをレジストリに登録することで、WordやExcelでActiveXとして使えるのだろうと
    思っていたのですが、うまくできませんでした。
    作成したコントロールがActiveXになっていないのでしょうか?

    もしよろしければ、アドバイス頂けませんか?
    ぜひよろしくお願いいたします。

    もっとも簡単に使用する方法ですが、自作したコントロールのプロジェクトを使用したいアプリケーションのリューションに追加してアプリケーション側のプロジェクトの参照設定に先ほど追加したユーザーコントロールのプロジェクトを参照に追加します。
    後は、一度ビルドするとツールボックスのリストに自作のコントロールが追加されていると思いますので普段通りドラッグアンドドロップでフォームに貼り付ける事が出来ると思います。
    2009年10月7日 4:48
  • もっとも簡単に使用する方法ですが、自作したコントロールのプロジェクトを使用したいアプリケーションのリューションに追加してアプリケーション側のプロジェクトの参照設定に先ほど追加したユーザーコントロールのプロジェクトを参照に追加します。
    後は、一度ビルドするとツールボックスのリストに自作のコントロールが追加されていると思いますので普段通りドラッグアンドドロップでフォームに貼り付ける事が出来ると思います。

    chaf_dev様

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

    私の説明が悪かったならごめんなさい。
    作成したコントロールはフォームに張り付けたいのではなく、
    WordやExcelの文書内に張り付けたいのです。

    Word文書内に標準で用意されたActiveXのテキストボックスや
    コンボボックスを張り付けることができると思います。
    それと同じように、独自で作ったコントロールをWord文書内、Excel文書内に
    張り付けたいのです。

    VB6.0を使っていたときにはActiveX DLLというプロジェクトを作成できて、
    そこで作成したDLLをレジストリ登録することで、
    WordやExcel文書内に張り付けて使用することができたと記憶しております。
    それと同じようなことを、C#で行いたいということは、私の要望です。

    しかし、どのプロジェクトを選択してDLLを作成すれば良いか分からず、
    質問させて頂いたのです。

    ぜひ、よろしくお願いいたします。
    2009年10月7日 5:14
  • ご回答ありがとうございます。

    私の説明が悪かったならごめんなさい。
    作成したコントロールはフォームに張り付けたいのではなく、
    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のエディタから参照設定で参照可能になると思います。




    2009年10月7日 8:13
  • 読み違えておりました。
    申し訳ありません。
    EXCELから使いたったのですね。
    ちょっとどういう方法がベターなのか分からないのですがタイプライブラリに変換する方法がいいのではないかと思います。
    RegAsm.exe /tlb UserControlLib.dll /codebase UserControlLib.dll
    ※RegAsmはシステムディレクトリあたりにあると思うので、探してみてください。
    とりあえず、これでVBAのエディタから参照設定で参照可能になると思います。
    chaf_dev様

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

    確認してみましたが、私の思うように使えません。

    私のイメージをもう一度説明させて頂きます。
    WordやExcelの開発タブからActiveXのコントロールをWordやExcelの文書本文に
    追加できると思います。
    下のイメージです。
     

    上の画像にコントロールの選択画面が表示されていますが、
    このコントロールの選択画面で新しいコントロールを追加されるようにしたいのです。
    (ほかの方法でも良いのですが、文書内にコントロールを追加したいのです。
     本文に張り付けているテキストボックスやコマンドボタンのように使いたいのです。)
    VBAの参照設定に追加してみましたが、ここに追加されませんでした。
    (別な場所に追加されていて、私に使い方が分からなかっただけかもしれません。)

    私の説明が悪くてすいません。
    ぜひよろしくお願いいたします。
    2009年10月7日 8:37
  • まず、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
    2009年10月7日 14:54
    モデレータ
  • Azulean様

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

    まず、Visual Basic/Visual C# では ActiveX コントロールの作成の積極的なサポートは提供されていません。
    頑張ればできるかもしれませんが、それなりに茨の道になることを覚悟してください。
    そうですか。
    積極的なサポートがされていないのであれば、選択しない道を選ぼうと思います。
    ActiveXを製造するのであれば、C++を選択しようと思います。


    また、.NET の DLL は regsvr32 でレジストリに登録することはできません。
    .NET Framework に付属する regasm コマンドで実施することになります。

    そうなのですね。
    知りませんでした。とても勉強になりました。


    # 内容は確認していませんが、ぐぐってでてきたもの: http://www.codeproject.com/KB/cs/CreateActiveXDotNet.aspx

    参考になりました。
    ありがとうございます。


    C#での製造は難しそうですので、C++での製造を考えようと思います。
    とても参考になりました。
    ありがとうございます。
    2009年10月8日 0:42