写Form设计器尝试(五) 让设计器使用自定义控件

  在“写 Form 设计器尝试 ( ) 在窗体上添加控件”的评论中,热心关注者 Leejee 提出了自定义控件的问题。我于是作了一个小测试,来实现设计器中使用自定义控件。
先要准备一个自定义控件。新建一个 Windows 控件方案,命名为 MyControl, 添加一个名为 ComboBoxField 的用户控件,在该用户控件上放一个 Label 和一个 ComboBox,  生成解决方案。将生成的 dll 文件复制到测试目录 D:/Dotnet
打开设计器方案,在工程中添加对 MyControl.Dll 的引用,在主窗体的代码中添加 Using MyControl; 然后在有形如 toolBoxService.ToolBox.Items.Add( .);的最后加上一行代码:
toolBoxService.ToolBox.Items.Add( new  ToolboxItem( typeof (MyControl.ComboBoxField)));
Assembly a1 = Assembly.LoadFrom( @" D:/Dotnet/MyControl.dll " );
toolBoxService.ToolBox.Items.Add(
new  ToolboxItem(a1.GetType( " MyControl.ComboBoxField " )));
运行方案,效果和前面的一样。好像这里也将动态库文件名以及类型名称硬编码到了代码中,但是可以很简单地做到让这两个字符串从配置文件中读出,这样就可以实现在设计器使用时随意使用自定义控件了
运行方案,确实可以象使用其它标准控件一样使用这个自定义控件。嘿嘿,没有一点意外,还是和以前的试验一样简单。
但是仔细想一想,出问题了,我们需要在工程中添加对控件所在文件的引用,需要在代码中写控件的类名。也就是说我们在写设计器时,就要知道我们要使用哪些自定义控件。而我们在 VS中添加自定义控件时,VS事先并不知道我们要加的是什么。要实现这个功能怎么办?理所当然地要用“反射”。

在工程中删除我们刚才添加的引用,并在主窗体代码中删除我们刚写的那两条语句。
在前面写第二条语句的地方写上:
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值