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 控件,实现了统一的继承体系、事件处理与扩展模式,增加了许多功能。
图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 控件中。
图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 工作区。
图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,表示当没有足够空间时才“溢出” 。
图4 带固定“溢出”项的 ToolStrip
5. 如何在 ToolStrip 上承载任意 Win Forms 控件?
通过创建 ToolStripControlHost 实例或者扩展 ToolStripControlHost 对象来承载任意 Windows 窗体控件。
示例代码
01
namespace
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
}
图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
- WinForms ToolStrip 控件点滴(转)
- WinForms 控件
- C#中的toolStrip控件
- 工具栏控件ToolStrip
- ToolStrip动态添加自定义控件
- ToolStrip添加任意控件实现
- WinForms 中的常用控件
- Winforms:透明的控件
- ToolStrip(工具栏)
- ToolStrip
- ToolStrip
- DevExpress v15.1:WinForms控件功能升级(一)
- DevExpress v15.1:WinForms控件功能升级(二)
- DevExpress v15.1:WinForms控件功能升级(三)
- DevExpress v15.1:WinForms控件功能升级(四)
- DevExpress v15.1:WinForms控件功能升级(五)
- wpf怎么使用WindowsFormsHost(使用WinForms中的控件)
- 在ToolStrip控件上添加控件
- 快速配置SQL2005发邮件
- c++ 编译问题汇总
- [JQUERY-AJAX-JST] 动态渲染的页面事件无法绑定问题的解决方案
- Linux与Linux,Linux与Windows之间使用SSH传输文件
- C# 獲取網頁的中的字符串(不包含html)大顯神通
- WinForms ToolStrip 控件点滴(转)
- ActiveX控件与JS页面函数交互
- ASP.NET2.0打通文件图片处理任督二脉
- htmlparser 讲解
- UNICODE 编程入门
- 发誓
- bash赋值中的命令替换
- 谈两点数据库设计的经验
- cmd和command区别