会员
商店
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
玉米疯收
博客园
首页
新随笔
联系
管理
订阅
随笔- 455 文章- 16 评论- 791 阅读-
201万
托盘程序的主要步骤及解决方法
一个专门用来开发托盘程序的组件--NotifyIcon组件。下面就来介绍一下这个组件的具体用法和程序设计中的主要的技巧。
(1).如何在程序运行后隐藏窗体:
我们知道托盘程序运行后是无法看见主窗体的,他只会显示在工具栏上。在用Visual C#设计此类程序的时候,可以用二种方法使得程序运行后不显示主窗体。其中一种方法是重载主窗体中的OnActivated( )事件,OnActivated( )事件是在窗体激活的时候才触发的。通过重载此事件可以达到隐藏主窗体的目的。具体程序代码如下:
protected override void OnActivated ( EventArgs e )
{
this.Hide ( ) ;
}
另外一种方法是在初始化主窗体的时候完成的,通过设定主窗体的属性来达到不显示的目的。具体的程序代码如下:
this.MaximizeBox = false ;
this.MinimizeBox = false ;
this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;
在本文介绍的程序中,使用了第二种方法。
(2).如何为托盘程序设定显示图标:
在NotifyIcon组件中有一个属性icon就是来设定托盘图标的,由于Visual C#是一个完全的OOP (面向对象)语言,在Visual C#中任何东西都可以作为对象来处理。当然对应一个icon来说,也可以用对象的方法来处理他。我们通过下列语句来得到一个icon对象:
private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;
请注意:在编译好的程序中,必须要在同一个目录中有一个Tray.ico图标文件,否则程序运行时候会出错的。
通过下列语句把此icon对象付给NotifyIcon组件中的icon属性,此时如果程序正确编译,则此icon就会显示在工具栏中了。
TrayIcon.Icon = mNetTrayIcon ;
(3).设定当鼠标停留在托盘程序上显示的文本内容:
NotifyIcon组件中有一个属性Text。设定这个属性的内容,就是鼠标停留在托盘图标上显示的内容了。具体语句如下:
TrayIcon.Text = "用Visual C#做托盘程序" + "n" + "作者:马金虎于2001.12.08" ;
(4).如何在托盘程序加入菜单:
在NotifyIcon组件中有一个对象叫ContextMenu,在托盘程序中显示出的菜单就是通过设定此对象来实现的。以下的程序代码是为托盘程序加入菜单项:
notifyiconMnu = new ContextMenu ( mnuItms ) ;
TrayIcon.ContextMenu = notifyiconMnu ;
//为托盘程序设定菜单
(5).如何设定ContextMenu对象的内容:
ContextMenu对象是托盘程序的菜单的结构,所以如何设定此对象,在本程序中是比较关键的。在程序中,是通过定义一个菜单项数组,并对这个数组设定不同的值(这当中包括菜单的一些属性和事件),然后把这个数组同时赋值给ContextMenu对象,来实现对ContextMenu对象的设置过程的。以下是程序中具体代码:
//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象
MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;
mnuItms [ 0 ] = new MenuItem ( ) ;
mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ;
mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ;
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 ) ;
TrayIcon.ContextMenu = notifyiconMnu ;
//为托盘程序加入设定好的ContextMenu对象
当成功加入了ContextMenu对象后,在程序编译完成运行时,当鼠标右键点击托盘图标,程序会自动弹出ContextMenu对象封装好的菜单。
二. 本文介绍的程序源代码( Tray.cs ):
Tray.cs源程序代码:
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
//导入在程序中使用到的名称空间
public class Tray : Form
{
private System.ComponentModel.Container components = null ;
private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;
private NotifyIcon TrayIcon ;
private ContextMenu notifyiconMnu ;
public Tray()
{
//初始化窗体中使用到的组件
InitializeComponent ( ) ;
//初始化托盘程序的各个要素
Initializenotifyicon ( ) ;
}
private void Initializenotifyicon ( )
{
//设定托盘程序的各个属性
TrayIcon = new NotifyIcon ( ) ;
TrayIcon.Icon = mNetTrayIcon ;
TrayIcon.Text = "用Visual C#做托盘程序" + "n" + "作者:马金虎于2001.12.08" ;
TrayIcon.Visible = true ;
TrayIcon.Click += new System.EventHandler ( this.click ) ;
//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象
MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;
mnuItms [ 0 ] = new MenuItem ( ) ;
mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ;
mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ;
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 ) ;
TrayIcon.ContextMenu = notifyiconMnu ;
//为托盘程序加入设定好的ContextMenu对象
}
public void click ( object sender , System.EventArgs e )
{
MessageBox.Show ( "Visual C#编写托盘程序中的事件响应" ) ;
}
public void showmessage ( object sender , System.EventArgs e )
{
MessageBox.Show ( "你点击了菜单的第一个选项" ) ;
}
public void ExitSelect ( object sender , System.EventArgs e )
{
//隐藏托盘程序中的图标
TrayIcon.Visible = false ;
//关闭系统
this.Close ( ) ;
}
//清除程序中使用过的资源
public override void Dispose ( )
{
base.Dispose ( ) ;
if ( components != null )
components.Dispose ( ) ;
}
private void InitializeComponent ( )
{
this.SuspendLayout ( ) ;
this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;
this.ClientSize = new System.Drawing.Size ( 320 , 56 ) ;
this.ControlBox = false ;
this.MaximizeBox = false ;
this.MinimizeBox = false ;
this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;
this.Name = "tray" ;
this.ShowInTaskbar = false ;
this.Text = "用Visual C#做托盘程序!" ;
this.ResumeLayout ( false ) ;
}
static void Main ( )
{
Application.Run ( new Tray ( ) ) ;
}
}
三. 总结:
通过以上介绍,可以看出用Visual C#做一个托盘程序并不是一件复杂的事情,而是一件比较轻松的事情。同样也可使我们明白,Visual C#虽然是一种功能强大的程序设计语言,但它只是一个打开.Net FrameWork SDK的钥匙,正是这个内容丰富的软件包,才使得各个.Net程序开发语言有了施展自身功能更广阔的舞台。
好文要顶
关注我
收藏该文
微信分享
玉米疯收
粉丝 -
235
关注 -
7
+加关注
0
0
«
上一篇:
关于学生组的自我定位
»
下一篇:
(C#)调用API关机
posted @
2007-07-19 01:07
玉米疯收
阅读(
642
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
登录后才能查看或发表评论,立即
登录
或者
逛逛
博客园首页
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
编辑推荐:
·
AI与.NET技术实操系列:基于图像分类模型对图像进行分类
·
go语言实现终端里的倒计时
·
如何编写易于单元测试的代码
·
10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
·
.NET Core 中如何实现缓存的预热?
阅读排行:
·
25岁的心里话
·
闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
·
零经验选手,Compose 一天开发一款小游戏!
·
通过 API 将Deepseek响应流式内容输出到前端
·
因为Apifox不支持离线,我果断选择了Apipost!
公告
If I rest, I rust.
好记性,不如烂博客!嘻嘻!
友情链接
Python中国
昵称:
玉米疯收
园龄:
17年11个月
粉丝:
235
关注:
7
+加关注
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
更多链接
最新随笔
1.[C语言]排序问题--我的解答
2.转载:算法方面的一些书籍和网上资源
3.[C语言]排序问题
4.如何利用css使PNG图片透明
5.So, you think you know JavaScript? (你认为你懂JS吗)
6.不用密码使用ssh管理远程linux服务器
7.[转]mysql性能的检查和调优方法
8.PHP 中巧用数组降低程序的时间复杂度
9.HTTP协议中的5类状态码
10.冬日随笔
积分与排名
积分 - 358753
排名 - 2475
随笔分类
(201)
×CSS× (4)
×C语言× (11)
×Linux×(66)
×MySQL×(15)
×PHP×(19)
×大道至简-算法×(6)
×设计模式×(6)
×杂七杂八×(15)
FMS流媒体(9)
Linux-ubuntu(4)
PHP+Apache+mysql(9)
ubuntu使用笔记(5)
x译者无言X(3)
收藏柜(29)
随笔档案
(455)
2010年3月(1)
2010年2月(2)
2010年1月(3)
2009年12月(6)
2009年11月(4)
2009年10月(5)
2009年9月(5)
2009年8月(13)
2009年7月(7)
2009年6月(4)
2009年4月(7)
2009年3月(11)
2009年2月(4)
2009年1月(11)
2008年12月(6)
2008年10月(5)
2008年9月(4)
2008年8月(14)
2008年7月(11)
2008年6月(13)
2008年5月(17)
2008年4月(33)
2008年3月(38)
2008年2月(73)
2008年1月(34)
2007年12月(12)
2007年11月(19)
2007年10月(14)
2007年9月(40)
2007年8月(1)
2007年7月(17)
2007年6月(13)
2007年5月(6)
2007年4月(2)
推荐排行榜
1. Java学习之Iterator(迭代器)的一般用法 (转)(51)
2. 在Linux里设置环境变量的方法(export PATH)(22)
3. linux各文件夹的作用(15)
4. hibernate集合映射inverse和cascade详解 (8)
5. error while loading shared libraries的解決方法(4)
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!