zoukankan
html css js c++ java
用C#编写托盘程序
所谓托盘程序顾名思义就是象托起的盘子一样的程序。而所谓的托起的盘子就是程序运行中显示出的图标,而托起的位置就是视窗系统的的工具栏了。托盘程序具有直观、占用屏幕空间较小并且可以为它定义多个功能菜单,这就给操作者带来了方便,所以越来越多的程序设计者都把程序设计成托盘这种方式。我们已经看过了用其他语言设计托盘程序的例子,其中的大部分,整个设计过程还是相对烦琐的。而对于微软公司极力推荐的下一代程序开发语言
--
Visual C#来说,却可以十分方便设计出一个托盘程序。本文就是介绍Visual C#设计托盘程序的具体过程。
首先来介绍一下本文中设计托盘程序所需要的环境:
(
1
).微软公司视窗2000服务器版
(
2
)..Net FrameWork SDK Beta
2
一. 托盘程序的主要步骤及解决方法:
为什么说用Visual C#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包( .Net FrameWork SDK )中的WinForm组件中定义了一个专门用来开发托盘程序的组件
--
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成功编译后的运行界面:
图01:程序运行界面
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程序开发语言有了施展自身功能更广阔的舞台。
查看全文
相关阅读:
Filecoin:一种去中心化的存储网络(二)
Filecoin:一种去中心化的存储网络(一)
HTTP
数据结构中的查找
剑指offer-高质量的代码
C++中STL容器的比较
PBFT算法的相关问题
springmvc最全约束
springmvc入门(一)
spring入门(一)
原文地址:https://www.cnblogs.com/zhangchenliang/p/731060.html
最新文章
java推送缓存Redis
JAVA常用小功能实现方法整理
java前端常见报错整理
java常见报错整理
java多线程
socket客户端和服务端通信
java控制台输入输出总结
SpringCloud学习笔记(1)——Eureka
redis集群设置密码
mybatis 一对一与一对多collection和association的使用
热门文章
Linux环境快速部署Zookeeper集群
Linux jar包 后台运行
Centos7 安装redis集群哨兵模式
linux安装tomcat9
远程服务器安装mysql数据库
redis集群服务启动
idea+dubbo+zookeeper项目访问html页面的方法
死锁的条件、原因以及场景分析
JAVA常见的集合类
EOS.IO技术学习
Copyright © 2011-2022 走看看