国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

VB.NET編程之托盤程序篇

2024-07-10 13:01:06
字體:
供稿:網(wǎng)友
菜鳥學堂:
本文程序的設(shè)計及運行環(huán)境

(1)windows 2000 service

(2)net framework sdk 正式版



靜態(tài)托盤程序的編寫過程


所謂靜態(tài)托盤程序是指程序運行后,在系統(tǒng)托盤區(qū)的圖標處于靜止狀態(tài)的托盤程序。動態(tài)托盤程序正好與之相反,它是指在系統(tǒng)托盤區(qū)圖標呈現(xiàn)動畫效果的一類托盤程序。下面就來探討一下vb.net是如何實現(xiàn)靜態(tài)托盤程序。

.net framework sdk為編寫托盤程序提供了一個組件:notifyicon組件。notifyicon組件是一個winform組件,位于命名空間"system.windows.forms"中,在vb.net程序中,只要創(chuàng)建一個notifyicon組件的實例,并且對notifyicon實例的"icon"屬性賦值,這樣一個簡單的托盤程序就完成了。下面就是這個簡單托盤程序?qū)τ诘拇a(form1.vb):

public class form1
inherits system.windows.forms.form
#region " windows 窗體設(shè)計器生成的代碼 "
public sub new ( )
mybase.new ( )
'該調(diào)用是 windows 窗體設(shè)計器所必需的。
initializecomponent ( )
'在 initializecomponent ( ) 調(diào)用之后添加任何初始化
end sub
'窗體重寫處置以清理組件列表。
protected overloads overrides sub dispose ( byval disposing as boolean )
if disposing then
if not ( components is nothing ) then
components.dispose ( )
end if
end if
mybase.dispose ( disposing )
end sub
'windows 窗體設(shè)計器所必需的
private components as system.componentmodel.icontainer
'注意:以下過程是 windows 窗體設(shè)計器所必需的
'可以使用 windows 窗體設(shè)計器修改此過程。
'不要使用代碼編輯器修改它。
friend withevents notifyicon1 as system.windows.forms.notifyicon
'創(chuàng)建一個notifyicon實例
friend trayicon = new icon ( "tray.ico" )
'創(chuàng)建一個icon實例
<system.diagnostics.debuggerstepthrough ( ) >
private sub initializecomponent ( )
me.components = new system.componentmodel.container ( )
me.notifyicon1 = new system.windows.forms.notifyicon ( me.components )
me.notifyicon1.text = "notifyicon1"
me.notifyicon1.visible = true
'對notifyicon實例的icon屬性賦值,完成簡單托盤程序
me.notifyicon1.icon = trayicon
me.autoscalebasesize = new system.drawing.size ( 6 , 14 )
me.clientsize = new system.drawing.size ( 292 , 273 )
me.name = "form1"
me.text = "form1"
end sub
#end region
end class
'啟動程序
module module1
sub main ( )
application.run ( new form1 ( ) )
end sub
end module



但是這個托盤程序還不是真正意義上的托盤程序,因為它還有很多具體功能沒有實現(xiàn),下面就列出這些功能,并介紹具體的實現(xiàn)方法

(1).托盤程序是隱藏窗口后,程序不應(yīng)該顯示在任務(wù)欄中,并且一般運行后都不顯示窗口:

這是通過設(shè)定窗體的屬性來完成的,具體如下:

'設(shè)定程序不應(yīng)該顯示在任務(wù)欄
me.showintaskbar = false
'設(shè)定程序運行后最小化
me.windowstate = system.windows.forms.formwindowstate.minimized



(2).定義托盤程序中的菜單和相關(guān)事件:

往notifyicon實例中添加菜單,首先要創(chuàng)建contextmenu實例,此實例主要作用是表示快捷菜單,其中的菜單項是通過創(chuàng)建menuitem實例來實現(xiàn),托盤程序中的菜單有幾個菜單項,就創(chuàng)建幾個menuitem實例。然后把這些菜單項加入到contextmenu實例,并把此實例賦值給notifyicon實例的contextmenu屬性,這樣托盤程序右鍵點擊彈出的菜單就完成了。下面是具體代碼:

創(chuàng)建contextmenu實例和menuitem實例:
friend withevents contextmenu1 as system.windows.forms.contextmenu
friend withevents menuitem1 as system.windows.forms.menuitem
friend withevents menuitem2 as system.windows.forms.menuitem
friend withevents menuitem3 as system.windows.forms.menuitem



把這些菜單項加入到contextmenu實例,并把contextmenu實例賦值給notifyicon實例的contextmenu屬性:

me.menuitem1 = new system.windows.forms.menuitem ( )
me.menuitem2 = new system.windows.forms.menuitem ( )
me.menuitem3 = new system.windows.forms.menuitem ( )
me.notifyicon1.contextmenu = me.contextmenu1
me.notifyicon1.text = "vb.net的托盤程序"
me.notifyicon1.visible = true
'設(shè)定托盤程序托盤區(qū)位置顯示圖標
me.notifyicon1.icon = trayicon
'在contextmenu實例中加入菜單項
me.contextmenu1.menuitems.add ( me.menuitem1 )
me.contextmenu1.menuitems.add ( me.menuitem2 )
me.contextmenu1.menuitems.add ( me.menuitem3 )
me.menuitem1.index = 0
me.menuitem1.text = "顯示窗體"
me.menuitem2.index = 1
me.menuitem2.text = "隱藏窗體"
me.menuitem3.index = 2
me.menuitem3.text = "退出"



當把contextmenu實例賦值給notifyicon實例的contextmenu屬性后,托盤程序的缺省狀態(tài)是當鼠標右擊托盤圖標,就會彈出對應(yīng)的菜單。這時就可以對其中的每一個菜單項定義相應(yīng)的事件以及具體的處理方法。一個完整的靜態(tài)托盤程序的編寫過程就完成了。

最后要請讀者注意的是,由于本文中的托盤程序的圖標并不是通過創(chuàng)建資源文件來實現(xiàn)的,而是通過創(chuàng)建icon實例完成的。所以在程序運行的時候,必須在程序的當前目錄存在一個圖標文件,并且此圖標文件的名稱為"tray.ico"。下面是這個靜態(tài)托盤程序的完整的代碼清單
(form2.vb):
public class form1
inherits system.windows.forms.form
#region " windows 窗體設(shè)計器生成的代碼 "
public sub new ( )
mybase.new ( )
'該調(diào)用是 windows 窗體設(shè)計器所必需的。
initializecomponent ( )
'在 initializecomponent ( ) 調(diào)用之后添加任何初始化
end sub
'窗體重寫處置以清理組件列表。
protected overloads overrides sub dispose ( byval disposing as boolean )
if disposing then
if not ( components is nothing ) then
components.dispose ( )
end if
end if
mybase.dispose ( disposing )
end sub
'windows 窗體設(shè)計器所必需的
private components as system.componentmodel.icontainer
'注意:以下過程是 windows 窗體設(shè)計器所必需的
'可以使用 windows 窗體設(shè)計器修改此過程。
'不要使用代碼編輯器修改它。
friend withevents notifyicon1 as system.windows.forms.notifyicon
friend withevents contextmenu1 as system.windows.forms.contextmenu
friend withevents menuitem1 as system.windows.forms.menuitem
friend withevents menuitem2 as system.windows.forms.menuitem
friend withevents menuitem3 as system.windows.forms.menuitem
friend trayicon = new icon ( "tray.ico" )
<system.diagnostics.debuggerstepthrough ( ) >
private sub initializecomponent ( )
me.components = new system.componentmodel.container ( )
me.notifyicon1 = new system.windows.forms.notifyicon ( me.components )
me.contextmenu1 = new system.windows.forms.contextmenu ( )
me.menuitem1 = new system.windows.forms.menuitem ( )
me.menuitem2 = new system.windows.forms.menuitem ( )
me.menuitem3 = new system.windows.forms.menuitem ( )
me.notifyicon1.contextmenu = me.contextmenu1
me.notifyicon1.text = "vb.net的托盤程序"
me.notifyicon1.visible = true
'設(shè)定托盤程序托盤區(qū)位置顯示圖標
me.notifyicon1.icon = trayicon
'在contextmenu實例中加入菜單項
me.contextmenu1.menuitems.add ( me.menuitem1 )
me.contextmenu1.menuitems.add ( me.menuitem2 )
me.contextmenu1.menuitems.add ( me.menuitem3 )
me.menuitem1.index = 0
me.menuitem1.text = "顯示窗體"
me.menuitem2.index = 1
me.menuitem2.text = "隱藏窗體"
me.menuitem3.index = 2
me.menuitem3.text = "退出"
me.autoscalebasesize = new system.drawing.size ( 6 , 14 )
me.clientsize = new system.drawing.size ( 292 , 273 )
me.name = "form1"
'設(shè)定程序不應(yīng)該顯示在任務(wù)欄
me.showintaskbar = false
me.text = "vb.net之winform編程托盤程序篇"
'設(shè)定程序運行后最小化
me.windowstate = system.windows.forms.formwindowstate.minimized
end sub
#end region
'顯示托盤程序窗口
private sub menuitem1_click ( byval sender as system.object ,
byval e as system.eventargs ) handles menuitem1.click
me.windowstate = formwindowstate.normal
me.show ( )
end sub
'隱藏托盤程序窗口
private sub menuitem2_click ( byval sender as object ,
byval e as system.eventargs ) handles menuitem2.click
me.hide ( )
end sub
'推出托盤程序窗口
private sub menuitem3_click ( byval sender as object ,
byval e as system.eventargs ) handles menuitem3.click
notifyicon1.dispose ( )
application.exit ( )
end sub
'雙擊圖標顯示窗體
private sub notifyicon1_doubleclick ( byval sender as object ,
byval e as system.eventargs ) handles notifyicon1.doubleclick
me.windowstate = formwindowstate.normal
me.show ( )
end sub
end class
'啟動程序
module module1
sub main ( )
application.run ( new form1 ( ) )
end sub
end module

form2.vb經(jīng)過了下列命令編譯、連接后:

vbc /r:system.dll /r:system.windows.froms.dll /r:system.drawing.dll form2.vb

就可以得到form2.exe,下圖是from2.exe運行的界面:








圖01:托盤程序運行界面01




動態(tài)托盤程序的編寫過程


動態(tài)托盤程序中的托盤圖標之所以能夠呈現(xiàn)動畫效果,是因為程序中的一個定時器組

件每隔一段時間都不斷切換托盤圖標。本文是通過二個圖標的切換來表現(xiàn)動態(tài)效果的,讀者如果有好的、連續(xù)的圖標,也可以設(shè)定多個圖標的切換,而這只需要修改timer1定時器中的"tick"事件中的代碼就可以了。下面是此動態(tài)托盤程序的具體編制步驟:

要創(chuàng)建程序中的實例和變量:

friend withevents notifyicon1 as system.windows.forms.notifyicon
friend withevents contextmenu1 as system.windows.forms.contextmenu
friend withevents menuitem1 as system.windows.forms.menuitem
friend withevents menuitem2 as system.windows.forms.menuitem
friend withevents menuitem3 as system.windows.forms.menuitem
'創(chuàng)建icon實例,用以切換圖標
friend icon1 = new icon ( "icon1.ico" )
friend icon2 = new icon ( "icon2.ico" )
'為不同圖標的切換提供標識符
dim beginflag as boolean = true
'定時器
friend withevents timer1 as system.windows.forms.timer



初始化實例:

