学习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>
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>
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结构框架学习网
{
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
扫一扫加作者微信
示范程序下载 (Source for VIP)