我想在 C# 中创建一个自定义控件,我将在我的应用程序中多次使用它,但不太可能在任何其他应用程序中使用。我看过几个网站,它们解释了如何创建自定义控件并将其添加到 Visual Studio 工具箱中。他们指示您使用可编译为 DLL 的自定义控件创建一个项目,然后为应用程序创建一个新项目并在工具箱中添加对该 DLL 的引用。但是,我宁愿我的应用程序是一个不依赖于 DLL 的单个可执行文件。有没有办法将自定义控件和应用程序放在一个项目中,并且自定义控件仍然出现在 Visual Studio 工具箱中?或者,如果无法将控件添加到工具箱,是否有另一种方法可以在应用程序的设计器中查看控件?
问问题
1325 次
1 回答
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 中提取的此程序集,但您仍然可以在开发时使用工具箱中的组件。
请注意,每次更改组件时都应在资源中更新它。
于 2010-07-28T21:50:53.693 回答