最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)Winform序在系統(tǒng)托盤顯示圖標和開機自啟動

 更新時間:2025年01月19日 11:51:11   作者:VipSoft  
這篇文章主要為大家詳細介紹了C#如何實現(xiàn)Winform序在系統(tǒng)托盤顯示圖標和開機自啟動功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

實現(xiàn)步驟

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

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

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

常用方法

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

添加控件(拖拽方式)

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

NotifyIcon 托盤圖標

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

設置控件

點擊 ContextMenuStrip 右上方的三角圖標 -> 編輯項,彈出項信合編輯器

添加右健菜單信息

添加主窗體事件

在最小化或關閉主窗體時,顯示在任務欄托盤區(qū)域,實現(xiàn)了單擊關閉時,不真正關閉程序,而是將主界面隱藏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;
    }
}

實現(xiàn)雙擊托盤打開主程序

//  添加托盤程序
//  版本更新自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("你確定要退出?", "系統(tǒng)提示", 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;
            }
        }
    }
}

系統(tǒng)開機自啟動應用程序

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
        }
    }
}

到此這篇關于C#實現(xiàn)Winform序在系統(tǒng)托盤顯示圖標和開機自啟動的文章就介紹到這了,更多相關C# Winform開機自啟動內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • selenium.chrome寫擴展攔截或轉發(fā)請求功能

    selenium.chrome寫擴展攔截或轉發(fā)請求功能

    Selenium?WebDriver?是一組開源?API,用于自動測試?Web?應用程序,利用它可以通過代碼來控制chrome瀏覽器,今天通過本文給大家介紹selenium?chrome寫擴展攔截或轉發(fā)請求功能,感興趣的朋友一起看看吧
    2022-07-07
  • C#集合數(shù)據(jù)去重的5種方式及對比分析

    C#集合數(shù)據(jù)去重的5種方式及對比分析

    今天我們一起來討論一下關于C#集合數(shù)據(jù)去重的5種方式并且使用BenchmarkDotNet對這5種方式進行性能基準對比測試分析,每種方法都有其特點和適用場景,我們可以根據(jù)具體需求和執(zhí)行效率選擇一種進行使用,需要的朋友可以參考下
    2024-11-11
  • C#利用插值字符串處理器寫一個sscanf

    C#利用插值字符串處理器寫一個sscanf

    這篇文章主要為大家詳細介紹了C#如何利用插值字符串處理器寫一個sscanf,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • C#先判斷是否存在再創(chuàng)建文件夾或文件與遞歸計算文件夾大小

    C#先判斷是否存在再創(chuàng)建文件夾或文件與遞歸計算文件夾大小

    這篇文章介紹了C#先判斷是否存在再創(chuàng)建文件夾或文件與遞歸計算文件夾大小的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C#使用鉤子獲得按鍵信息的方法

    C#使用鉤子獲得按鍵信息的方法

    這篇文章主要介紹了C#使用鉤子獲得按鍵信息的方法,實例分析了C#中鉤子的相關使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • C#使用kernel32.dll讀寫INI文件的案例詳解

    C#使用kernel32.dll讀寫INI文件的案例詳解

    INI就是擴展名為"INI"的文件,其實他本身是個文本文件,可以用記事本打開,主要存放的是用戶所做的選擇或系統(tǒng)的各種參數(shù),這篇文章主要介紹了C#使用kernel32.dll讀寫INI文件的方法,需要的朋友可以參考下
    2023-05-05
  • C#微信公眾號開發(fā)之接收事件推送與消息排重的方法

    C#微信公眾號開發(fā)之接收事件推送與消息排重的方法

    這篇文章主要介紹了C#微信公眾號開發(fā)之接收事件推送與消息排重的方法,詳細分析了事件推送與消息排重的使用技巧,對微信開發(fā)有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • 字符串轉換成枚舉類型的方法

    字符串轉換成枚舉類型的方法

    字符串可以向int, bool等類型轉變,但是字符串是否可以向枚舉轉變呢?一起看下邊的例子
    2014-01-01
  • C#中四種定時器的用法詳解

    C#中四種定時器的用法詳解

    日常項目開發(fā)中,很多時候都需要用到定時器來處理一些問題,那么c#中各種定時器應該怎么用呢?下面來簡單介紹下C#中4種定時器的使用方法說明,感興趣的朋友可以參考下
    2024-04-04
  • C#表達式目錄樹示例詳解

    C#表達式目錄樹示例詳解

    這篇文章主要給大家介紹了關于C#表達式目錄樹的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論

南皮县| 迭部县| 长武县| 三亚市| 沂源县| 灌阳县| 荔波县| 广丰县| 鲜城| 阿尔山市| 陇南市| 即墨市| 泰顺县| 九台市| 乌拉特后旗| 苏尼特左旗| 荥阳市| 海安县| 重庆市| 乌拉特中旗| 金坛市| 东明县| 贵定县| 临沧市| 神农架林区| 富顺县| 洱源县| 甘洛县| 鄂尔多斯市| 辽中县| 桃园市| 嘉禾县| 九江市| 黄浦区| 连山| 临泽县| 宜昌市| 晋中市| 始兴县| 仙居县| 韶山市|