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

简介:

C#编写最小化时隐藏为任务栏图标的 Window appllication.  

1.设置WinForm窗体属性showinTask=false

2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标。

3.添加窗体最小化事件(首先需要添加事件引用):

this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);

//上面一行是主窗体InitializeComponent()方法中需要添加的引用

private void Form1_SizeChanged(object sender, EventArgs e) 

    if(this.WindowState == FormWindowState.Minimized) 
    { 
       this.Hide(); 
       this.notifyIcon1.Visible=true; 
    } 
}

4.添加点击图标事件(首先需要添加事件引用):

private void notifyIcon1_Click(object sender, EventArgs e) 

    this.Visible = true; 
    this.WindowState = FormWindowState.Normal; 
    this.notifyIcon1.Visible = false; 
}


5.可以给notifyIcon添加右键菜单:

主窗体中拖入一个ContextMenu控件NicontextMenu,点中控件,在上下文菜单中添加菜单,notifyIcon1的ContextMenu行为中选中NicontextMenu 作为上下文菜单。

this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); 
this.NicontextMenu = new System.Windows.Forms.ContextMenu(); 
this.menuItem_Hide = new System.Windows.Forms.MenuItem(); 
this.menuItem_Show = new System.Windows.Forms.MenuItem(); 
this.menuItem_Aubot = new System.Windows.Forms.MenuItem(); 
this.menuItem_Exit = new System.Windows.Forms.MenuItem();  


this.notifyIcon1.ContextMenu = this.NicontextMenu; 
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject( "NotifyIcon.Icon "))); 
this.notifyIcon1.Text = " "; 
this.notifyIcon1.Visible = true; 
this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick); 
this.notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);


this.NicontextMenu.MenuItems.AddRange(

    new System.Windows.Forms.MenuItem[]
    { 
          this.menuItem_Hide, 
          this.menuItem_Show, 
          this.menuItem_Aubot, 
          this.menuItem_Exit
    }
);

//     
//       menuItem_Hide 
//     
this.menuItem_Hide.Index = 0; 
this.menuItem_Hide.Text = "隐藏 "; 
this.menuItem_Hide.Click += new System.EventHandler(this.menuItem_Hide_Click); 
//     
//       menuItem_Show 
//     
this.menuItem_Show.Index = 1; 
this.menuItem_Show.Text = "显示 "; 
this.menuItem_Show.Click += new System.EventHandler(this.menuItem_Show_Click); 
//     
//       menuItem_Aubot 
//     
this.menuItem_Aubot.Index = 2; 
this.menuItem_Aubot.Text = "关于 "; 
this.menuItem_Aubot.Click += new System.EventHandler(this.menuItem_Aubot_Click); 
//     
//       menuItem_Exit 
//     
this.menuItem_Exit.Index = 3; 
this.menuItem_Exit.Text = "退出 "; 
this.menuItem_Exit.Click += new System.EventHandler(this.menuItem_Exit_Click);

protected  override  void  OnClosing(CancelEventArgs e) 

   this.ShowInTaskbar = false; 
   this.WindowState = FormWindowState.Minimized; 
   e.Cancel = true;     

protected  override  void  OnClosing(CancelEventArgs e) 

   //this.ShowInTaskbar = false; 
   this.WindowState = FormWindowState.Minimized; 
   e.Cancel = true;     
}

private  void  CloseCtiServer() 

   timer.Enabled = false; 
   DJ160API.DisableCard(); 
   this.NotifyIcon.Visible = false; 
   this.Close(); 
   this.Dispose(); 
   Application.Exit(); 
}

private  void  HideCtiServer() 

   this.Hide(); 
}

private  void  ShowCtiServer() 

   this.Show(); 
   this.WindowState = FormWindowState.Normal; 
   this.Activate();


private  void  CtiManiForm_Closing(object sender, System.ComponentModel.CancelEventArgs e) 

    this.CloseCtiServer(); 
}

private  void  menuItem_Show_Click(object sender, System.EventArgs e) 

    this.ShowCtiServer(); 
}

private  void  menuItem_Aubot_Click(object sender, System.EventArgs e) 
{

}

private  void  menuItem_Exit_Click(object sender, System.EventArgs e) 

    this.CloseCtiServer(); 
}

private  void  menuItem_Hide_Click(object sender, System.EventArgs e) 

    this.HideCtiServer(); 
}

private  void  CtiManiForm_SizeChanged(object sender, System.EventArgs e) 

   if(this.WindowState == FormWindowState.Minimized) 
   { 
      this.HideCtiServer(); 
   } 
}

private  void  notifyIcon1_DoubleClick(object sender,System.EventArgs e) 
{                                                                 
    this.ShowCtiServer(); 
}




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2007/12/19/1006005.html,如需转载请自行联系原作者
相关文章
|
2月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
1月前
|
存储 开发框架 .NET
C#语言如何搭建分布式文件存储系统
C#语言如何搭建分布式文件存储系统
66 2
|
20天前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
|
1月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
62 0
|
1月前
|
存储 分布式计算 监控
C# 创建一个分布式文件存储系统需要怎么设计??
C# 创建一个分布式文件存储系统需要怎么设计??
29 0
|
1月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
72 0
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
188 3
|
6月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
196 3
|
7天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
19 3
|
27天前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。