关闭

C# 系统应用之窗体最小化至任务栏及常用操作

标签: C#系统应用窗体最小化至任务栏系统托盘常用功能NotifyIconContextMenuStrip
7930人阅读 评论(2) 收藏 举报
分类:

现在很多软件如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;            //设置图标可见
            }
        }
    }
}

五.总结

该文章主要是结合自己的项目完成,主要是窗体最小化至任务栏(系统托盘)同时包括一些常用操作.同时下面两篇文章涉及到点击"最小化"按钮才实现最小到任务栏的文章,与该篇文章略有不同,如果想做这方面的可以阅读.感谢两位文章作者.
最后,希望文章对大家有所帮助,如果该篇文章中有错误或不足之处,请大家海涵!
(By:Eastmount 2014-1-21 下午6点 http://blog.csdn.net/eastmount)
2
0
查看评论

C#实现窗口最小化到系统托盘

C#实现窗口最小化到系统托盘 C#编写最小化时隐藏为任务栏图标的 Window appllication. 1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一...
  • yinbucheng
  • yinbucheng
  • 2017-02-21 14:32
  • 1589

C# WinForm窗口最小化到系统托盘

注:本程序是在VS2005基础上写的。1。如果不想让程序在任务栏中显示,请把窗体的属性ShowInTaskbar设置为false;2。如果想让程序启动时就最小化,请设置窗体的属性WindowState设置为Minimized。(Minimized 最小化,Normal正常启动,Maximized最大...
  • xiaohutushen
  • xiaohutushen
  • 2007-04-09 14:25
  • 7721

C#程序实现窗体的最大化/最小化

C#代码实现: private void button1_Click(object sender, EventArgs e) { this.WindowState = FormWindowState.Maximized; this.notifyIcon1.Visible = tru...
  • jiangqin115
  • jiangqin115
  • 2014-11-18 18:55
  • 5660

C#怎么使得窗体在最下面和最上面切不会因win+d而最小化

API正是神奇!!今天看到个SetParent这个函数有点神奇就测试了一个果然不同凡响!1如果在.net中做一个顶级窗体很简单可是当你点显示桌面的时候他回最小化!怎么才能使它不最小化呢?在必须在它的SizeChanged事件里面写:if (this.WindowState==FormWindowSt...
  • hawk521
  • hawk521
  • 2006-08-25 18:42
  • 2206

C#窗体最小化到右下角托盘的方法

用VC实现过最小化到右下角托盘,相比较而言C#更方便直观,主要有以下几个步骤:1. 添加一个notifyIcon 控件notifyIcon的ICON图标设置成想显示的图标2. 增加窗体的最小化事件        //点击最小化到托...
  • dengta_snowwhite
  • dengta_snowwhite
  • 2010-12-09 10:15
  • 6070

C#处理窗体的最小化事件及恢复正常窗体事件

最近因为我的一个小软件需要处理窗体最小化事件及窗体从最小化恢复到正常状态时的事件, 所以上网查了下,原来是通过处理窗体的Resize事件来实现的,我实现该工能时的主要代码如下: //窗体大小发生变化时 private void FormMain_Resize(object...
  • friendan
  • friendan
  • 2012-11-27 13:02
  • 17132

C# 最小化窗口到任务栏

添加一个 notifyIcon控件,用来在任务栏显示图标为form添加SizeChanged事件:private void Form1_SizeChanged(object sender, EventArgs e)      &#...
  • ZengCong2008
  • ZengCong2008
  • 2011-06-23 19:37
  • 4944

C#应用程序只允许运行一个实例,多次运行的时候激活当前实例,显示其界面

很多时候,我们开发的程序,需要单例运行的的功能,即整个应用程序只允许同时运行最多一个实例,重复运行的时候,激活当前实力,显示其界面。   在C#程序中,其解决方案有多重,可以参照Charles Chen 的C#程序只允许运行一个实例的解决方案一文。   参照其文章,我决定使用调用Windows ...
  • honantic
  • honantic
  • 2015-08-17 15:04
  • 21259

C#WinForm窗体的最大化最小化及还原

//最大化 private void button1_Click(object sender, EventArgs e)         {             WindowState = ...
  • MkCrawling
  • MkCrawling
  • 2014-10-27 13:44
  • 1894

C# Windows Form 最小化系统托盘(Tray)

程序界面如下: 控件 :button notifyIcon contextMenuStrip点击托盘 出现提示框 询问是否真的要托盘 确认 程序托盘到windows右下角双击托盘图标 程序显示 右键托盘图标 显示菜单点击最小化按钮程序托盘程序所有代码如下:using System;usin...
  • blue5tar
  • blue5tar
  • 2008-02-16 20:37
  • 1670
    个人资料
    • 访问:2326957次
    • 积分:21613
    • 等级:
    • 排名:第413名
    • 原创:270篇
    • 转载:10篇
    • 译文:0篇
    • 评论:1651条
    个人博客
    作者:杨秀璋
    学历:本科-北京理工大学
               硕士-北京理工大学
    现任教于贵财财经大学信息学院
    http://www.eastmountyxz.com

    简介:自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。

    贵州纵美路迢迢,
    为负劳心此一遭。
    收得破书三四本,
    也堪将去教尔曹。

    娜美人生,醉美生活。
    他和她经历风雨,慢慢变老。
    博客专栏
    牛人博客
    最新评论