2011-01-26 33 views
29

VS2010を使用してC#WinFormsアプリケーションを作成しました。私は新しいコントロールを作成したので、同じプロジェクトの一部としてユーザーコントロールを作成するのは初めてです。フォームにユーザーコントロールを配置できません

プロジェクトを再構築すると、新しいコントロールがツールボックスに表示されます。コントロールをツールボックスからフォームにドラッグすると、次のエラーが発生します。

ツールボックスアイテム 'TagGroup'の読み込みに失敗しました。ツールボックスから削除されます。

これは私がユーザーコントロールを作成した唯一の他の時にも起こりました。私はウェブを検索しましたが、私が見つけたほとんどの答えは、別々のアセンブリで制御することに関連していたようでした。 (私が持っているのと同じ問題でたくさんの質問を見つけたことに注意してください。)

誰かが次にどこを見なければならないのでしょうか?

+1

いくつかのコードを表示するのに役立ちます。クラスの宣言とコンストラクタを最低限に見せてください。ただし、クラス全体が最も役立ちます。 –

+2

これを分離します。それは何もないプレーンなUserControl => VSの問題が発生したときに起こりますか?問題はない=>設計時に実行されるコードに注意してください。 –

+0

コンストラクタで何かしますか? IIRCでは、デザイナーはそれを呼び出すことで、外部呼び出しを行うことがないようにすることをお勧めします。 –

答えて

32

私はついにこれを考え出しました。

私が使っているプロジェクトでは、2つのクラスライブラリアセンブリを使用しています。これらは私が議論しているコントロールとは関係ありませんが、私は両方のライブラリがプロパティ|ビルドタブのPlatform Targetを "Any CPU"に設定しているのを見て、見ました。

一方、私のアプリケーションでは、この設定が「x64」に設定されていました。アプリケーションの設定を「任意のCPU」に変更することで、ユーザーコントロールをフォームに配置できるようになりました。

移動図...

+1

この特定の症状がどのようにその問題に由来しているかは完全に奇妙ですが、それも私のために働いていました!ありがとう。 +1 – BenSwayne

+0

ありがとうございます。私の一日を保存:) –

+0

コントロールを持つクラスライブラリの.NETフレームワークがプロジェクトよりも高い場合、同じことが起こることに注意してください。これが許されないのは理にかなっていますが、IDEは 'ちょっと、このコントロールは.NET 4.5.1 dllにあります - プロジェクトを.NET 4.5からアップグレードしてください。 – edhubbell

2

ここに同じ問題があります。私はそれがx64 OSにインストールされたVS2010がまだ32ビットプログラムであるという事実に関係していると推測しています。

もう1つの解決策として、TheFormThisUserControlIsSupposedToBeAddedTo.Designer.csを開き、コードを使用してユーザーコントロールを追加する方法があります。基本的に、あなたはデザイナーがやろうとしている汚い仕事をしています。

それは、それが聞こえるほど難しくありません。既にそのファイルにサンプルコードがたくさんあることを考えてください(たとえば、Designerを使用して追加したボタンなど)。唯一の難しい部分は、フォーム内で右の座標を計算してコントロールを配置することです。

最終的には、Desingerのユーザーコントロールは表示されませんが、デバッグ/実行時に追加されます。

+2

私はVisual Studioの "ビットネス"がこれに関連しているとは思わない。 VSは引き続き64ビットの実行可能ファイルを生成できます。私は、異なるプロジェクトのコンポーネントを使用していたという事実に関連していると思います。異なるプロジェクトを使用していたようです。 –

31

私のアプリケーションは64ビットである必要があります。デザイナーでカスタムユーザーコントロールを使用するために、私は自分のソリューションに新しいプロジェクトを追加しました。この新しいプロジェクトは "AnyCPU"設定を使用し、すべての私のユーザーコントロールを含んでいます。

