(转换为感谢戴夫)
{S0}简介
我目前在个人项目中,我想建立一个小型应用程序的Outlook 2003风格的导航工作。这包括Outlook侧边栏包含了丰富多彩的按钮。我一直在寻找这种控制在CodeProject上,到目前为止,我只能找到与WTL的C语言编写的。
我决定写的C#(2.0)和我自己的Outlook侧边栏的UserControl,所以它可以很容易地扩展和custimized开发的需要。因此,这个项目包含所有源可修改以任何方式和任何目的。
注意UserControl的,不包含任何2.0运行时的具体代码,所以它应该很容易将它移植回1.1的项目,如果需要的话。背景
我选择实施一个UserControl,因为它简化了解决方案,它易于调试,并编译到您的应用程序的可执行文件,留下一个非常小的足迹(即没有额外的DLL需要)。再用这种控制是根本的copynbsp问题;,并粘贴到您的下一个项目的UserControl来源。
因为我想写代码,很容易理解和修改,OutlookBar控制是一个简化版本Outlook的侧边栏。此外,控制不复杂的钩子,回调和Windows API的使用。毕竟,我们只是想方案C#!使用代码
只需包括Outlookbar.cs,OutlookBar.Designer.cs,OutlookBar.resx文件到您的项目。形式的OutlookBar UserControl的使用之前,确保你先编译所有。之后,在UserControl添加到您的工具箱。现在,您可以拖到窗体上。
注意OutlookBar控制是为了停靠在底部。这不是自动完成的,所以你必须设置Dock属性的底层控制。此外,您可以添加一个顶部分离器控制,这将允许你在运行时调整OutlookBar。
OutlookBar包含了一组按钮(类型OutlookBarButton),可以添加在运行时的UserControl。在这种控制的更新版本,它现在可以在设计时设置按钮!通过简单地利用[DesignerSerializationVisibility()]属性的感谢。
然而,在运行时添加的按钮,你可以把下面的代码在Form_Load事件。请确定您添加的OutlookStyleControls命名空间的形式。 / /我们无法找到您所查找的内容,以imagen可预期被初始化和加载。这些图像 / /代表按钮的图标(最大尺寸30x26)。 outlookBar1.Buttons.Add("按钮1quot;,我们无法找到您所查找的内容); outlookBar1.Buttons.Add("按钮2quot;,image2); ... ... outlookBar1.Buttons.Add("按钮nquot;,imagen可); outlookBar1.Height = outlookBar1.MaximumSize.Height;
注意最后一行。 OutlookBar将自动调整自身大小的按钮的尺寸。加入所有的按钮后,最大限度地控制其允许的最大高度。所有的按钮,然后将在表单上可见。
在运行时,点击其中一个按钮,将产生一个Click事件。要确定单击按钮,您可以使用下面的代码为:private void outlookBar1_Click(对象发件人,
OutlookStyleControls.OutlookBar.ButtonClickEventArgs发送) { IDX = outlookBar1.Buttons.IndexOf(e.Button); 开关(IDX) {
160;0:/ /按钮1被点击
; / /代码为Button1在这里你的行动
160; 打破;
例1:/ / 2被点击的按钮
0; / /代码为Button1在这里你的行动 &
#160; 打破;
; ... ... } }这有它。该控件包含一些额外的功能:在设计时设置OutlookBar的按钮。在特定位置的用户控件的HitTest()方法返回按钮。例如,它是在MouseDown或MouseUp事件。控制使用的颜色方案可以编程设置。每个控制按钮上有一个标签属性,您可以使用更多的信息绑定按钮。ButtonHeight财产, 它允许您显示无论是规模较小或更大的在你的控制按钮。设计和可扩展性
你可能期望相反,控制已实施定期UserControl的作为,而不是一个控制contrainer。控制按钮,因此不UserControls的本身,而是简单的(内心公众)OutlookBar控制类(见图表)。
这使得实施的控制容易得多。有没有必要配合容器接口,需要实现。只有需要捕捉,实施基本控制事件,并重写需要的地方。
Paint事件管理整个控制的图纸。它会循环通过目前在它的按钮集合的按钮和呼叫PaintButton每个按钮像这样的方法为:private void OutlookBar_Paint(对象发件人,
60; PaintEventArgs的发送) { 顶部= 1;
0; FOREACH(b OutlookBarButton在按钮)
; { b.PaintButton(e.Graphics,1,顶,
160; b.Equals(this.selectedButton),FALSE);
0; 顶部= b.Height 1; }
60; }每个按钮上呈现控件本身。 PaintButton方法的其他标志表明whethernbsp一个按钮应该呈现为正常,选择,或突出。
此外,MouseOver事件是由控制捕获,要突出鼠标移到按钮。为了不重绘整个控制和防止闪烁,只有按钮,在外观上的改变是粉刷一新。
这也为Click事件。 SelectedButton财产自动设置,并相应的按钮,会令本身的选择。 UserControl的覆盖Click事件,并实现了一个新的Click事件的ButtonClickEventHandler。因为,我们要通过一个额外的参数说明哪一个按钮被按下的事件。为此,ButtonClickEventArgs类是实施包括由主机应用程序可以使用一个按钮(只读)属性。
未来的扩展将包括:调整处理,显示在Outlook中,这样可以让你来调整控制。这现在可以做一个分配器的,但是,在视觉上它只是不具吸引力。实施上下部的OutlookBar的快捷按钮。当缩小规模的控制,每个按钮的图标是在这里列出,并可以通过点击访问(请参阅Outlook)。使用的配色方案自动计算。我不知道如何展望目前这。如果任何人有这个想法,请让我知道。
除了这些extenstions外,控制是非常完整。兴趣点
我学到了易于使用实施纯C#你自己的UserControl使用。NET图形库。这导致在表现良好的小型可重复使用的一个非常小的足迹控制。
此外,我学会了如何通过允许在设计时设置控制实施控制完成。具体来说,坚持设计时间OutlookBar按钮集合花了一些时间才能体现出来。历史
OutlookBar UserControl的1.0版本写于2006年5月25日。这篇文章发表于2006年5月26日。
1.1版发布29日2006年5月包含一个大的改善OutlookBar控制在设计时添加按钮。还收集OutlookBar按钮现在CollectionBase类的基础上实施,以减少行代码。
十一月第二届2006年 - 戴夫,VB.NET版本是可为您控制tonbsp;下载。