SharpDevelop浅析_5_Windows Forms Designer
自己动手创建应用程序界面设计器
1、Demo界面及功能解释
2、Demo实现简述
3、参考资料
Demo下载
1、Demo界面及功能解释
编译并运行程序,界面如下:
图1:

图2:

功能概述:
a, 窗体左侧为工具栏,可以单击、双击、拖曳的方式来添加控件
b, 窗体右侧为属性(事件)窗口及控件(浏览)选择Combo
c, 窗体中部包括设计器及代码查看Tab页
d, 窗体顶部实现了编辑、对齐、运行等命令项
2、Demo实现简述
a, 设计器的核心是.NET框架提供的DesignSurface类、ServiceContainer类
b, 设计器的扩展点(自定义部分)是通过向ServiceContainer添加自动定义服务类(IOC模式?)或订阅服务类的事件……
c, Demo中的使用或创建的服务类包含了ISelectionService, IComponentChangeService MenuCommandService, CustomToolboxService, NameCreationService, DesignerEventService, EventBindingService.
d, 补充说明: Demo左侧工具栏项目是通过\data\SharpDevelopControlLibrary.xml配置文件定义;窗口中部的代码查看页中使用了SharpDevelop的TextEditorControl.
3、参考资料
关于自定义窗体设计器的具体设计过程请参照如下资源:
利用 .NET Framework 2.0 创建并宿主自定义的设计
Create And Host Custom Designers With The .NET Framework 2.0 (英文原文)
Hosting Windows Forms Designers
沧海月明 "写Form设计器尝试"系列
Demo中左侧工具栏的控件使用了 纶巾客 写的一个控件:
制作VS风格的Toolbox控件
对该控件的主要修改如下:
ToolBoxItem类添加了Tag及Image属性以存储Tag数据及显示图片
ToolBox增加了SelectedItemChanged, ItemDoubleClicked, ItemDragStart事件
--------------------------------------------------------------------------------------------------------------------------
SharpDevelop浅析系列这一阶段的文章基本完成了;
暂未涉及到Project组织方式, Debugger 及其它一些Addin项目的分析;学以致用,如果以后有应用需求,也可能会再来补充分析些其它有意思的项目吧...
评论
回复 引用 查看
谢谢, 这个小程序也只能是当作个demonstration罢了
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
及简介又方便
回复 引用 查看
@biean
谢谢支持
@OnlyLiu
@ 菲
gtk# ? 不懂
回复 引用 查看
如何根据C#源代码(*.cs)生成CodeCompileUnit
回复 引用 查看
.NET框架提供了由 CodeCompileUnit 生成.cs, .vb文件,反过来的转换好像是未直接提供。 如何实现可能涉及词法分析等,具体可参见SharpDevelop将源码转换为其自定义CodeCompileUnit相关对象的方法,这方面技术我也未作深入研究
回复 引用 查看
回复 引用 查看
想问问楼主,我想开发个模型设计器,不知道如何下手,如果有时间和机会请赐教,谢谢!
例如:http://www.cnblogs.com/ClarkChan/archive/2007/05/26/760889.html
回复 引用 查看
如果你想定制属性页的显示内容或格式, 可搜一下如何扩展PropertyGrid控件
@Clark Chan
上面的Demo只是在微软设计器的核心以外作一些服务扩展/定制, vs2005中可以画实体关系图,应该有提供相关的Service接口. 具体是什么我也爱莫能助喽 :(
回复 引用 查看
我想做一个,不知道可不可以实现??请楼主赐教!!谢谢!!
回复 引用 查看
语法高亮显示: 只须配置Xml文件即可实现,应该是已有相关的配置文件了
自动完成: 关键词的自动完成当前版本的SharpDevelop好像未作支持;而已有的自动完成是通过类模型来提供数据的,C语言里面好像没有类的概念.不过你要针对某些输入提供一些自动完成功能可以参见TextEditor控件的自动完成数据接口. 代码提示有类似的接口
编译: 调用外部工具编译源码,应该是可以实现的,
回复 引用 查看
说实在的,这点令我有点失望。估计还是大家对它的研究和应用可能都不够深入吧。
我草草的研究了一下,就觉得有一点很不好。代码中到处要编辑那么多命名字符串,这难道不会引起更多的错误?而且效率低下,查对那些字符串条目,不是一件轻松的事。约定实在太多。
另外,我对它的资源国际化管理方式相当反感。虽说有一功能:即时更改界面的语言,然而,这也是其在资源管理方面拙劣设计的副产品而已。说实在的这功能,也没什么实用性,哪个用户吃饱了撑的,把语言切换当活儿干?说到根本上,这也取决了 SD 本身在设计功能上的虚弱,它不能处理多语言设计,处处要靠手工编辑。为了凑合这一点,SD 的作者采用了目前的资源管理方式。即时更改语言功能成了掩饰之笔了。SD 的资源管理方式,是最不可取的。即使退一步就谈界面语言更改,我倒认为,只要重启后应用新设定的语言选项,这已经足够了。
关于耦合性和正交性,历来都是设计上的难点。SD 总体上还算做得不错,插件管理有 Reference 和 Conflict 定义,这可以适当地指明插件之间的依赖关系。
还有其他许多不明白之处,一时还不太好说,继续研究吧。
总体感觉,跟 VS 相比 SD 实在差得远了去了。不要跟我说,SD 的作者才多少人,还只是业余干干的。差距永远无法掩盖,而且照目前的情况,差距只会越来越大。模仿只能被别人甩得越远。
我认为,对于 SD,AddInTree 和 TextEditor 是值得研究的,其他的不看也罢。
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
我的意思是根据CodeCompileUnit生成我想要的代码,而不限于c#或者VB
如果可以的话,做一个这样的工具来生成适合自己公司编码规范的代码不是太帅了。
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
回复 引用 查看
踏破铁鞋无觅出...
谢了,
拿回去好好学习
回复 引用 查看