⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch9_demoform006.cs

📁 章立民-visual stadio 2005 c#编程技巧
💻 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 + -