WinForms ToolStrip 控件点滴(转)

来源:互联网 发布:淘宝 关闭私人定制 编辑:程序博客网 时间:2024/06/05 15:11

 

WinForms ToolStrip 控件点滴

1. 关于 ToolStrip 控件

ToolStrip 控件异常强大,从 .NET 2.0 开始引入,可直接作为工具栏,它还是 MenuStrip, ContextMenuStrip 和 StatusStrip 的可扩展基类,而 ToolStripItem 表示这些控件的子项的基类。这些控件替换了早期版本 (.NET 1.x) 中的 ToolBar, MenuStrip, ContextMenuStrip 和 StatusBar 控件,实现了统一的继承体系、事件处理与扩展模式,增加了许多功能。

fadw9ex2.Local_1129878598_toolstripobjectmodel(zh-cn,VS.80)[1]

图1 ToolStrip 对象模型

2. 关于 ToolStripItem 对象

ToolStripItem 表示可以包含在 ToolStrip 中的元素,如按钮、组合框、文本框或标签。ToolStrip 类管理这些元素的绘制以及键盘与鼠标输入(包括拖放输入),ToolStripItem 类管理这些元素内部的事件和布局。ToolStripItem 具有如下特点:

  • ToolStripItem 是抽象类,其子类或者从 ToolStripItem 直接继承,或者通过 ToolStripControlHost 或 ToolStripDropDownItem 从 ToolStripItem 间接继承。
  • ToolStripItem 继承自 Component 而不从 Control 继承,必须包含在 ToolStrip、MenuStrip、StatusStrip 或 ContextMenuStrip 中,而不能直接添加到窗体中。
  • ToolStripItem 不能有多个父级 ToolStrip,必须创建 ToolStripItem 的副本并将该副本添加到其他 ToolStrip 控件中。

fadw9ex2.Local_-2123175949_toolstripitemobjectmodel(zh-cn,VS.80)[1]

图2 ToolStripItem 对象模型

3. 关于 ToolStripContainer 控件

ToolStripContainer 类似于 SplitContainer,但具有上、下、左、右以及中间5个分区。四侧面板是 ToolStripPanel 的实例,中间面板是 ToolStripContentPanel 的实例。无法移除侧面板,但可以将它们各自的 TopToolStripPanelVisible、BottomToolStripPanelVisible、LeftToolStripPanelVisible 和 RightToolStripPanelVisible 属性设置为 false 来隐藏它们。既不能移除也不能隐藏 ToolStripContentPanel。可以在侧面板中排列一个或多个 ToolStrip、MenuStrip 或 StatusStrip 控件,并且可以将中间面板用于主工作区,放置其他 Windows 控件。

  • ToolStripContainer 常见使用场景是,将其 Dock 到父窗体,隐藏左右面板,上面板放 MenuStrip 和 ToolStrip,下面板放 StatusStrip,中间作为主工作区。
  • ToolStripContainer 四个侧面板 ToolStripPanel 内的 ToolStrip MenuStrip 可自由浮动,支持拖拽。
  • ToolStripContainer 总是父窗体的最顶层控件,而中间内容面板无法隐藏,因此 MDI 应用程序的主窗体一般不使用 ToolStripContainer(否则子窗体总被中间内容面板挡住),而是用 ToolStripPanel。
  • ToolStripContainer 虽然不适合用于经典 MDI,但可以用于类似 Visual Studio 的选项卡风格的 MDI,因为可以直接在内容面板实现多个 Tab 工作区。

kb-on-winforms-toolstrip01

图3 ToolStrip 在 ToolStripContainer 内浮动

3. 关于 ToolStripPanel 控件

ToolStripPanel 用来容纳一个或多个 ToolStrip、MenuStrip、StatusStrip 或用户定义的控件,注意到前面讲到的 ToolStripContainer 的四个侧面板实际上都是 ToolStripPanel 的实例。

如果不需要 ToolStripContainer 那种布局或者不适合,比如 MDI,那么可以单独使用 ToolStripPanel。默认 ToolStripPanel 不出现在 Visual Studio 的工具栏中,需要自行添加。

4. 如何使工具栏(ToolStrip)总在右下角出现小三角下拉菜单?

如下图这种效果,在 ToolStrip 中称为“溢出”(overflow),只要设置 ToolStripItem.OverFlow = ToolStripItemOverflow.Always。默认值是 AsNeeded,表示当没有足够空间时才“溢出” 。

kb-on-winforms-toolstrip02

图4 带固定“溢出”项的 ToolStrip

5. 如何在 ToolStrip 上承载任意 Win Forms 控件?

通过创建 ToolStripControlHost 实例或者扩展 ToolStripControlHost 对象来承载任意 Windows 窗体控件。

示例代码

view source
print?
01namespace LeoLab.Win.ToolStripContainerDemo
02{
03    public partial class Form4 : Form
04    {
05        public Form4()
06        {
07            InitializeComponent();
08        }
09  
10        private void Form4_Load(object sender, EventArgs e)
11        {
12            // inherits from ToolStripControlHost
13            ToolStripDateTimePicker tsDateTime = new ToolStripDateTimePicker();
14            toolStrip1.Items.Insert(0, tsDateTime);
15  
16            // instantiate ToolStripControlHost
17            CheckBox chk = new CheckBox();
18            chk.Text = "Choose me...";
19            ToolStripControlHost tsChk = new ToolStripControlHost(chk);
20            menuStrip1.Items.Insert(0, tsChk);
21        }
22    }
23  
24    public partial class ToolStripDateTimePicker : ToolStripControlHost
25    {
26        public ToolStripDateTimePicker()
27            : base(new DateTimePicker())
28        {
29        }
30    }
31}

kb-on-winforms-toolstrip03

图5 在 MainMenu 和 ToolStrip 上承载 CheckBox 和 DateTimePicker

参考

(MSDN) ToolStrip 控件结构 

(MSDN) ToolStrip 技术摘要

(MSDN) 如何:在 Windows 窗体中管理 ToolStrip 溢出

(MSDN) 如何:使用 ToolStripControlHost 包装 Windows 窗体控件

MSDN 提供的 Howto 与 Walkthrough ToolStrip 控件(Windows 窗体)

《C#高级编程(第6版)》 31.3.18 ToolStrip控件

 

转自:http://blogs.leoworks.net/feng/post.aspx?post=tips-on-winforms-toolstrip

 

原创粉丝点击