私のソリューションは、次のプロジェクトが含まれています。私のメインのプロジェクト(Windowsフォームアプリケーション)64ビットでコンパイルし、私の第二のプロジェクトに

  • MyApp.UIを参照している

    • MyAppの。ユーザーコントロールは(クラスライブラリ)のために、「どれCPU」をコンパイルし、含まれているすべての私のユーザーは、魔法のよう

    作品を制御し、それがところで


    きれいだし、およそMicrosoft support articleがありますその問題。

    • 処置:Microsoft Visual Studio統合開発環境(IDE)内で64ビットコンポーネントを使用しようとしました。
    • エラー原因:これは仕様です。 Visual Studioは32ビットプロセスであるため、32ビットモジュールのみを実行できます。 Visual Studioでは、64ビットアセンブリへの参照を追加することができますが、実際に64ビットにコンパイルして実行することはできません。
    • 解決:
      1. "AnyCPU"設定を使用してアセンブリを再構築します。これにより、 コンポーネントは32ビットプロセス(Visual スタジオなど)内または64ビットプロセス内で実行されます。
      2. アセンブリを参照として追加し、実行時にコントロールを動的にロードします( )。 Visual Studio内のデザイナ内で コントロールを使用することはできますが、 コントロールをインスタンス化するコードを記述し、それに応じて プロパティを設定することもできます。

    出典:http://support.microsoft.com/kb/963017

  • +1

    悲しいことに、私のアプリケーションとすべてのコントロールはx64でなければなりません。(彼らは本当にVS x64を作成する必要があります! – NightElfik

    +2

    Yess !!!私はAutoCADのビルドでx64にする以外の方法はありませんでした。さらに、このクラッシュや燃える前に、私がそのフォームに修正を加えなければならなかったら、デザイナーに行ってそれを微調整しなければならなかった...毎時 これは完璧に機能しました! – Alex

    +0

    警告として、このx64/userコントロールの問題は、ユーザーコントロールのフィールドが64ビットアセンブリからロードされた* constant *に設定されているような単純なものによって引き起こされる可能性があります。** x64 dllをUserControlで** ** – jrh

    6

    私もこの問題があったが、答えは私のために合うことができませんでした。私のプロジェクトには、x86とx64を個別にしかターゲットできないいくつかの問題があります。言い換えれば、AnyCPU構成を使用することはできません(これは、各ライブラリのライブラリがAnyCPUに適合しないため、各構成ごとに異なるライブラリを参照するためです)。

    私が思い描いた解決策は、フォームデザイナを使用する必要があるときに、設定をx86に変更することでした。仕事をしてから、x64に戻ってテストしてください。この問題はデザイナーにのみ発生しますが、ソリューションは正常に構築されて実行されます。

    3

    私はVS2015でこの問題を抱えていました。その解決策は簡単であることが判明しました。

    私はカスタムコントロールにグループ化することを目的として、フォームからいくつかの既存のコントロールを切り取り貼り付けてユーザーコントロールを作成しました。カスタムコントロールは問題なく(コンパイルエラーなし)、コントロールを既存のフォームから削除すると、アプリケーションがコンパイルされませんでした。もちろん、新しいコントロールを追加できないと、以前のコントロールを参照するコードをカスタムコントロールを参照するコードに更新できませんでした。

    私がしたのは、アプリケーション全体がコンパイルされるように、ハックとスラッシュ(コメントアウト、一時的なコントロールの作成など)でした。コンパイルした後、カスタムコントロールをフォームにドラッグすることができました(この質問を表示したエラーは発生しません)。私は、コードが適切に新しいカスタムコントロールを参照するようにunhackとunslashする必要がありました。

    +0

    私のために働いて、x86構成で再コンパイルしましたが、今ユーザコントロールを追加できます。 –

    +0

    これ!それを削除するときにビルドエラーが発生した場合初めて問題が発生した場合は、クリーンな再構築が成功するまで問題が残ります。 – Yong

    -1

    GOプロジェクトプロパティの[ビルド]タブで、[ターゲットプラットフォーム]が[AnyCPU]だったことを確認します。

    0

    この問題も発生しましたが、原因は異なります。私の場合、コンポーネント(フォーム)コンストラクタまたはLoadイベントは、リフレクションを使用して特定のインターフェイスを実装したすべてのクラスを見つける別のメソッドを呼び出しました。

    実行時にうまくいく間、設計時に上記の例外が生成されました。 (内部例外として型ロード例外を持つ型初期化例外)。

    0

    午前3時36分の混乱した、疲れたトラブルシューティングの時間は、再び翌日新鮮な心で簡単に解決されます!
    コントロールのファイル名に単純なスペルミスを修正しました。そのため、UserControlの名前と一致していて、きれいになって再構築され、奇妙なおじさんの猫がBobsになりました。 :]

    関連する問題