【问题标题】:Custom Control and Application in Same Project同一项目中的自定义控件和应用
【发布时间】:2010-07-28 21:17:17
【问题描述】:
我想在 C# 中创建一个自定义控件,我将在我的应用程序中多次使用它,但不太可能在任何其他应用程序中使用。我看过几个网站,它们解释了如何创建自定义控件并将其添加到 Visual Studio 工具箱中。他们指示您使用可编译为 DLL 的自定义控件创建一个项目,然后为应用程序创建一个新项目并在工具箱中添加对该 DLL 的引用。但是,我宁愿我的应用程序是一个不依赖于 DLL 的单个可执行文件。有没有办法将自定义控件和应用程序放在一个项目中,并且自定义控件仍然出现在 Visual Studio 工具箱中?或者,如果无法将控件添加到工具箱,是否有其他方法可以在应用程序的设计器中查看控件?
【问题讨论】:
标签:
c#
visual-studio
custom-controls
project
toolbox
【解决方案1】:
技术在:
要开发您的项目,您可以像往常一样使用您的组件(意味着将其作为 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中提取的这个程序集,但你仍然可以在开发时使用工具箱中的组件。
请注意,每次更改组件时都应在资源中更新它。