65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (92投票s)

2004年9月1日

3分钟阅读

viewsIcon

485513

downloadIcon

6889

一个用 C# 编写的用于工具栏处理的示例框架。

Sample Image - ToolBarDock.gif

引言

此代码段包括一个用于处理停靠工具栏的简单框架。此框架包括对以下内容的支持:

  • 浮动/停靠栏
  • 更改停靠栏的布局
  • 双击可在停靠和浮动之间切换
  • 显示/隐藏栏
  • 右键单击可查看栏视图菜单
  • 使用 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
  • 修改了带有分隔符的垂直工具栏的尺寸计算
© . All rights reserved.