WinForm实现最小化到系统托盘方法实例详解

本文实例讲述了WinForm实现最小化到系统托盘方法。分享给大家供大家参考。具体分析如下:

有个叫NotifyIcon的控件

1、建个WinForm项目,其它操作略过。
2、拉个NotifyIcon控件,将属性Visable设置成False,在Text属性上随便填些文件。
3、实现Form的SizeChanged事件,代码如下:

if(this.WindowState == FormWindowState.Minimized) //判断是否最小化
{
this.ShowInTaskbar = false; //不显示在系统任务栏
notifyIcon.Visible = true; //托盘图标可见
}

4、实现NotifyIcon控件的DoubleClick事件,代码如下:

if(this.WindowState == FormWindowState.Minimized)
{
this.ShowInTaskbar = true; //显示在系统任务栏
this.WindowState = FormWindowState.Normal; //还原窗体
notifyIcon.Visible = false; //托盘图标隐藏
}

例题:

private ContextMenu notifyiconMnu;
#region 最小化到任务栏
/// <summary>
/// 最小化到任务栏
/// </summary>
private void Initializenotifyicon()
{
  //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象
  MenuItem[] mnuItms = new MenuItem[3];
  mnuItms[0] = new MenuItem();
  mnuItms[0].Text = "显示窗口";
  mnuItms[0].Click += new System.EventHandler(this.notifyIcon1_showfrom);
  mnuItms[1] = new MenuItem("-");
  mnuItms[2] = new MenuItem();
  mnuItms[2].Text = "退出系统";
  mnuItms[2].Click += new System.EventHandler(this.ExitSelect);
  mnuItms[2].DefaultItem = true;
  notifyiconMnu = new ContextMenu(mnuItms);
  notifyIcon1.ContextMenu = notifyiconMnu;
  //为托盘程序加入设定好的ContextMenu对象
}
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
  if (this.WindowState == FormWindowState.Minimized)
  {
    this.Show();
    this.ShowInTaskbar = true;
    this.WindowState = FormWindowState.Normal;
    notifyIcon1.Visible = false;
  }
}
public void notifyIcon1_showfrom(object sender, System.EventArgs e)
{
  if (this.WindowState == FormWindowState.Minimized)
  {
    this.Show();
    this.ShowInTaskbar = true;
    this.WindowState = FormWindowState.Normal;
    notifyIcon1.Visible = false;
  }
}
public void ExitSelect(object sender, System.EventArgs e)
{
  //隐藏托盘程序中的图标
  notifyIcon1.Visible = false;
  //关闭系统
  this.Close();
  this.Dispose(true);
}
#endregion
private void Form_main_SizeChanged(object sender, EventArgs e)
{
  if (this.WindowState == FormWindowState.Minimized)
  //判断是否最小化
  {
    notifyIcon1.Visible = true;
    this.Hide();
    this.ShowInTaskbar = false;
    Initializenotifyicon();
  }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

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

    1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小化事件(首先需要添加事件引用): 复制代码 代码如下: this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged); //上面一行是主窗体InitializeComponent()方法中需要添加的引用 private voi

  • C#实现Winform动态添加菜单的方法

    本文实例讲述了C#实现Winform动态添加菜单的方法.分享给大家供大家参考.具体分析如下: 最近在做WINFORM开发,一直都在为主界面的点击事件及动态加载菜单苦脑.现在已解决这个问题了,可以实现数据库或都XML等配置完成动态生成菜单及事件加载.代码如下: private void Form1_Load(object sender, EventArgs e) { //添加菜单一 ToolStripMenuItem subItem; subItem = AddContextMenu("入库&qu

  • C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法

    本文实例讲述了C# Winform实现捕获窗体最小化.最大化.关闭按钮事件的方法,主要是通过重写WndProc来实现的.分享给大家供大家参考.具体方法如下: 主要功能代码如下: const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = 0xF020; const int SC_MAXIMIZE = 0xF030; protected override void WndProc(ref

  • C#实现WinForm捕获最小化事件的方法

    一般来说,虽然Form类没有提供Minimize的事件,但还是可以通过重载Deactive来实现WinForm捕获最小化事件. 实现方法为:当Form失去焦点后,测试WindowState取得Form状态,若为Minimized既是最小化事件. 本例为最小化后隐藏窗口: 还有种方法更加直接,重载WndProc: 实现代码如下: const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE =

  • C#实现winform自动关闭MessageBox对话框的方法

    本文实例讲述了C#实现winform自动关闭MessageBox对话框的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.Inte

  • C# Winform窗口之间传值的多种方法浅析

    摘要 一般的工程都是多个form组成的,各个窗体之间经常要灵活的传递数据.下面分享一点自己的经验: 窗体传值的方法有很多,下面仅介绍我用过的一些,不知道官方叫这些什么方法,大家也可以找找看其他的. 通过构造器传值 这是最简单的一种方式,例如我从form1中要传一个字符串去form2 首先,在form2的构造器中稍作修改: 复制代码 代码如下: public Form2(String s)         {             InitializeComponent();          

  • WinForm实现最小化到系统托盘方法实例详解

    本文实例讲述了WinForm实现最小化到系统托盘方法.分享给大家供大家参考.具体分析如下: 有个叫NotifyIcon的控件 1.建个WinForm项目,其它操作略过. 2.拉个NotifyIcon控件,将属性Visable设置成False,在Text属性上随便填些文件. 3.实现Form的SizeChanged事件,代码如下: if(this.WindowState == FormWindowState.Minimized) //判断是否最小化 { this.ShowInTaskbar = f

  • Springmvc ajax跨域请求处理方法实例详解

    上次给一个网站写网站  前后端分离 最后跪在ajax跨域上面了  自己在网上找了个方法  亲试可用  记录一下 写一个类  继承HandlerInterceptorAdapter package com.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.handler.Ha

  • IOS自带Email的两种方法实例详解

    IOS自带Email的两种方法实例详解 IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. 1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出.下面是使用openURL来发邮件的一个小例子: #pr

  • C#调用Java方法实例详解

    C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用C++的例子网上很多,以一个C++的具体方法为例. C++代码 // 获取一帧图像数据 MVSMARTCAMCTRL_API int __stdcall MV_SC_GetOneFrame(IN void* handle, IN OUT unsigned char *pData , IN unsig

  • Android实现定时器的五种方法实例详解

    一.Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用. 跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需要对有大量对象的list进行排序,在TimerTask中执行不会阻塞子线程,常常与handler结合使用,在处理完复杂耗时的操作后,通过handler来更新UI界面. timer.schedule(task, delay,period); task: Time

  • Android自定义View的实现方法实例详解

    一.自绘控件 下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次.新建一个CounterView继承自View,代码如下所示: 可以看到,首先我们在CounterView的构造函数中初始化了一些数据,并给这个View的本身注册了点击事件,这样当CounterView被点击的时候,onClick()方法就会得到调用.而onClick()方法中的逻辑就更加简单了,只是对mCount这个计数器加1,然后调用invalidate()方法.通过 Andr

  • JavaScript中十种一步拷贝数组的方法实例详解

    JavaScript中我们经常会遇到拷贝数组的场景,但是都有哪些方式能够来实现呢,我们不妨来梳理一下. 1.扩展运算符(浅拷贝) 自从ES6出现以来,这已经成为最流行的方法.它是一个很简单的语法,但是当你在使用类似于React和Redux这类库时,你会发现它是非常非常有用的. numbers = [1, 2, 3]; numbersCopy = [...numbers]; 这个方法不能有效的拷贝多维数组.数组/对象值的拷贝是通过引用而不是值复制. // numbersCopy.push(4);

  • mybatis防止SQL注入的方法实例详解

    SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见.究其原因不外乎:No patch for stupid.为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: table user( id varchar(20) PRIMARY KEY , name varchar(20) , age varchar(20) ); 然后使用JDBC操作表: private String getNameByUserId(String userId) { Connection conn

  • JavaScript复制变量三种方法实例详解

    这篇文章主要介绍了JavaScript复制变量三种方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 直接将一个变量赋给另一个变量时,系统并不会创造一个新的变量,而是将原变量的地址赋给了新变量名.举个栗子: 复制代码 复制代码 let obj = { a: 1, b: 2, }; let copy = obj; obj.a = 5; console.log(copy.a); // Result // a = 5; // 更改obj的值,

随机推荐