分享

SharpDevelop浅析_5_Windows Forms Designer 自己动手创建应用程序界面设计器

 快乐学习 2008-05-02

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项目的分析;学以致用,如果以后有应用需求,也可能会再来补充分析些其它有意思的项目吧...

posted on 2007-02-25 00:02 lin-zhang 阅读(2283) 评论(25)  编辑 收藏 所属分类: SharpDevelop分析

评论

#1楼  2007-02-26 10:05 钱彦云      
试用了一下,不错。
  回复  引用  查看    

#2楼 [楼主] 2007-02-26 13:40 lin-zhang      
@ 钱彦云
谢谢, 这个小程序也只能是当作个demonstration罢了
  回复  引用  查看    

#3楼  2007-03-13 14:48 Jamskin [未注册用户]
辛苦啦!
  回复  引用  查看    

#4楼  2007-03-18 18:41 OnlyLiu      
辛苦,我需要右击鼠标显示菜单,还没有看


  回复  引用  查看    

#5楼  2007-03-26 16:07 菲 [未注册用户]
你好能指导一下如何gtk#做界面么
  回复  引用  查看    

#6楼  2007-03-27 14:12 biean [未注册用户]
很不错
及简介又方便
  回复  引用  查看    

#7楼 [楼主] 2007-04-03 20:47 lin-zhang      
@Jamskin
@biean
谢谢支持

@OnlyLiu


@ 菲
gtk# ? 不懂
  回复  引用  查看    

#8楼  2007-04-06 13:50 杨磊 [未注册用户]
我也想写一个窗体设计器,请问
如何根据C#源代码(*.cs)生成CodeCompileUnit


  回复  引用  查看    

#9楼 [楼主] 2007-04-08 16:59 lin-zhang      
@杨磊
.NET框架提供了由 CodeCompileUnit 生成.cs, .vb文件,反过来的转换好像是未直接提供。 如何实现可能涉及词法分析等,具体可参见SharpDevelop将源码转换为其自定义CodeCompileUnit相关对象的方法,这方面技术我也未作深入研究
  回复  引用  查看    

我想问问右面的属性页能不能定制,就像左边的工具栏,通过xml文件配置。如果可以应该怎么配
  回复  引用  查看    

#11楼  2007-05-28 21:40 Clark Chan      
lz厉害,佩服!

想问问楼主,我想开发个模型设计器,不知道如何下手,如果有时间和机会请赐教,谢谢!

例如:http://www.cnblogs.com/ClarkChan/archive/2007/05/26/760889.html
  回复  引用  查看    

#12楼 [楼主] 2007-05-29 13:22 lin-zhang      
@郭江涛
如果你想定制属性页的显示内容或格式, 可搜一下如何扩展PropertyGrid控件

@Clark Chan
上面的Demo只是在微软设计器的核心以外作一些服务扩展/定制, vs2005中可以画实体关系图,应该有提供相关的Service接口. 具体是什么我也爱莫能助喽 :(
  回复  引用  查看    

#13楼  2007-06-05 02:58 hfyb      
能不能做一个C的编译环境??如果C也能有这样的高亮显示及自动提示那该有多好啊?
我想做一个,不知道可不可以实现??请楼主赐教!!谢谢!!
  回复  引用  查看    

#14楼 [楼主] 2007-06-05 13:00 lin-zhang      
作一个C的"编辑"环境肯定是可以的, SharpDevelop工具设计时的目标之一就是希望可以用来编辑多种语言,而非特定于.net

语法高亮显示: 只须配置Xml文件即可实现,应该是已有相关的配置文件了
自动完成: 关键词的自动完成当前版本的SharpDevelop好像未作支持;而已有的自动完成是通过类模型来提供数据的,C语言里面好像没有类的概念.不过你要针对某些输入提供一些自动完成功能可以参见TextEditor控件的自动完成数据接口. 代码提示有类似的接口
编译: 调用外部工具编译源码,应该是可以实现的,


  回复  引用  查看    

#15楼  2007-06-13 12:44 a [未注册用户]
看了这么多,关于 SharpDevelop 的插件技术的评论都是正面的。
说实在的,这点令我有点失望。估计还是大家对它的研究和应用可能都不够深入吧。
我草草的研究了一下,就觉得有一点很不好。代码中到处要编辑那么多命名字符串,这难道不会引起更多的错误?而且效率低下,查对那些字符串条目,不是一件轻松的事。约定实在太多。

另外,我对它的资源国际化管理方式相当反感。虽说有一功能:即时更改界面的语言,然而,这也是其在资源管理方面拙劣设计的副产品而已。说实在的这功能,也没什么实用性,哪个用户吃饱了撑的,把语言切换当活儿干?说到根本上,这也取决了 SD 本身在设计功能上的虚弱,它不能处理多语言设计,处处要靠手工编辑。为了凑合这一点,SD 的作者采用了目前的资源管理方式。即时更改语言功能成了掩饰之笔了。SD 的资源管理方式,是最不可取的。即使退一步就谈界面语言更改,我倒认为,只要重启后应用新设定的语言选项,这已经足够了。


关于耦合性和正交性,历来都是设计上的难点。SD 总体上还算做得不错,插件管理有 Reference 和 Conflict 定义,这可以适当地指明插件之间的依赖关系。

还有其他许多不明白之处,一时还不太好说,继续研究吧。

总体感觉,跟 VS 相比 SD 实在差得远了去了。不要跟我说,SD 的作者才多少人,还只是业余干干的。差距永远无法掩盖,而且照目前的情况,差距只会越来越大。模仿只能被别人甩得越远。

我认为,对于 SD,AddInTree 和 TextEditor 是值得研究的,其他的不看也罢。


  回复  引用  查看    

#16楼  2007-08-13 22:56 tmx99 [未注册用户]
这个例子好像没有用SharpDevelop的AddInTree机制吧。可以用AddinTree来实现这个例子吗?
  回复  引用  查看    

#17楼  2007-08-17 10:42 马克 [未注册用户]
请问,怎样在页面上增加自定义控件?例如DevExpress控件。
  回复  引用  查看    

#18楼  2007-08-17 15:36 www. [未注册用户]
继续,爽啊
  回复  引用  查看    

能不能自定义自己的CodeDomProvider呢?
我的意思是根据CodeCompileUnit生成我想要的代码,而不限于c#或者VB
如果可以的话,做一个这样的工具来生成适合自己公司编码规范的代码不是太帅了。


  回复  引用  查看    

如何创建web设计器呢?
  回复  引用  查看    

#21楼  2007-09-29 18:33 sssdddd [未注册用户]
太好了,楼主继续努力,我本打算写一个窗体设计器,只需要能设计一个窗体就行了,适当扩展一下,这一下正好满足要求。
  回复  引用  查看    

#22楼  2007-09-30 11:39 无处坏      
请问楼主最近有没有对project & Debugger 进行研究啊,如果有的话,发些资料给我谢谢,小弟最近想学这一部分,谢谢,我的email:wqjch@163.com;我的msn:wisliqj@hotmail.com
  回复  引用  查看    

请问楼主怎样在设计窗口里面实现右键菜单功能。
  回复  引用  查看    

#24楼  2008-01-25 07:49 wenti [未注册用户]
请问如何实现添加一个控件之后,Text 是汉字?
  回复  引用  查看    

#25楼  2008-04-03 11:55 bobocbo [未注册用户]
太棒了,
踏破铁鞋无觅出...
谢了,
拿回去好好学习
  回复  引用  查看    

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多