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 总是父窗体的最顶层控件,而中间内容面板无法隐
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForms控件本身不具备旋的功能,但可以通过一些方法实现控件的旋效果。 一种常见的方法是使用`Graphics`类来实现控件的旋。首先,通过创建一个新的`Bitmap`对象,并将其作为绘图表面。然后,使用`Graphics`类的`RotateTransform`方法来旋绘图表面的角度。最后,将旋后的绘图表面绘制到控件上。 以下是一个简单示例,演示如何旋一个WinForms控件(如Button)90度: ```csharp private void RotateControl(Control control, float angle) { Bitmap bitmap = new Bitmap(control.Width, control.Height); control.DrawToBitmap(bitmap, new Rectangle(0, 0, control.Width, control.Height)); Graphics graphics = control.CreateGraphics(); graphics.TranslateTransform(control.Width / 2, control.Height / 2); graphics.RotateTransform(angle); graphics.TranslateTransform(-control.Width / 2, -control.Height / 2); graphics.DrawImage(bitmap, new Point(0, 0)); graphics.Dispose(); } ``` 然后,在相应的事件或方法中调用`RotateControl`方法来旋控件: ```csharp private void button1_Click(object sender, EventArgs e) { RotateControl(button1, 90); } ``` 需要注意的是,这种方法只是在视觉上旋控件,而控件本身并没有实际的旋。例如,旋后的控件仍然会以原始的方向接收鼠标事件。如果需要在旋后的控件上进行交互,可能需要额外的处理。 另外,还可以考虑使用第三方控件库,如DevExpress或Telerik,它们可能提供了更直接的方法来实现控件效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值