精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#實現 Winform 程序在系統托盤顯示圖標以及開機自啟動

freeflydom
2025年1月13日 11:7 本文熱度 237

實現步驟

  • 創建 NotifyIcon 控件并設置屬性;
  • 編寫 NotifyIcon 響應控制事件;
  • 在主窗體的Load事件中將 NotifyIcon 添加到系統托盤;
  • 程序退出時,移除系統托盤的 NotifyIcon;

NotifyIcon 控件,通常用于在系統托盤中顯示圖標,通過使用它就可以我們想要的效果。

屬性描述
Icon在系統托盤中顯示的圖標
Text鼠標懸停在圖標時顯示的文本
Visible指定是否可見

常用方法

方法描述
ShowContextMenu在系統托盤上下文菜單中顯示指定的菜單

添加控件(拖拽方式)

將NotifyIcon和一個ContextMenuStrip控件。拖到主窗體中可以修改控件名稱

  • NotifyIcon 托盤圖標
  • ContextMenuStrip 托盤圖標右擊彈出的菜單

設置控件

點擊 ContextMenuStrip 右上方的三角圖標 -> 編輯項,彈出項信合編輯器
添加右健菜單信息

添加主窗體事件

在最小化或關閉主窗體時,顯示在任務欄托盤區域,實現了單擊關閉時,不真正關閉程序,而是將主界面隱藏HIDE掉,同時開始顯示托盤菜單。

//  只有Form_Closing事件中 e.Cancel可以用。
//  你的是Form_Closed事件。 Form_Closed事件時窗口已關了 ,Cancel沒用了;
//  Form_Closing是窗口即將關閉時詢問你是不是真的關閉才有Cancel事件
private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
    // 注意判斷關閉事件reason來源于窗體按鈕,否則用菜單退出時無法退出!
    if (e.CloseReason == CloseReason.UserClosing)
    {
        //取消"關閉窗口"事件
        e.Cancel = true; // 取消關閉窗體 
        //使關閉時窗口向右下角縮小的效果
        this.WindowState = FormWindowState.Minimized;
        this.mainNotifyIcon.Visible = true;
        //this.m_cartoonForm.CartoonClose();
        this.Hide();
        return;
    }
}

實現雙擊托盤打開主程序

//  添加托盤程序
//  版本更新自1.0.1
private void mainNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    if (this.Visible)
    {
        this.WindowState = FormWindowState.Minimized;
        this.mainNotifyIcon.Visible = true;
        this.Hide();
    }
    else
    {
        this.Visible = true;
        this.WindowState = FormWindowState.Normal;
        this.Activate();
    }
}

//  添加托盤程序右鍵菜單項
//  版本更新自1.0.1
//  退出
//  添加日期 --  2015-07-29 21:44
private async void toolStripMenuItemQuit_Click(object sender, EventArgs e)
{
    if (MessageBox.Show("你確定要退出?", "系統提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
    {
        this.mainNotifyIcon.Visible = false;
        this.Close();
        this.Dispose();
        System.Environment.Exit(System.Environment.ExitCode);   
    }
}

代碼方式添加

using System;
using System.Windows.Forms;
namespace Fountain.WinForm.NotifyDemo
{
    public partial class FormMain : Form
    {
        /// <summary>
        /// 通知控件
        /// </summary>
        private NotifyIcon notifyIcon = new NotifyIcon();
        /// <summary>
        /// 通知控件顯示菜單
        /// </summary>
        private ContextMenuStrip contextMenuStrip = new ContextMenuStrip();
        /// <summary>
        /// 構造方法
        /// </summary>
        public FormMain()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 窗體加載
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormMain_Load(object sender, EventArgs e)
        {
            this.InitializeNotifyMenu();
            this.notifyIcon.Text = this.Text;
            this.notifyIcon.Visible = true;
            this.notifyIcon.Icon = this.Icon;
            this.notifyIcon.ContextMenuStrip = this.contextMenuStrip;
            this.notifyIcon.DoubleClick += notifyIcon_DoubleClick;
        }
        /// <summary>
        /// 托盤菜單
        /// </summary>
        private void InitializeNotifyMenu()
        {
            try
            {
                contextMenuStrip.Items.Clear();
                ToolStripMenuItem showMenuItem = new ToolStripMenuItem("顯示界面");
                showMenuItem.Tag = "顯示";
                showMenuItem.Click += new EventHandler(ShowMenuItem_Click);
                contextMenuStrip.Items.Add(showMenuItem);
                ToolStripMenuItem sboutMenuItem = new ToolStripMenuItem("關于");
                sboutMenuItem.Tag = "關于";
                sboutMenuItem.Click += new EventHandler(AboutMenuItem_Click);
                contextMenuStrip.Items.Add(sboutMenuItem);
                ToolStripMenuItem exitMenuItem = new ToolStripMenuItem("退出");
                exitMenuItem.Tag = "退出";
                exitMenuItem.Click += new EventHandler(ExistMenuItem_Click);
                contextMenuStrip.Items.Add(exitMenuItem);
            }
            catch(Exception exception) 
            {
                throw new Exception(exception.Message);
            }
        }
        /// <summary>
        /// 右擊任務欄圖標
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void notifyIcon_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                if (this.WindowState == FormWindowState.Normal)
                {
                    this.WindowState = FormWindowState.Minimized;
                    this.Hide();
                }
                else if (this.WindowState == FormWindowState.Minimized)
                {
                    this.Show();
                    this.WindowState = FormWindowState.Normal;
                    this.Activate();
                }
            }
            catch (Exception objException)
            {
                throw new Exception(objException.Message);
            }
        }
        /// <summary>
        /// 顯示
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ShowMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                this.Show();
                this.WindowState = FormWindowState.Normal;
                this.Activate();
            }
            catch (Exception objException)
            {
                throw new Exception(objException.Message);
            }
        }
        /// <summary>
        /// 關于
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AboutMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
            }
            catch (Exception objException)
            {
                MessageBox.Show(objException.Message);
            }
        }
        /// <summary>
        /// 退出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ExistMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (MessageBox.Show("你確定要退出程序嗎?","提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
                {
                    this.notifyIcon.Visible = false;
                    this.notifyIcon.Dispose();
                    this.Dispose();
                    Application.Exit();
                }
            }
            catch (Exception objException)
            {
                MessageBox.Show(objException.Message);
            }
        }
        /// <summary>
        /// 主窗體關閉
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                e.Cancel = true;
                this.Hide();
                this.notifyIcon.Dispose();
            }
            catch (Exception objException)
            {
                MessageBox.Show(objException.Message);
            }
        }
        /// <summary>
        /// 窗體大小變化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormMain_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.ShowInTaskbar = false;
                this.Hide();
                this.notifyIcon.Visible = true;
            }
        }
    }
}

系統開機自啟動應用程序

using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace Fountain.WinForm.NotifyDemo
{
    public partial class FormMain : Form
    {
        /// <summary>
        /// 構造方法
        /// </summary>
        public FormMain()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 窗體加載
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormMain_Load(object sender, EventArgs e)
        { 
            //一般不會放這個事件里去設置,而且設置時需要看下注冊表要有沒有寫入成功有的話可以不用調了,偷懶多調一次也沒事
            string applictionName = Process.GetCurrentProcess().MainModule.ModuleName;
            string applictionPath = Process.GetCurrentProcess().MainModule.FileName;
            #region 當前登陸用戶的注冊表啟動項
            RegistryKey registryKey = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
            registryKey.SetValue(applictionName, applictionPath);
            #endregion
            #region 所有用戶的注冊表啟動項
            //RegistryKey registryKey = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
            //registryKey.SetValue(applictionName, applictionPath);
            #endregion
        }
    }
}

?轉自https://www.cnblogs.com/vipsoft/p/18665897


該文章在 2025/1/13 11:07:44 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产午夜三级一区二区三 | 无码动漫一 | 国产日本欧美视频 | 欧美高清一区二区 | 无码av片在线观看 | 国产视频一区二区在线 | 麻豆免费网站 | 国产黄a三级三级三级 | 黑人巨茎大战俄罗斯白人美女 | 97久精品国产片一区二区三区 | 妓院一钑片免看黄大片 | 无套中出丰满人妻无码91热 | 久久天堂综合亚洲伊人hd妓女 | 亚洲日本免费 | 日日碰狠狠躁久久躁9 | 亚洲欧美精品 | 国产日韩在线播放视频一区 | 欧美日韩亚洲中文字幕二区 | 精品久久久久久久久久大结局 | 亚洲中文字幕无线无码毛片^午夜亚洲国产理论秋霞^精品国产 | 国产中文字幕在线 | 日本一区二区三区在线观看网站 | 欧美日产国产精品日产 | 亚洲国产欧美日韩精品一区二区三区 | 国产欧美一区二区精品每日更新 | 国产日韩精品福利视频 | 亚洲国产免费无码午夜福利电影 | 精品国产天堂综合一区在线 | 国产-第1页-草草影院 | 欧美日韩精品不卡在线播放 | 中文亚洲网站播放 | 久久AⅤ无码精品色午麻豆 久久aa毛片免费播放嗯啊 | 一区二区三区成人A片在线观看 | 69精品人人人人 | 综合久久一区二区三区 | 午夜日韩影院电影在线 | 无码不卡午夜福利视频 | 国产不卡久久精品影院 | 亚洲欧美日韩国产综合在线 | 中文字幕av一区二区三区人妻少妇 | 国产成人无码av片在线观看不卡 |