C/S开发框架Toolbar按钮的动态生成与调用关系
作者:C/S框架网  发布日期:2011/08/29 21:57:56
  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框架网|原创作品.质量保障.竭诚为您服务

上一篇 下一篇