简单的C#工具栏停靠框架






4.88/5 (92投票s)
2004年9月1日
3分钟阅读

485513

6889
一个用 C# 编写的用于工具栏处理的示例框架。
引言
此代码段包括一个用于处理停靠工具栏的简单框架。此框架包括对以下内容的支持:
- 浮动/停靠栏
- 更改停靠栏的布局
- 双击可在停靠和浮动之间切换
- 显示/隐藏栏
- 右键单击可查看栏视图菜单
- 使用 Control 键禁用停靠
- 处理任何类型的控件,而不仅仅是工具栏
该代码在 Windows XP 和 VS .NET 2002 上运行,但应该可以在大多数 .NET 环境中工作。
背景
这段代码是在探索 .NET 框架时编写的。尽管有几种工具栏处理实现可用,但我决定尝试编写自己的工具栏。尽管如此,我希望这篇文章能有所帮助。
使用代码
使用代码非常简单。创建一个 ToolBarManager
对象,并为其提供可以停靠工具栏的窗体。此窗体很可能是您的应用程序主窗体,该窗体也将 ToolBarManager
作为成员保留。
_toolBarManager = new ToolBarManager(this);
ToolBarManager
处理工具栏上的所有 UI 操作,并且它也是程序员将访问的唯一类。通过调用 AddControl
方法来添加工具栏。此方法的不同版本可用于更好地控制新工具栏的定位。
// Add toolbar (default position)
_toolBarManager.AddControl(_toolBar1);
// Add toolbar (floating)
_toolBarManager.AddControl(_toolBar2, DockStyle.None);
// Add toolbar (left)
_toolBarManager.AddControl(_toolBar3, DockStyle.Left);
// Add toolbar (left, on the left of _toolBar3)
_toolBarManager.AddControl(_toolBar4, DockStyle.Left, _toolBar3, DockStyle.Left);
// Add control
_toolBarManager.AddControl(_dateTimePicker, DockStyle.Bottom);
还有其他方法可用于访问由 ToolBarManager
处理的工具栏。它们的用法相当简单
-
public ArrayList GetControls()
- 返回所有添加的控件的集合。 -
public bool ContainsControl(Control c)
- 如果包含该控件,则返回true
。 -
public void ShowControl(Control c, bool show)
- 显示或隐藏控件。 -
public void RemoveControl(Control c)
- 删除控件。
关注点
停靠行为由四个 ToolBarDockArea
控件执行,这些控件已添加到窗体的所有四个侧面并已停靠。这些控件仅执行特定的布局处理,并根据添加或更改的控件自动调整大小。
为了实现拖动,ToolBarManager
处理通过 AddControl
添加的所有控件上的鼠标事件。在拖动期间,ToolBarManager
根据鼠标位置检查是否应将拖动的控件放置在其自己的窗体(浮动)上或放置在任何停靠区域上。
控制键事件通过 PreFilterMessage
处理。
工具栏的外观(浮动框架和夹具)由 ToolBarDockHolder
用户控件用户绘制。
历史
下载中包含一个包含详细信息的历史记录文件,这里是一个摘要。
版本 1.0
Rogério Paulo 的第一个版本。
版本 2.0
Martin Müller(又名 mav.northwind)的更新
-
ToolBarManager
c'tor 现在接受一个ScrollableControl
和一个 Form,以便您可以定义一个独立的停靠区域,而不必始终使用窗体。 但是,该窗体本身仍然需要作为浮动工具栏的所有者。 -
ToolBarDockHolder
现在有一个新的属性ToolbarTitle
,允许您为浮动工具栏指定一个独立的名称。 默认值仍然是控件的 Text,但Control.TextChanged
事件将不再修改标题。 -
ToolBarDockHolder
现在有一个新的属性AllowedBorders
,您可以在其中指定允许工具栏停靠到哪些边框。 -
ToolBarManager.AddControl()
现在返回新添加的ToolBarDockHolder
,以便可以修改它的属性。 该示例现在包含一个MainMenu
- 修改了带有分隔符的垂直工具栏的尺寸计算