WinForm经典OutlookBar


经典的OutlookBar有下面这些功能:
点击不同的栏(称之为Band)就会弹出该栏的内容,而原栏目的内容就会被盖住,也就是说默认只选择一个Band,而Band下面的内容是各有不同的.
除了支持上图所示的大图标,还支持小图标的显示.

设计剖析
一句话,Panel的组合+Panel内部的图标组合

布局
如上图,可以看作是三个Panel,每个Panel都有其Title部分和Content部分.
Title部分是唯一的,由一个Button来表达,Button的样式设置为最普通的,而且锚定Dock是Top的,这样,它就可以居顶了.
Content部分位于每个Band的下半部分,是一个有背景颜色的Panel,而在这个Panel中有序地放置了不同的图标和文字,图标+文字可以是一个小的控件,如一个小的Panel,由PictureBox+Label来实现,它们在Content中的显示有按普通顺序了.也就是先入先显示或先入后显示.

动作
OutlookBar有一个selectBand的属性,当点击其它Band的时候,就会设置selectBand为其它的,选定的Band,将展示Content域.
这相当于一个重新计算的过程,也就是说原有的selectBand的Content域在收缩起来,新的展开来.
控件变大变小自适应,OutlookBar应该可以随着Form的大小变化而变化,这也是相当容易的,可以设置整个OutlookBar的Dock属性.这样以达到锚定的功能.

实体设计
必有一个OutlookBar的类,里面有selectBand属性,而各个Band都可以由OutlookBar来获取.
有一个Band的类,这个类包括Title实体和Content实体的定义,当前,也可以将这三个实体分开.
另外,为了实现Content里面的内容可定制,如可以放TreeView,DataGridView等,增加AddControl方法,增加自已想要的控件

结构特点
这是一个比较松散的结构,可以随时增加新的功能.如改变Title的背景色,改变Title的显示方式等等,现在的系统都要美观的,所以,还是要增加不少的内容.


 

转载于:https://www.cnblogs.com/duoqingbaobao/archive/2009/09/29/1576169.html

namespace OutLookBarDemo { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); #region 初始化 OutLookBar outlookBar.BorderStyle = BorderStyle.FixedSingle; outlookBar.Initialize(); IconPanel iconPanel1 = new IconPanel(); IconPanel iconPanel2 = new IconPanel(); IconPanel iconPanel3 = new IconPanel(); outlookBar.AddBand("工具条A", iconPanel1); outlookBar.AddBand("工具条B", iconPanel2); outlookBar.AddBand("工具条C", iconPanel3); //0 iconPanel1.AddIcon("信息查询", Image.FromFile(@"Image\1.ico"), new EventHandler(PanelEventA)); //1 iconPanel1.AddIcon("购物车管理", Image.FromFile(@"Image\2.ico"), new EventHandler(PanelEventA)); iconPanel1.AddIcon("信息查询", Image.FromFile(@"Image\1.ico"), new EventHandler(PanelEventA)); //1 iconPanel1.AddIcon("购物车管理", Image.FromFile(@"Image\2.ico"), new EventHandler(PanelEventA)); iconPanel1.AddIcon("信息查询", Image.FromFile(@"Image\1.ico"), new EventHandler(PanelEventA)); //1 iconPanel1.AddIcon("购物车管理", Image.FromFile(@"Image\2.ico"), new EventHandler(PanelEventA)); iconPanel1.AddIcon("信息查询", Image.FromFile(@"Image\1.ico"), new EventHandler(PanelEventA)); //1 iconPanel1.AddIcon("购物车管理", Image.FromFile(@"Image\2.ico"), new EventHandler(PanelEventA)); iconPanel1.AddIcon("信息查询", Image.FromFile(@"Image\1.ico"), new EventHandler(PanelEventA)); //1 iconPanel1.AddIcon("购物车管理", Image.FromFile(@"Image\2.ico"), new EventHandler(PanelEventA)); iconPanel1.AddIcon("信息查询", Image.FromFile(@"Image\1.ico"), new EventHandler(PanelEventA)); //1 iconPanel1.AddIcon("购物车管理", Image.FromFile(@"Image\2.ico"), new EventHandler(PanelEventA)); //2 iconPanel2.AddIcon("电子邮件", Image.FromFile(@"Image\3.ico"), new EventHandler(PanelEventB)); //3 iconPanel2.AddIcon("密码管理", Image.FromFile(@"Image\4.ico"), new EventHandler(PanelEventB)); //4 iconPanel3.AddIcon("时间设置", Image.FromFile(@"Image\4.ico"), new EventHandler(PanelEventC)); outlookBar.SelectBand(0); #endregion } public void PanelEventA(object sender, EventArgs e) { Control ctrl = (Control)sender; PanelIcon panelIcon = ctrl.Tag as PanelIcon; string clickInfo = string.Empty; switch (panelIcon.Index) { case 0: clickInfo = "信息查询"; break; case 1: clickInfo = "购物车管理"; break; } this.label1.Text = string.Format("您选择了 {0}", clickInfo); } public void PanelEventB(object sender, EventArgs e) { Control ctrl = (Control)sender; PanelIcon panelIcon = ctrl.Tag as PanelIcon; string clickInfo = string.Empty; switch (panelIcon.Index) { case 0: clickInfo = "电子邮件"; break; case 1: clickInfo = "密码管理"; break; } this.label1.Text = string.Format("您选择了 {0}", clickInfo); } public void PanelEventC(object sender, EventArgs e) { Control ctrl = (Control)sender; PanelIcon panelIcon = ctrl.Tag as PanelIcon; string clickInfo = string.Empty; switch (panelIcon.Index) { case 0: clickInfo = "时间设置"; break; } this.label1.Text = string.Format("您选择了 {0}", clickInfo); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值