📄 ch9_demoform006.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace CH9
{
public partial class CH9_DemoForm006 : Form
{
public CH9_DemoForm006()
{
InitializeComponent();
}
// 实时计算溢位中的项目。
GrowShrinkLevel m_toolStripGrowShrinkLevel;
int growThreshold = 50;
internal GrowShrinkLevel ToolStripGrowShrinkLevel
{
get
{
ToolStripItemDisplayStyle firstDisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
ToolStripItemDisplayStyle lastDisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
// 储存第一个非 ToolStripSeparator 之 ToolStripItem 控件的显示样式。
foreach (ToolStripItem tsi in standardToolStrip.Items)
{
if (!(tsi is ToolStripSeparator))
{
firstDisplayStyle = tsi.DisplayStyle;
// 在找到了第一个非 ToolStripSeparator 之 ToolStripItem 控件的 DisplayStyle 属性之后就跳离循环。
break;
}
}
// 储存最后一个非 ToolStripSeparator 之 ToolStripItem 控件的显示样式。
foreach (ToolStripItem tsi in standardToolStrip.Items)
{
if (!(tsi is ToolStripSeparator))
{
// 并未自行跳离循环,因此会在取得最后一个非 ToolStripSeparator 之 ToolStripItem 控件的 DisplayStyle 属性之后才跳离循环。
lastDisplayStyle = tsi.DisplayStyle;
}
}
// 根据第一个与最后一个非 ToolStripSeparator 之 ToolStripItem 控件的显示样式来设定 m_toolStripGrowShrinkLevel。
switch (firstDisplayStyle)
{
case ToolStripItemDisplayStyle.ImageAndText:
switch (lastDisplayStyle)
{
case ToolStripItemDisplayStyle.ImageAndText:
m_toolStripGrowShrinkLevel = GrowShrinkLevel.AllImageAndText;
break;
case ToolStripItemDisplayStyle.Text:
m_toolStripGrowShrinkLevel = GrowShrinkLevel.ImageAndTextOrText;
break;
}
break;
case ToolStripItemDisplayStyle.Text:
switch (lastDisplayStyle)
{
case ToolStripItemDisplayStyle.ImageAndText:
m_toolStripGrowShrinkLevel = GrowShrinkLevel.AllImageAndText;
break;
case ToolStripItemDisplayStyle.Text:
m_toolStripGrowShrinkLevel = GrowShrinkLevel.AllText;
break;
case ToolStripItemDisplayStyle.Image:
m_toolStripGrowShrinkLevel = GrowShrinkLevel.ImageOrText;
break;
}
break;
case ToolStripItemDisplayStyle.Image:
switch (lastDisplayStyle)
{
case ToolStripItemDisplayStyle.Text:
m_toolStripGrowShrinkLevel = GrowShrinkLevel.ImageOrText;
break;
case ToolStripItemDisplayStyle.Image:
m_toolStripGrowShrinkLevel = GrowShrinkLevel.AllImage;
break;
}
break;
}
return m_toolStripGrowShrinkLevel;
}
set
{
m_toolStripGrowShrinkLevel = value;
}
}
private void standardToolStrip_Layout(object sender, LayoutEventArgs e)
{
int totalItemWidth = 0;
foreach (ToolStripItem tsi in standardToolStrip.Items)
{
totalItemWidth += tsi.Bounds.Width + tsi.Margin.Horizontal;
}
// 如果仍有空间,就试着去加大 ToolStripItem 控件的宽度。
if (standardToolStrip.DisplayRectangle.Width - totalItemWidth > growThreshold)
{
GrowToolStripItems(standardToolStrip);
}
}
private void standardToolStrip_LayoutCompleted(object sender, EventArgs e)
{
// 找出有哪些 ToolStripItem 控件已经溢位。
foreach (ToolStripItem tsi in standardToolStrip.Items)
{
// 如果有任何 ToolStripItem 控件已经溢位。
if (!(tsi.Placement == ToolStripItemPlacement.Main))
{
// 呼叫使用者自订程序 ShrinkToolStripItems 程序以便试着去缩减 ToolStripItem 控件的宽度。
if (ShrinkToolStripItems(standardToolStrip))
{
standardToolStrip.CanOverflow = false;
}
else
{
standardToolStrip.CanOverflow = true;
}
return;
}
}
}
private bool ShrinkToolStripItems(ToolStrip ts)
{
// 从工具列中的最后一个 ToolStripItem 控件开始处理,然后依序往前处理之。
int i = ts.Items.Count - 1;
while (i >= 0)
{
ToolStripItem tsi = ts.Items[i];
if (tsi is ToolStripSeparator)
{
// 略过 ToolStripSeparator。
}
else
{
switch (ToolStripGrowShrinkLevel)
{
case GrowShrinkLevel.AllImageAndText:
case GrowShrinkLevel.ImageAndTextOrText:
if (ShrinkToText(tsi))
{
return true;
}
break;
case GrowShrinkLevel.AllText:
case GrowShrinkLevel.ImageOrText:
if (ShrinkToImage(tsi))
{
return true;
}
break;
default:
break;
}
}
i -= 1;
}
return false;
}
private void GrowToolStripItems(ToolStrip ts)
{
// 从工具列中的第一个 ToolStripItem 控件开始处理,然后依序往后处理之。
int i = 0;
while (i < ts.Items.Count)
{
ToolStripItem tsi = ts.Items[i];
if (tsi is ToolStripSeparator)
{
// 略过 ToolStripSeparator。
}
else
{
switch (ToolStripGrowShrinkLevel)
{
case GrowShrinkLevel.AllImage:
case GrowShrinkLevel.ImageOrText:
if (GrowToText(tsi))
{
return;
}
break;
case GrowShrinkLevel.AllText:
case GrowShrinkLevel.ImageAndTextOrText:
if (GrowToTextAndImage(tsi))
{
return;
}
break;
default:
break;
}
}
i += 1;
}
}
private bool ShrinkToText(ToolStripItem tsi)
{
// 如果 ToolStripItem 控件原来的显示样式是图片与文字,我们会将其显示显示更改成只显示文字。
if (tsi.DisplayStyle == ToolStripItemDisplayStyle.ImageAndText)
{
tsi.DisplayStyle = ToolStripItemDisplayStyle.Text;
return true;
}
else
{
return false;
}
}
private bool ShrinkToImage(ToolStripItem tsi)
{
// 如果 ToolStripItem 控件原来的显示样式是只显示文字,我们会将其显示显示更改成只显示图片。
if (tsi.DisplayStyle == ToolStripItemDisplayStyle.Text)
{
tsi.DisplayStyle = ToolStripItemDisplayStyle.Image;
return true;
}
else
{
return false;
}
}
private bool GrowToTextAndImage(ToolStripItem tsi)
{
// 如果 ToolStripItem 控件原来的显示样式是只显示文字,我们会将其显示显示更改成显示图片与文字。
if (tsi.DisplayStyle == ToolStripItemDisplayStyle.Text)
{
tsi.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
return true;
}
else
{
return false;
}
}
private bool GrowToText(ToolStripItem tsi)
{
// 如果 ToolStripItem 控件原来的显示样式是只显示图片,我们会将其显示显示更改成只显示文字。
if (tsi.DisplayStyle == ToolStripItemDisplayStyle.Image)
{
tsi.DisplayStyle = ToolStripItemDisplayStyle.Text;
return true;
}
else
{
return false;
}
}
public enum GrowShrinkLevel : int
{
AllImageAndText = 0,
ImageAndTextOrText = 1,
AllText = 2,
ImageOrText = 3,
AllImage = 4
}
private void CH9_DemoForm006_Load(object sender, EventArgs e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -