WinForm 状态栏/工具栏/托盘图标 全套笔记

一、ToolStrip 工具栏控件

1. 控件作用

ToolStrip 是 WinForm 顶部工具栏控件,用于存放按钮、文本、下拉框等快捷操作项,普遍用于软件顶部菜单栏下方快捷功能栏。

2. 核心子项对象

  • ToolStripButton:工具栏按钮(可图文展示)

  • ToolStripLabel:工具栏文本标签(纯文字展示)

3. 核心属性

  • Text:设置按钮/标签显示文字

  • Image:设置工具栏项展示图片

  • Items:工具栏所有子项集合,用于添加控件

4. 完整实战代码(动态创建工具栏项)

cs 复制代码
namespace _04toolstrip
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // 1. 动态创建工具栏按钮
            ToolStripButton btn = new ToolStripButton("安全");
            // 绑定本地图片
            btn.Image = Image.FromFile("C:\\Users\\Administrator\\Desktop\\img\\22.jpg");
            // 将按钮添加到工具栏
            toolStrip1.Items.Add(btn);

            // 2. 动态创建工具栏文本标签
            ToolStripLabel label = new ToolStripLabel("防范");
            toolStrip1.Items.Add(label);
        }
    }
}

5. 核心考点

  • 所有工具栏子项,统一通过 toolStrip1.Items.Add() 挂载展示

  • ToolStripButton 支持图文混排,ToolStripLabel 仅展示纯文本

  • 图片加载需保证路径正确,否则会报文件不存在异常


二、StatusStrip 状态栏控件

1. 控件作用

StatusStrip 是 WinForm 窗体底部状态栏,用于展示系统状态、时间、进度、提示文本,固定在窗体最底部。

2. 核心子项

ToolStripStatusLabel:状态栏文本标签,用于展示动态文字信息

3. 核心搭配组件

常配合 Timer 定时器 实现动态刷新(如实时时间、实时状态)

4. 完整实战代码(底部实时时间)

cs 复制代码
namespace _05StatusStrip
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // 配合定时器实时刷新底部状态栏时间
        private void timer1_Tick(object sender, EventArgs e)
        {
            // 给状态栏标签赋值为当前系统时间
            toolStripStatusLabel1.Text = DateTime.Now.ToString();
        }
    }
}

5. 核心考点

  • 状态栏文本修改:修改 ToolStripStatusLabel.Text 属性

  • 必须依赖定时器持续刷新,才能实现时间动态走动

  • 控件默认停靠在窗体底部,无需手动设置位置


三、NotifyIcon 系统托盘图标控件(重难点)

1. 控件作用

NotifyIcon 实现系统托盘功能,可以将程序最小化/关闭时隐藏到电脑右下角托盘,支持气泡弹窗提示、右键菜单,是桌面软件常用功能。

2. 核心属性

  • Visible:托盘图标是否显示(true显示,false隐藏)

  • BalloonTipTitle:气泡提示标题

  • BalloonTipText:气泡提示内容

  • BalloonTipIcon:气泡提示图标(Error/Info/Warning/None)

3. 核心方法

  • ShowBalloonTip(int 毫秒):弹出气泡通知,参数为展示时长

4. 核心事件与逻辑

(1)窗体最小化事件 SizeChanged

窗体最小化时,隐藏窗体、弹出托盘提示

(2)窗体关闭事件 FormClosing

拦截关闭操作,实现「假关闭」,程序后台驻留托盘,不退出进程

关键代码e.Cancel = true; 取消本次关闭事件

(3)菜单退出事件

Application.Exit(); 真正退出整个应用程序

5. 完整实战代码(假关闭+托盘提示)

cs 复制代码
namespace _06Notifylon
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // 菜单退出:真正关闭程序
        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        // 窗体最小化:隐藏窗体,弹出托盘提示
        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            // 判断窗体状态为最小化
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide(); // 隐藏窗体
                // 配置托盘气泡信息
                notifyIcon1.BalloonTipIcon = ToolTipIcon.Error;
                notifyIcon1.BalloonTipText = "假关闭";
                notifyIcon1.BalloonTipTitle = "提示";
                notifyIcon1.Visible = true;
                notifyIcon1.ShowBalloonTip(5000); // 展示5秒气泡
            }
        }

        // 点击窗体关闭按钮:拦截关闭,实现假关闭
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Hide(); // 隐藏窗体
            // 配置托盘气泡提示
            notifyIcon1.BalloonTipIcon = ToolTipIcon.Error;
            notifyIcon1.BalloonTipText = "假关闭";
            notifyIcon1.BalloonTipTitle = "提示";
            notifyIcon1.Visible = true;
            notifyIcon1.ShowBalloonTip(5000);

            e.Cancel = true; // 【核心】取消关闭事件,程序不退出
        }
    }
}

四、三大控件核心易错点(必考)

  • ToolStrip:所有子控件必须添加到 Items 集合才会显示

  • StatusStrip:静态文本不会自动更新,必须配合定时器动态赋值

  • NotifyIcon 假关闭核心 :不加 e.Cancel=true 会直接关闭程序,无法驻留托盘

  • 程序真正退出 :必须使用 Application.Exit(),Hide() 只是隐藏窗体,进程仍在运行

  • 托盘气泡提示必须开启 Visible=true,否则图标不显示、弹窗不生效


五、三大控件背诵口诀

工具栏ToolStrip,按钮标签加Items;

状态栏底刷时间,Timer定时改文本;

托盘图标Notify,最小隐藏假关闭;

Cancel拦截关闭,Exit才是真退