博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinForm 之 窗口最小化到托盘及右键图标显示菜单
阅读量:7213 次
发布时间:2019-06-29

本文共 3355 字,大约阅读时间需要 11 分钟。

  Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件。

一、添加NotifyIcon控件

  1 如下图为窗体添加一个 NotifyIcon 控件,并指定 Icon 和 Text 属性,如下图:

  

  2 在需要窗体最小化到托盘的处理代码中,添加如下代码:

if(this.WindowState==FormWindowState.Normal&&this.Visible==true){    this.notifyIcon1.Visible=true;//在通知区显示Form的Icon    this.WindowState=FormWindowState.Minimized;    this.Visible=false;    this.ShowInTaskbar=false;//使Form不在任务栏上显示}

  

   3 可以为 添加NotifyIcon控件指定双击事件,双击还原,代码如下:

///         /// 添加双击托盘图标事件(双击显示窗口)        ///         /// 
        /// 
        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)        {            if (WindowState == FormWindowState.Minimized)            {                //还原窗体显示                    WindowState = FormWindowState.Normal;                //激活窗体并给予它焦点                this.Activate();                //任务栏区显示图标                this.ShowInTaskbar = true;                //托盘区图标隐藏                notifyIcon1.Visible = false;            }        }

  4 关闭窗体询问是否直接退出或者最小化到托盘

///         /// 判断是否最小化,然后显示托盘        ///         /// 
        /// 
        private void F_Main_SizeChanged(object sender, EventArgs e)        {            //判断是否选择的是最小化按钮            if (WindowState == FormWindowState.Minimized)            {                //隐藏任务栏区图标                this.ShowInTaskbar = false;                //图标显示在托盘区                notifyIcon1.Visible = true;            }        }        /// 
        /// 确认是否退出        ///         /// 
        /// 
        private void F_Main_FormClosing(object sender, FormClosingEventArgs e)        {            if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)            {                // 关闭所有的线程                this.Dispose();                this.Close();            }            else            {                e.Cancel = true;            }         }

二、添加 ContextMenuStrip 控件

  1 在窗体添加一个 ContextMenuStrip 控件,然后添加控件菜单项,最后绑定给 NotifyIcon 控件即可,如下:

  

  2 绑定菜单给 NotifyIcon 控件,如下图:

  

  3 为 ContextMenuStrip 控件的菜单项指定单击事件,如下:

///         /// 托盘右键显示主界面        ///         /// 
        /// 
        private void 显示ToolStripMenuItem_Click(object sender, EventArgs e)        {            WindowState = FormWindowState.Normal;        }        /// 
        /// 托盘右键退出程序        ///         /// 
        /// 
        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)        {            if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)            {                // 关闭所有的线程                this.Dispose();                this.Close();            }        }

三、为 NotifyIcon 控件添加单击事件,控制菜单的显示及窗口的还原,代码如下:

private void myIcon_MouseClick(object sender, MouseEventArgs e)        {              if (e.Button == MouseButtons.Right)               {                       myMenu.Show();               }                  if (e.Button == MouseButtons.Left)               {                        this.Visible = true;                        this.WindowState = FormWindowState.Normal;                                }         }

 

转载地址:http://xwyym.baihongyu.com/

你可能感兴趣的文章
Android开发实现QQ三方登录 标签: android开发qq三方登录
查看>>
2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】
查看>>
【Linux】使用xshell登陆时密码框为灰色,无法输入密码
查看>>
gradle平级项目引用
查看>>
win10应用开发——如何判断应用是在手机上运行还是电脑上运行
查看>>
一位10年程序员生涯的总结与经验忠告分享
查看>>
点击照片上传照片一
查看>>
[SF] Symfony 组件 BrowserKit 原理
查看>>
关于修改linux hostname的问题,尤其是redhat 7修改hostname的方式
查看>>
nginx服务器的负载均衡和动静分离(未完)
查看>>
php 处理ftp常用操作与方法
查看>>
nutz 结合QueryResult,Record 自定义分页查询,不构建pojo 整合
查看>>
Mac下安装Pyqt
查看>>
m-orchastration system
查看>>
Golang 微框架 Gin 简介
查看>>
redis 中 set 和 hset 有什么不同,什么时候使用 hset 什么时候使用set?
查看>>
axios介绍与使用说明 axios中文文档
查看>>
Java基础-Date类常用方法介绍
查看>>
Pythonic版冒泡排序和快速排序(附:直接插入排序)
查看>>
各大厂分布式链路跟踪系统架构对比
查看>>