同一项目中的定制控制和应用

时间:2010-07-28 21:17:17

标签: c# visual-studio custom-controls project toolbox

我想在C#中创建一个自定义控件,我将在我的应用程序中多次使用,但不会在任何其他应用程序中使用。我见过几个网站,解释如何创建自定义控件并将其添加到Visual Studio工具箱中。它们指示您使用自定义控件创建项目,该控件将编译为DLL,然后为应用程序创建新项目,并在工具箱中添加对该DLL的引用。但是,我宁愿让我的应用程序成为一个不依赖于DLL的可执行文件。有没有办法将自定义控件和应用程序放在一个项目中,并且仍然在Visual Studio工具箱中显示自定义控件?或者,如果无法将控件添加到工具箱中,是否有另一种方法可以在应用程序的设计器中查看控件?

1 个答案:

答案 0 :(得分:2)

技术在:

  1. 要开发项目,您可以像往常一样使用组件(意味着将其作为DLL添加到工具箱中并在项目中引用它)。

  2. 要在一个exe文件中内部使用您的DLL,您应该将它(原始的或放气的)添加到项目的资源中。

  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;
        }
    
  5. 然后你的应用程序将使用从你的exe中提取的这个程序集,但你仍然可以在开发时使用工具箱中的组件。

    请注意,每次更改组件时都应该在资源中更新它。