C#一行程式碼實現(01)最小化到通知區域

主要功能

  • 實現Winform程式最小化後,隱藏任務欄顯示,在通知區域顯示。左鍵點擊通知區域圖標,可以彈出菜單,包含開機啟動和退出程式,可以根據需求進行訂製。

一行程式碼

private void Form1_Load(object sender, EventArgs e)
{
    this.ExAddNotifyIcon();
}

程式碼封裝

/// <summary>
/// 添加通知圖標,左鍵點擊切換窗口顯示,右鍵點擊彈出菜單
/// </summary>
/// <param name="form"></param>
/// <param name="tipText"></param>
/// <param name="timeout"></param>
/// <param name="tipIcon"></param>
/// <returns></returns>
public static NotifyIcon ExAddNotifyIcon(this Form form, string tipText = "程式最小化至後台運行,點擊圖標顯示程式", int timeout = 3000, ToolTipIcon tipIcon = ToolTipIcon.Info)
{
    NotifyIcon notifyIcon = new NotifyIcon();
    notifyIcon.Icon = form.Icon;
    notifyIcon.Visible = true;
    notifyIcon.Text = form.Text;
    notifyIcon.BalloonTipText = form.Text;
    notifyIcon.MouseClick += (sender, args) =>
    {
        if (args.Button == MouseButtons.Left)
        {
            if (!form.Visible)
            {
                form.Show();
                form.WindowState = FormWindowState.Normal;
                form.TopMost = true;
                form.TopMost = false;
            }
            else
            {
                form.WindowState = FormWindowState.Minimized;
                form.Hide();
            }
        }
    };
    notifyIcon.ContextMenu = new ContextMenu(new MenuItem[]
    {
        new MenuItem("開機啟動", (sender, args) => { ((MenuItem) sender).Checked = form.ExSwitchRunOnSystemStart(); })
        {
            Checked = form.ExIsRunOnSystemStart()
        },
        new MenuItem("退出程式", (sender, args) => { form.Close(); }),
    });
    form.SizeChanged += (sender, args) =>
    {
        if (form.WindowState == FormWindowState.Minimized)
        {
            form.Hide();
            notifyIcon.ShowBalloonTip(timeout, form.Text, tipText, tipIcon);
        }
    };
    form.FormClosed += (sender, args) => { notifyIcon.Dispose(); };
    return notifyIcon;
}

聲明