C/S开发框架Toolbar按钮的动态生成与调用关系
C/S开发框架Toolbar按钮的动态生成与调用关系
基于MDI(多文档界面)的软件简介 MDI程序最大特点是父窗体可以控制所有子窗体的操作,在设计上需要抽象出一组接口来规范这些操作,主窗体上的功能按钮只要调用接口的方法,这样使系统的主窗体与功能子窗体实现松散藕合。但是子窗体功能不一,有些子窗体负责数据操作,如增、删、改、查,有些子窗体用于打印报表,甚至有些窗体需要实现特有的功能。 在一个管理应用系统内,子窗体的数量和继承深度是无法预知的,但是我们可以按业务功能分类,将公共的操作或方法抽象出来作为Toolbar的一组功能按钮。 开发框架主窗体的Toolbar对按钮数量是有限制的,当然不能摆放数百个按钮。 CSFramework开发框架窗体集成层次架构 按业务功能分类后大概整理了以下几个有共同点的窗体作为基类窗体: 按业务功能分类后抽象一组接口,然后定义窗体基类实现这组接口。 frmBaseChild子窗体基类实现IMdiChildForm接口; frmBaseDataForm数据窗体实现IDataOperatable接口; frmBaseBusinessForm业务单据窗体实现IBusinessSupportable接口; Toolbar按钮的动态生成 窗体基类定义好了,框架是如何在Toolbar上动态显示按钮呢? 原理很简单! 当子窗体获得焦点时(触发Form.Active事件)动态加载当前窗体的按钮到主窗体的Toolbar组件内!也就是在主窗体注册按钮,请看以下代码实现: Activated事件: C# Code: //当子窗体获得焦点时注册本窗体的按钮。 //通过Form Activated事件可以看到主窗体的ToolBar状态变化。 private void frmBaseChild_Activated(object sender, EventArgs e) { this.RegisterToolBar(this.ToolbarRegister); this.NotifyObserver(); //通知其它观察者 } //来源:C/S框架网(www.csframework.com) QQ:1980854898 由RegisterToolBar方法注册按钮,this.Buttons.ToList() 是指当前窗体的按钮数组。 C# Code:
public virtual void RegisterToolBar(IToolbarRegister toolBarRegister) { //this.Buttons是当前窗体的按钮数组。 toolBarRegister.RegisteButton(this.Buttons.ToList()); }
C# Code:
/// <summary> /// 子窗体的按钮数组 /// </summary> public IButtonList Buttons { get { return _buttons; } } /// <summary> /// 模板方法.初始化本窗体的按钮. /// </summary> public virtual void InitButtons() { IButtonInfo[] bi = this.GetSystemButtons(); _buttons.AddRange(bi); } /// <summary> /// 系统按钮列表。注:子窗体享用系统按钮,如帮助/关闭窗体常用功能。 /// </summary> public virtual IButtonInfo[] GetSystemButtons() { if (_SystemButtons == null) { _SystemButtons = new IButtonInfo[2]; _SystemButtons[0] = this.ToolbarRegister.CreateButton("btnHelp", "帮助", Globals.LoadBitmap("24_Help.ico"), new Size(57, 28), this.DoHelp); _SystemButtons[1] = this.ToolbarRegister.CreateButton("btnClose", "关闭", Globals.LoadBitmap("24_Exit.ico"), new Size(57, 28), this.DoClose); } return _SystemButtons; } //来源:C/S框架网(www.csframework.com) QQ:1980854898
按钮的调用关系 下面图解按钮对应的功能窗体: 1. 帮助,关闭按钮是所有窗体具有的功能,Click事件调用的方法在frmBaseChild基类窗体实现。 2. 增删改查,保存/取消按钮对应frmBaseDataForm窗体定义的公用方法,如下图: 3. 打印按钮对应的事件在frmBaseDataForm内实现,框架限制了只有数据窗体才有打印功能。 4. 业务单据操作相关的按钮,如审核,锁定等在IBusinessSupportable接口内实现,由frmBaseBusinessForm窗体基类实现。 版权:C/S框架网,作者:孙中吕,如转载请注明出处。 扫一扫加微信
参考文档:
C/S开发框架标准版有版本自动升级功能吗? 购买C/S开发框架后能升级为VIP吗? C/S开发框架的数据访问层用LINQ吗? C/S开发框架标准版-后台数据更新dalBase类(UML图及方法介绍) C/S开发框架MDI架构及Toolbar按钮共享(原创) C/S开发框架权限是控制到按钮级别的吗? C/S开发框架V3.0模块引用层次关系表(原) C/S开发框架权限扩展与定制按钮功能详细设计 C/S开发框架事务处理机制 C/S开发框架企业版数据库改名后需要修改的存储过程、函数和视图 C/S开发框架代码生成器工具增加DevExpress版本配置 C/S开发框架DAL层提交数据报错"外键值为空!"解决方案。 C/S开发框架提供类似SAP系统的快速命令,能快速打开界面窗体(Command模式) C/S开发框架的角色(Role)分类(普通角色、系统角色、数据角色、扩展角色) C/S开发框架教程:使用基础资料(数据字典)的DAL层更新主从表(或多表)数据
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |