Visaul C#托盘程序制作心得

原创 2004年10月28日 21:36:00
首先,当然要引入NotifyIcon控件。
private System.Windows.Forms.NotifyIcon notifyIconServer;
this.notifyIconServer = new System.Windows.Forms.NotifyIcon(this.components);

接下来设置控件的各项属性:
  //
  // notifyIconServer
  //
  this.notifyIconServer.ContextMenu = this.contextMenuTray;//指定上下文菜单
  this.notifyIconServer.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIconServer.Icon")));//指定图标
  this.notifyIconServer.Text = "My Server";//指定鼠标悬停显示
  this.notifyIconServer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.notifyIconServer_MouseDown);
  this.notifyIconServer.DoubleClick += new System.EventHandler(this.notifyIconServer_DoubleClick);

  //
  // contextMenuTray 上下文菜单
  //
  this.contextMenuTray.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                      this.menuItem1,
                      this.menuItem2});
  //
  // menuItem1
  //
  this.menuItem1.Index = 0;
  this.menuItem1.Text = "打开 Chat Server";
  this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
  //
  // menuItem2
  //
  this.menuItem2.Index = 1;
  this.menuItem2.Text = "退出程序";
  this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);

用户点击窗体的“关闭”小按钮时,并不真正关闭窗体,而是将程序放到系统托盘。

private void ChatForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
  e.Cancel = true; // 取消关闭窗体
  this.Hide();
  this.ShowInTaskbar = false;
  this.notifyIconServer.Visible = true;//显示托盘图标
 }

notifyIcon的双击事件,可以恢复程序窗体:

private void notifyIconServer_DoubleClick(object sender, System.EventArgs e)
 {
     this.Show();
  if (this.WindowState == FormWindowState.Minimized)
   this.WindowState = FormWindowState.Normal;
  this.Activate();
 }

附加要求:单击鼠标左键也可调出一菜单。

解决方案如下:

首先声明一个上下文菜单:

  //
  // contextMenuLeft 左键菜单
  //
  this.contextMenuLeft.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                      this.menuItem3});
  //
  // menuItem3
  //
  this.menuItem3.Index = 0;
  this.menuItem3.Text = "关于……";

由于不能在notifyIcon上直接显示上下文菜单,只有创建一个Control作为容器,这是权宜之计,应该有更好的方法吧。
private void notifyIconServer_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
 {
  if(e.Button==MouseButtons.Left)
  {
   Control control = new Control(null,Control.MousePosition.X,Control.MousePosition.Y,1,1);
   control.Visible = true;
   control.CreateControl();
   Point pos = new Point(0,0);//这里的两个数字要根据你的上下文菜单大小适当地调整
   this.contextMenuLeft.Show(control,pos);
  }
 }

Visaul C#托盘程序制作心得

 英文:business dispute发音:[]拼读方式:中文解释:商业争执,业务争类别:其他资料:关于 business dispute 的例句...
  • antswallow
  • antswallow
  • 2007年12月29日 09:05
  • 512

C#-WinForm设置托盘程序

背景现在很多程序都有这样的托盘程序 窗体关闭时,并不真正关闭程序,只是任务栏不显示该应用程序,在右下侧托盘里显示; 双击托盘,窗体还原; 右击窗体,出现托盘菜单,实现最小化,最大户,还原,退出等...
  • gatieme
  • gatieme
  • 2015年08月08日 11:50
  • 6186

WPF实现系统托盘

利用WinForm项目中自带NotifyIcon,contextMenuStrip控件,创建一个winForm控件项目,然后在WPF中引入使用即可。参考: http://mervyn807.blog....
  • icewizardry
  • icewizardry
  • 2013年12月11日 16:11
  • 2666

C#托盘程序

一. 托盘程序的主要步骤及解决方法:   为什么说用Visual C#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包( .Net FrameWork SDK )中的WinForm...
  • 21aspnet
  • 21aspnet
  • 2007年03月24日 15:54
  • 2911

C# 托盘程序

转自:http://www.cnblogs.com/wuxiangbing/articles/1885483.html  桌面程序的开发中,经常考虑能在状态栏实现托盘快捷操作,托盘程...
  • heliang6291
  • heliang6291
  • 2015年11月27日 11:22
  • 814

C# 托盘程序 实例 双击显示窗体,最小化到托盘

原文:http://blog.csdn.net/lan_liang/article/details/7697742 单击任务栏  显示-隐藏切换,右键菜单,捕捉关闭窗体事件 ...
  • heliang6291
  • heliang6291
  • 2015年11月27日 11:23
  • 377

VC的托盘程序

见网友对VC中的托盘程序的评论很好,在这里记录一下以供以后可能参考:http://search.csdn.net/Expert/topic/2394/2394557.xml?temp=.363598 ...
  • hbxtlhx
  • hbxtlhx
  • 2004年11月24日 11:08
  • 3452

c# 托盘程序编程

先后在C# Windos Form和WPF项目中涉及到了托盘编程,最近闲来总结了一下。 C# Form 通过标准的NotifyIconEx控件: 弹出tooltip,可以直接通过Sh...
  • nodeathphoenix
  • nodeathphoenix
  • 2017年02月27日 12:50
  • 405

C#如何调用外部程序,及该托盘程序的恢复与隐藏

第一次写博客,太OUT了…… 现状:项目中要调用一个外部的应用程序,该程序最小化之后,隐藏在系统托盘中 要求:如果该程序没有运行,则启动,如果被隐藏在托盘中,则恢复到使用状态 看了网上的资料,好...
  • good_tongtong
  • good_tongtong
  • 2016年03月25日 12:33
  • 1784

C#实现用托盘控制windows服务的

这个例子既实现了系统托盘功能,也实现了多windows服务的控制,非常实用!using System;namespace UBISerialsController{ ///  /// Class1 的...
  • rosekisser
  • rosekisser
  • 2008年02月21日 16:45
  • 1527
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Visaul C#托盘程序制作心得
举报原因:
原因补充:

(最多只允许输入30个字)