me.components = new system.componentmodel.container ( )
me.notifyicon1 = new system.windows.forms.notifyicon ( me.components )
me.contextmenu1 = new system.windows.forms.contextmenu ( )
me.menuitem1 = new system.windows.forms.menuitem ( )
me.menuitem2 = new system.windows.forms.menuitem ( )
me.menuitem3 = new system.windows.forms.menuitem ( )
me.timer1 = new system.windows.forms.timer ( me.components )
me.notifyicon1.contextmenu = me.contextmenu1
me.notifyicon1.text = "vb.net的托盤程序"
me.notifyicon1.visible = true
'設(shè)定托盤程序托盤區(qū)位置顯示缺省圖標
me.notifyicon1.icon = icon1
'在contextmenu實例中加入菜單項
me.contextmenu1.menuitems.add ( me.menuitem1 )
me.contextmenu1.menuitems.add ( me.menuitem2 )
me.contextmenu1.menuitems.add ( me.menuitem3 )
me.menuitem1.index = 0
me.menuitem1.text = "開始轉(zhuǎn)動"
me.menuitem2.index = 1
me.menuitem2.text = "停止轉(zhuǎn)動"
me.menuitem3.index = 2
me.menuitem3.text = "退出"
me.autoscalebasesize = new system.drawing.size ( 6 , 14 )
me.clientsize = new system.drawing.size ( 292 , 273 )
me.name = "form1"
me.showintaskbar = false
me.text = "vb.net之winform編程動態(tài)托盤程序"
me.windowstate = system.windows.forms.formwindowstate.minimized



定義托盤程序中菜單項對應(yīng)的事件,以及具體的處理方法:

'開始托盤圖標的轉(zhuǎn)動
private sub menuitem1_click ( byval sender as system.object ,
byval e as system.eventargs ) handles menuitem1.click
timer1.enabled = true
end sub
'停止托盤圖標的轉(zhuǎn)動
private sub menuitem2_click ( byval sender as object ,
byval e as system.eventargs ) handles menuitem2.click
timer1.enabled = false
end sub
'關(guān)閉程序,清除托盤資源
private sub menuitem3_click ( byval sender as object ,
byval e as system.eventargs ) handles menuitem3.click
notifyicon1.dispose ( )
application.exit ( )
end sub
'根據(jù)標識符,來確定托盤圖標類型
private sub timer1_tick ( byval sender as object ,
byval e as system.eventargs ) handles timer1.tick
if beginflag = true then
notifyicon1.icon = icon2
beginflag = false
else
notifyicon1.icon = icon1
beginflag = true
end if
end sub



至此編寫動態(tài)托盤程序的主要步驟就介紹完了,和上面的靜態(tài)托盤程序相同,在運行此程序的時候必須保證此程序當前目錄存在二個icon文件,并且名稱為"icon1.ico"和"icon2.ico"。這里并沒有給出動態(tài)托盤程序的完整代碼清單,讀者只需要把上面這些關(guān)鍵步驟的代碼覆蓋到form2.vb中的相應(yīng)位置就可以得到動態(tài)托盤程序的源程序文件form3.vb。這應(yīng)該不算很難,下面是編譯form3.vb的命令:

vbc /r:system.dll /r:system.windows.froms.dll /r:system.drawing.dll form2.vb



成功編譯、連接后就得到form3.exe,下圖是form3.exe的運行界面:








圖02:托盤程序運行界面02




總結(jié)


托盤程序是現(xiàn)在比較流行的一種程序類型。本文中介紹的二個程序,也是托盤程序中比較典型的二個,希望對各位了解并掌握編寫托盤程序有所幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沛县| 鹿泉市| 定远县| 中西区| 石门县| 墨玉县| 晋江市| 怀远县| 巧家县| 廉江市| 梓潼县| 怀来县| 色达县| 永城市| 会宁县| 宣城市| 华蓥市| 安岳县| 游戏| 江门市| 桃江县| 长泰县| 仲巴县| 岳池县| 竹山县| 泰宁县| 清河县| 乌鲁木齐县| 迭部县| 邵东县| 九台市| 板桥市| 淮安市| 千阳县| 黑山县| 威海市| 丰城市| 三原县| 建湖县| 蓬安县| 阳曲县|