学习C/S结构开发框架从MDI起步
作者:C/S原创  发布日期:2011/04/02 00:43:16
  学习C/S结构开发框架从MDI起步

学习C/S结构开发框架从MDI起步


C/S开发框架MDI架构及Toolbar按钮共享



MDI多文档界面功能介绍


用户界面负责处理数据输入和数据采集等功能,设计一套人性化的UI十分重要。总结以前的设计经验和用户反馈的信息,前台基本要求是操作方便,界面友好,功能强大,响应快速。基于WinForm大多数应用软件是使用MDI(多文档界面)作为系统架构。这套架构最大的特点是用户可以同时浏览和操作多个窗体的数据,操作性特别强且简单易用。


Office是家喻户晓装机必备,借鉴它的强大功能和丰富的用户体验作为C/S开发框架的主要设计思路。主窗体Toolbar(工具条)接口设计是框架核心技术之一,所有子窗体共享使用主窗体上的工具条,当切换子窗体时Toolbar按钮的状态随之切换,互不干预。



Toolbar按钮共享


贴图图片




MDI程序


贴图图片



MDI多文档界面由多个窗体组成,其中有一个窗体称为MDI父窗体,可以把MDI父窗体理解为一个容器,在容器内的其他窗体称为MDI子窗体。子窗体的活动范围限制在父窗体这个容器内,无法将子窗体移动到主窗体之外。MDI主要特点是父窗体可以控制和管理所有子窗体,在设计上我们需要抽象出一组接口来规范子窗体的操作,主窗体严格控制这些接口。但是子窗体功能不一,有些子窗体负责数据操作,有些子窗体用于打印报表,那么我们如何来规范这些功能呢?如何共享使用主窗体上的按钮呢?至于这个问题,可以通过设计接口来解决。首先将子窗体按功能分类,分类别设计接口,比如数据操作窗体设计一个支持数据操作的接口,如IOperateData,支持打印功能的窗体接口为IPrintable等等。



示范程序截图

三个子窗体共用主窗体的按钮。



数据窗体按钮状态

贴图图片



打印窗体按钮状态



贴图图片



实现两种策略创建主窗体的工具栏



1. 创建.Net ToolStrip组件

贴图图片



2.创建自定义组件




贴图图片



策略模式应用:


/// <summary>
/// 工具栏接口
/// </summary>
public interface IToolbarRegister : IDisposable
{
   void RegisterButton(IList buttons); //注册按钮
   void Dispose(); //重置工具栏按钮
   
   IButtonInfo CreateSeperator();//创建分隔按钮,如"|"
   
   /// <summary>
   /// 创建工具栏上的按钮.
   /// </summary>
   /// <param name="name">按钮名称:如btnSave,btnClose</param>
   /// <param name="caption">按钮名称</param>
   /// <param name="image">按钮图片</param>
   /// <param name="size">按钮大小</param>
   /// <param name="clickEvent">按钮的Click事件</param>
   /// <returns></returns>
   IButtonInfo CreateButton(string name, string caption, Bitmap image, Size size, OnButtonClick clickEvent);
}

// 来源:www.CSFramework.com, C/S结构框架学习网


 


/// <summary>
/// 我的自定义工具栏
/// </summary>
public class MyToolbarRegister : IToolbarRegister
{
   Panel _pnl = null;
   Form _owner = null;
   
   public MyToolbarRegister(Form owner)
   {
      _owner = owner;
      _pnl = new Panel();
      _pnl.Height = 36;
      _pnl.Dock = DockStyle.Top;
      owner.Controls.Add(_pnl);
      owner.Controls.SetChildIndex(_pnl, 1);
   }
   
   public void RegisterButton(IList buttons)
   {
      _pnl.SuspendLayout();
      
      _pnl.Controls.Clear();
      
      int top = 2;
      int left = 3;
      int margen = 4;
      foreach (IButtonInfo b in buttons)
      {
         Control ctl = b.Button as Control;
         ctl.Left = left;
         ctl.Top = top;
         _pnl.Controls.Add(ctl);
         left = ctl.Width margen;
      }
      _pnl.ResumeLayout();
   }
   
   public void Dispose()
   {
      _owner.Controls.Remove(_pnl);
   }
   
   public IButtonInfo CreateSeperator()
   {
      return new MyButtonSeperator(_pnl);
   }
   
   public IButtonInfo CreateButton(string name, string caption, Bitmap image, Size size, OnButtonClick clickEvent)
   {
      return new MyButton(_pnl, name, caption, image, size, clickEvent);
   }
}

// 来源:www.CSFramework.com, C/S结构框架学习网


 


private void frmMDI_Load(object sender, EventArgs e)
{
   this._MdiToolbar = new ToolStripRegister(this);
   
   // this._MdiToolbar = new MyStoolRegister(this);
   
   this.RegisterMdiButtons();
}

// 来源:www.CSFramework.com, C/S结构框架学习网




C/S开发框架MDI架构及Toolbar按钮共享


http://www.csframework.com/archive/1/arc-1-20110401-1276.htm




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


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


示范程序下载 (Source for VIP)

点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