ToolStripControllerLabel 扩展和收缩 ToolStrip 控件
可以放置在 VisualStudio 上的 ToolStripControllerLabel。
引言
ToolStrip
控件可以承载菜单、项和用户控件。ToolStripItems 可以在 Visual Studio 2005 上放置和布局。ToolStrip
项可以由用户扩展和自定义,并且也可以放置在 Visual Studio 上。本文演示了 ToolStripControllerLabel
,它可以折叠、扩展和关闭 ToolStrip
控件。
历史
2006 年 8 月 12 日,更新
- 之前的 toolStripItems、收缩器和关闭器统一到一个 ToolStripControllerLabel 中
- 添加了 ToolStripControllerLabel 的图标图像。
(作者感谢 Vainola Harri。)
2006 年 9 月 3 日,更新
- 修改了图标。
它是如何工作的?
演示应用程序是一个小型的应用程序,用于演示 ToolStripControllerLabel。(演示应用程序需要 .NET Framework 2.0)
首先,单击“Header”标签的 图标。您可以看到工具栏缩小,并且图标更改为
图标。其次,单击
图标。然后,工具栏应该扩展。此操作由单击的 ToolStripControllerLabel 执行。请注意,“Header”和“Footer”的操作不同。 header 标签更改它之后项目可见性。footer 标签更改它之前项目可见性。
此标签的另一个功能是“关闭”工具栏控件。单击 图标。工具栏应该关闭。实际上,工具栏的实例仍然存在,因此请单击“显示工具栏”按钮。
所有这些功能都可以由单个类执行,而无需在 VisualStudio 上进行编码。
易于使用

可以通过使用 VS2005 将此类放置在您的 Windows 窗体上。您可以通过添加 ToolStripControllerLabel 项目或添加对 ToolStripControllerLabel.dll 的引用来使用该项目,就像其他 ToolStripItems 一样,无需任何编码。
ToolStripControllerLabel 类的先前版本通过在代码中绘制矩形和线条来显示图标。 以这种方式,该类的灵活性受到很大限制。 其中一位读者(谢谢)建议图标图像的实例可能会改善此问题。 所以,我制作了三个图标的公共属性。 可以在 VS2005 中修改图像。
此外,之前两个类中的“折叠/展开项目”和“关闭项目”的功能已统一。也可以在 VS2005 上轻松选择该功能。

演示应用程序中的代码
由于可以使用 Visual Studio 将 ToolStripControllerLabel 项放置在 ToolStrip
上,因此它确实简化了 Forms 或 Controls 上的代码。 实际上,演示应用程序没有用于折叠、展开和关闭操作的代码。 Form1 的代码只有 5 行,目的是在隐藏工具栏后显示工具栏。
namespace CodeProject
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
toolStrip1.Visible = true;
toolStrip2.Visible = true;
}
}
}
ToolStripControllerLabel 中的代码
ToolStripControllerLabel 是 ToolStripLabel 的子类。 它覆盖一个 OnClick
事件。 OnClick 调用以下“DoAction()”方法。以下是 DoAction() 的一部分,它改变了项目的可见性。
// Collapse or extend
ToolStrip toolStrip = this.Owner;
int idx = toolStrip.Items.IndexOf(this);
toolStrip.SuspendLayout();
this.SetControllerImage();
if (ControllerType == StripControllerTypes.Header)
{
// --- Header logic ---
// This loop continues under the following conditions.
// 1. There is a next item.
// 2. The next item is not ToolStripControllerLabel
//
while (idx + 1 < toolStrip.Items.Count &&
toolStrip.Items[idx + 1].GetType() != typeof(ToolStripControllerLabel))
{
idx++;
toolStrip.Items[idx].Visible = !isCollapsed;
}
}
else // if (ControllerType == StripControllerTypes.Footer)
{
// --- Footer logic ---
// This loop continues under the following conditions.
// 1. There is a previous item.
// 2. The previous item is not ToolStripControllerLabel
//
while (idx - 1 > 0 &&
toolStrip.Items[idx - 1].GetType() != typeof(ToolStripControllerLabel))
{
idx--;
toolStrip.Items[idx].Visible = !isCollapsed;
}
}
toolStrip.ResumeLayout();
结论
可以使用 Visual Studio 轻松实现折叠、展开或关闭 ToolStrip 项的新 ToolStrip
功能。
附录
如果创建自定义的 ToolStrip
项,请在自定义类上添加属性。 我从 MSDN 论坛搜索到的博客 'jfo's coding' 中获得了此信息。 它真的很有帮助。 有时,使用 Visual Studio 时,自定义项不会出现在菜单中。 在这种情况下,请重新生成或重新打开包含该项的窗体。
[System.ComponentModel.DesignerCategory("code")]
[ToolStripItemDesignerAvailability
(ToolStripItemDesignerAvailability.ToolStrip |
ToolStripItemDesignerAvailability.StatusStrip)]
public class ToolStripShrinker:ToolStripLabel
{
public ToolStripShrinker() : base() { }
----