分享

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

 昵称13606298 2016-10-20
toolBoxService.ToolBox.Items.Add(new ToolboxItem(typeof(MyControl.ComboBoxField)));

运行方案,确实可以象使用其它标准控件一样使用这个自定义控件。嘿嘿,没有一点意外,还是和以前的试验一样简单。
但是仔细想一想,出问题了,我们需要在工程中添加对控件所在文件的引用,需要在代码中写控件的类名。也就是说我们在写设计器时,就要知道我们要使用哪些自定义控件。而我们在VS中添加自定义控件时,VS事先并不知道我们要加的是什么。要实现这个功能怎么办?理所当然地要用“反射”。

在工程中删除我们刚才添加的引用,并在主窗体代码中删除我们刚写的那两条语句。
在前面写第二条语句的地方写上:

Assembly a1=Assembly.LoadFrom(@'D:\Dotnet\MyControl.dll');
toolBoxService.ToolBox.Items.Add(
new ToolboxItem(a1.GetType('MyControl.ComboBoxField')));

运行方案,效果和前面的一样。好像这里也将动态库文件名以及类型名称硬编码到了代码中,但是可以很简单地做到让这两个字符串从配置文件中读出,这样就可以实现在设计器使用时随意使用自定义控件了

相关章节:
Form设计器尝试() Start
Form设计器尝试() PropertyGrid
Form设计器尝试() 在窗体上添加控件
写Form设计器尝试(四) 修改窗体上的控件属性

后记: 这篇是昨晚写的, 我后来在睡觉时觉得还有点不对, 就是我这个方法是在载入工具箱前就要使用反射, 我猜测VS的做法是在需要使用此控件时才使用反射。这个问题的解决方法是修改ToolboxService。我会在以后的一个较为完善的版本中实现这个功能。2005/11/07

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多