3

アプリケーションで複数回使用するカスタムコントロールをC#で作成したいのですが、他のアプリケーションでは使用しない可能性があります。カスタムコントロールを作成してVisualStudioツールボックスに追加する方法を説明しているWebサイトをいくつか見ました。DLLにコンパイルするカスタムコントロールを使用してプロジェクトを作成し、アプリケーションの新しいプロジェクトを作成して、ツールボックスにそのDLLへの参照を追加するように指示します。ただし、DLLに依存しない単一の実行可能ファイルにする必要があります。カスタムコントロールとアプリケーションを1つのプロジェクトに入れても、カスタムコントロールをVisual Studioツールボックスに表示する方法はありますか?または、ツールボックスにコントロールを追加できない場合、アプリケーションのデザイナでコントロールを表示する別の方法はありますか?

4

1 に答える 1

2

テクニックは次のとおりです。

  1. プロジェクトを開発するには、通常どおりコンポーネントを使用できます(つまり、コンポーネントをDLLとしてツールボックスに追加し、プロジェクトで参照します)。

  2. 1つのexeファイルでdllを内部的に使用するには、プロジェクトのリソースにdllを(rawまたはdeflatedのいずれかで)追加する必要があります。

  3. Mainメソッドで、AppDomain.AssemblyResolveイベントをサブスクライブします。

    public static void Main( string[] args )
    {            
        AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve;    
    }
    
  4. イベントハンドラでは、コンポーネントを使用してアセンブリを解決する必要があります。

    private static Assembly AppDomain_AssemblyResolve( object sender, ResolveEventArgs args )
        {
            if( args.Name.Contains( "YourComponent" ) )
            {           
                using( var resource = new MemoryStream( Resources.YourComponent ) )
                    return Assembly.Load( resource.GetBuffer() );
            }
    
            return null;
        }
    

その後、アプリはexeから抽出されたこのアセンブリを使用しますが、開発中にツールボックスのコンポーネントを使用することはできます。

コンポーネントが変更されるたびに、リソースで更新する必要があることに注意してください。

于 2010-07-28T21:50:53.693 に答える