上次在提问区发的帖子,最大化窗体后,系统提示"集合在实例化发生了修改"的问题, 终于被我发现问题出在哪里了:) 是委托代码搞得鬼,删除了就没事了,但是为什么有委托存在,系统就会报错.依然是个疑问.暂且抛开, 专注于技术而不沉溺于技术嘛.
回到GUI实现设计上来:一开始有打算按照SharpDevelop那种接口实现的方式来实现基础管理框架的.在这段时间的实践中发现自己对接口编程的理解远远达不到面向接口编程的能力. 其实也没啥好解释的,从来都没有面向接口编程的经历,当然看不懂了,哈哈.不过通过理解接口的编程思想对事物进行分析,抽象化理解还是非常有好处的.
前面通过对SharpDevelop中用户界面(我称之为基础管理框架的GUI)的抽象理解, 使我对类似于vs.net这种风格的用户界面实现有了深入的认识. 结合这段时间的实践, 觉得在程序集内部使用接口调用似乎太过于大才小用,不仅代码晦涩难懂,而且根本都不知道代码运行的实际过程, 有时候跟到最后一个函数, 竟然是一个接口的方法定义,没有任何实现,真让人一头雾水, 程序运行到这里以后, 到底干了什么?算了算了,套用印度佛教和汉地佛教的"渐悟","顿悟"来安慰自己吧.嘿嘿.
言归正传, 由于能力有限,程序集内部肯定是不用接口来调用了,程序集之间也暂时不通过接口来访问.直接提供实现类来进行通讯.
基础管理框架(GUI) 的实现思路基本上如下所示:
整个基础管理框架的GUI部分是一个Mdi窗口, 包含菜单,工具条,面板,工作台窗体,状态条5个主要部分.
Mdi窗口是一个空模板,不创建任何Control(注:Form也是Control的实现类). 包含listMenus,listPads,listBenchWindows,listStatuses,listToolbars字段,和listMenus,listPads,listBenchWindows,listStatuses,listToolbars属性,以及各个对象的重绘方法.OnMenuRedraw(),OnToolbarRedraw(),OnBenchWindowsRedraw(),OnStatusesRedraw(),OnPadsRedraw().
由InitializeWorkSpace()来管理所有字段,属性,方法的组织调用.
在核心服务:布局服务(CLayoutService.cs)中提供通过从配置文件读取菜单,面板,工作台窗体,状态条,工具条对象集合,后续扩展读取整体风格的配置信息.
通过workbenchsingleton.cs文件中控制workbench的初始化,启动控制.
类似于Vs.net浮动面板风格的实现,我采用网上开源的weifen.winformsui.docking来管理.比较简单.例子可以参考其自带的demo.
上述功能基本上已经实现.最大化,调整窗体大小的问题已经都解决了.后续就是对资源配置管理器的实现了.
通过资源配置管理器来管理配置文件,同时提供代码自动生成与预览功能.
配置文件以Xml格式存储,通过Xml格式中存储的信息,自动生成代码,预览执行.
接下去首先考虑配置文件的具体格式,然后是资源管理器如何来生成菜单对象,工具条对象.,并将菜单/按钮的事件与功能类库绑定,并生成代码文件.
这部分内容还需要认真考虑,还有很多东西要学习,比如ORM,System.Reflection的实现等等.