C/S开发框架Toolbar按钮的动态生成与调用关系

  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


 
Toolbar按钮共享机制是开发框架核心功能之一!!!




按钮的调用关系


下面图解按钮对应的功能窗体:


1. 帮助,关闭按钮是所有窗体具有的功能,Click事件调用的方法在frmBaseChild基类窗体实现。
贴图图片





2. 增删改查,保存/取消按钮对应frmBaseDataForm窗体定义的公用方法,如下图:


贴图图片





3. 打印按钮对应的事件在frmBaseDataForm内实现,框架限制了只有数据窗体才有打印功能。


贴图图片


4. 业务单据操作相关的按钮,如审核,锁定等在IBusinessSupportable接口内实现,由frmBaseBusinessForm窗体基类实现。

贴图图片



版权:C/S框架网,作者:孙中吕,如转载请注明出处。




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

C/S开发框架Toolbar按钮动态生成调用关系
CS开发框架Toolbar数据字典,业务单据关系
CS开发框架禁用主窗体Toolbar按钮
C/S开发框架MDI架构及Toolbar按钮共享(原创)
C# 动态编译及调用WebService方法
动态对象ExpandoObject实现动态函数调用
基于C/S三层架构WCF开发框架接口调用流程|C/S框架
CS开发框架核心模型 - 共享主窗体工具栏(Toolbar)
C/S开发框架权限扩展定制按钮功能详细设计
我还有一个问题,业务窗体查询怎么做?为什么Toolbar上没查询按钮
C#调用C++编译DLL详解
C/S开发框架权限是控制到按钮级别吗?
C#.Net快速开发框架 - ORM ,BLL,DAL三者关系
开发技巧-Winform窗体自动生成下一个业务流程单据|C/S框架
Winform界面功能按钮同等权限控制|C/S框架
C/S快速开发框架 - 代码自动生成视频下载
C#获取按钮EventClick事件,EventHandlerList委托调用列表
C#.NET扩展动态对象支持动态属性和方法以及Json格式对象互转
C#.NET WEBAPI 接口设计调用
C/S框架创建Ribbon样式模块功能按钮展示区(RibbonModuleLoader类)