我想在C#中创建一个自定义控件,我将在我的应用程序中多次使用,但不会在任何其他应用程序中使用。我见过几个网站,解释如何创建自定义控件并将其添加到Visual Studio工具箱中。它们指示您使用自定义控件创建项目,该控件将编译为DLL,然后为应用程序创建新项目,并在工具箱中添加对该DLL的引用。但是,我宁愿让我的应用程序成为一个不依赖于DLL的可执行文件。有没有办法将自定义控件和应用程序放在一个项目中,并且仍然在Visual Studio工具箱中显示自定义控件?或者,如果无法将控件添加到工具箱中,是否有另一种方法可以在应用程序的设计器中查看控件?
答案 0 :(得分:2)
技术在:
要开发项目,您可以像往常一样使用组件(意味着将其作为DLL添加到工具箱中并在项目中引用它)。
要在一个exe文件中内部使用您的DLL,您应该将它(原始的或放气的)添加到项目的资源中。
在Main方法中订阅AppDomain.AssemblyResolve事件:
public static void Main( string[] args )
{
AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve;
}
在事件处理程序中,您应该使用组件解析程序集:
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中提取的这个程序集,但你仍然可以在开发时使用工具箱中的组件。
请注意,每次更改组件时都应该在资源中更新它。