程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 系統應用之窗體最小化至任務欄及常用操作

C# 系統應用之窗體最小化至任務欄及常用操作

編輯:C#入門知識

現在很多軟件如360殺毒軟件、酷狗音樂都擁有最小化至任務欄並在系統托盤區留下圖標,我的項目同樣需要該功能.所以本文主要敘述如何使用C#讓窗體最小化至任務欄,同時在系統托盤區的圖標點擊左鍵能顯示窗體,右鍵能關聯控件顯示3個常用功能.主要涉及到的控件是NotifyIcon和ContextMenuStrip,此類文章較多,希望作者以自己的獨特視角給予大家幫助.

一.界面操作

1.創建"Windows窗體應用程序"項目,從"工具箱"中添加NotifyIcon(運行時期間在Windows任務欄右側的通知區域顯示圖標).鼠標右擊notifyIcon1屬性,為控件屬性Icon添加圖標,Text屬性為"CSDN".

2.添加ContextMenuStrip(當用戶右擊關聯控件時顯示快鍵菜單).鼠標右鍵contextMenuStrip1屬性,進入Items添加或右鍵"編輯項".添加3個toolStripMenuItem,設置其Text為"顯示窗體"、"隱藏窗體"、"退出".如下圖所示:

\

3.關聯系統托盤圖標與右鍵菜單.設置notifyIcon1的ContextMenuStrip屬性為contextMenuStrip1關聯兩個控件.運行程序,右下角任務欄的系統托盤處圖標點擊右鍵顯示如下圖所示:

\

二.窗體設置

窗體設置主要是當窗體點擊"退出"按鈕時,任務欄仍然顯示圖標且程序沒有退出.設置Form1的MaximizeBox(窗體是否能最大化)屬性設置為False,讓其不能最大化.並為Form1添加FormClosing(當用戶關閉窗體時,在窗體已關閉並制定關閉原因前發生)事件.如下圖所示.

\

添加代碼如下,主要實現的功能是當用戶點擊窗體"關閉"按鈕或通過Alt+F4快捷關閉時,取消關閉操作且窗體隱藏,任務欄圖標仍然顯示:

//窗體關閉前發生事件
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    //窗體關閉原因為單擊"關閉"按鈕或Alt+F4
    if (e.CloseReason == CloseReason.UserClosing)
    {
        e.Cancel = true;           //取消關閉操作 表現為不關閉窗體
        this.Hide();               //隱藏窗體
    }
}

其中:FormClosingEventArgs 類為FormClosing事件提供數據,其屬性Cancel獲取或設置是否應取消事件的值,CloseReason獲取一個值,該值指示關閉窗體的原因.(詳見MSDN FormClosingEventArgs 類)
注意:添加的事件是Form_Closing-窗體關閉前發生,而不是Form_Closed窗體已關閉發生.它沒有e.Cancel屬性,會提示錯誤 "System.Windows.Forms.FormClosedEventArgs"不包含Cancel的定義.

三.系統托盤功能

常見的窗體最小化至任務欄(系統托盤)圖標的功能:
1.當鼠標左鍵點擊圖標時,顯示窗體.
2.當鼠標右鍵點擊圖標時,顯示"顯示窗體"\"隱藏窗體"\"退出"菜單欄,並有相對應的功能.
具體操作是:分別點擊"顯示窗體"\"隱藏窗體"\"退出"在其屬性欄中添加"Click"事件.添加代碼如下:

//"顯示窗體"單擊事件
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
    this.Show();                                //窗體顯示
    this.WindowState = FormWindowState.Normal;  //窗體狀態默認大小
    this.Activate();                            //激活窗體給予焦點
}

//"隱藏窗體"單擊事件
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
    this.Hide();                      //隱藏窗體
}

//"退出"單擊事件
private void toolStripMenuItem3_Click(object sender, EventArgs e)
{
    //點擊"是(YES)"退出程序
    if (MessageBox.Show("確定要退出程序?", "安全提示",
                System.Windows.Forms.MessageBoxButtons.YesNo,
                System.Windows.Forms.MessageBoxIcon.Warning)
        == System.Windows.Forms.DialogResult.Yes)
    {
        notifyIcon1.Visible = false;   //設置圖標不可見
        this.Close();                  //關閉窗體
        this.Dispose();                //釋放資源
        Application.Exit();            //關閉應用程序窗體
    }
}
其中,窗體的狀態FormWindowState有Minimized(最小化)、Maximized(最大化)、Normal(默認大小).有的程序設置sizechanged事件,當用戶點擊"最小化"按鈕窗體尺寸變化時才最小化至任務欄(系統托盤).但我認為打開程序時就有最小化圖標更好,同時添加FormClosing事件更符合用戶使用.點擊"退出"運行結果如下圖所示:

\

最後添加鼠標左鍵圖標顯示窗體功能.右鍵notifyIcon1屬性,添加MouseClick(鼠標單擊組件時發生)事件.添加代碼如下:

//鼠標左鍵圖標事件
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
    //點擊鼠標"左鍵"發生
    if (e.Button == MouseButtons.Left)
    {
        this.Visible = true;                        //窗體可見
        this.WindowState = FormWindowState.Normal;  //窗體默認大小
        this.notifyIcon1.Visible = true;            //設置圖標可見
    }
}

四.完整代碼

源代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinFormMin
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //窗體關閉前發生事件
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //窗體關閉原因為單擊"關閉"按鈕或Alt+F4
            if (e.CloseReason == CloseReason.UserClosing)
            {
                e.Cancel = true;           //取消關閉操作 表現為不關閉窗體
                this.Hide();               //隱藏窗體
            }
        }

        //"顯示窗體"單擊事件
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            this.Show();                                //窗體顯示
            this.WindowState = FormWindowState.Normal;  //窗體狀態默認大小
            this.Activate();                            //激活窗體給予焦點
        }

        //"隱藏窗體"單擊事件
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            this.Hide();                      //隱藏窗體
        }

        //"退出"單擊事件
        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            //點擊"是(YES)"退出程序
            if (MessageBox.Show("確定要退出程序?", "安全提示",
                        System.Windows.Forms.MessageBoxButtons.YesNo,
                        System.Windows.Forms.MessageBoxIcon.Warning)
                == System.Windows.Forms.DialogResult.Yes)
            {
                notifyIcon1.Visible = false;   //設置圖標不可見
                this.Close();                  //關閉窗體
                this.Dispose();                //釋放資源
                Application.Exit();            //關閉應用程序窗體
            }
        }

        //鼠標左鍵圖標事件
        private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
        {
            //點擊鼠標"左鍵"發生
            if (e.Button == MouseButtons.Left)
            {
                this.Visible = true;                        //窗體可見
                this.WindowState = FormWindowState.Normal;  //窗體默認大小
                this.notifyIcon1.Visible = true;            //設置圖標可見
            }
        }
    }
}

五.總結

該文章主要是結合自己的項目完成,主要是窗體最小化至任務欄(系統托盤)同時包括一些常用操作.同時下面兩篇文章涉及到點擊"最小化"按鈕才實現最小到任務欄的文章,與該篇文章略有不同,如果想做這方面的可以閱讀.感謝兩位文章作者. http://blog.sina.com.cn/s/blog_45eaa01a01013u36.html
http://blog.csdn.net/furturerock/article/details/5687793 最後,希望文章對大家有所幫助,如果該篇文章中有錯誤或不足之處,請大家海涵!
(By:Eastmount 2014-1-21 下午6點 http://blog.csdn.net/eastmount)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved