
例题5.15利用ImageLis过控件和下coB知控件来制作出工具栏应用程序,实现效果如图5.56 所示。 工儿老Tae1Bar应用 日回☒ 打开保存复制 转于河审 RiekTextBool 图5.56练习工具栏的运行效果参考 要求如下: (1)参考图556制作工具栏. (2)编码实现工具栏上各个按细的功能。 解题步骤: (1)建立一个工程窗体项目,将配套素材文件夹“第5章用图标”中的pmj%,sae.jpg cut jpg、copy jp%paste.jpg。redo jpg和undo jp%文件,拷贝到项目的BN文件夹。 (2)将Imagelis过整件从【工具箱】窗格中加入窗体,设置它的ImageSi四属性为16×16 象素。并设置1ms属性,把7个图标茶加到1mage集合编辑器中,如图5.57所 示:
例题 5.15 利用 ImageList 控件和 ToolBar 控件来制作出工具栏应用程序,实现效果如图 5.56 所示。 图 5.56 练习工具栏的运行效果参考 要求如下: (1) 参考图 5.56 制作工具栏。 (2) 编码实现工具栏上各个按钮的功能。 解题步骤: (1) 建立一个工程窗体项目。将配套素材文件夹“第 5 章用图标”中的 open.jpg、save.jpg、 cut.jpg、copy.jpg、paste.jpg、redo.jpg 和 undo.jpg 文件,拷贝到项目的 BIN 文件夹。 (2) 将 ImageList 控件从【工具箱】窗格中加入窗体,设置它的 ImageSize 属性为 16×16 象素,并设置 Images 属性,把 7 个图标添加到 Image 集合编辑器中,如图 5.57 所 示

1a配集合指辑酒 吹黄图 5ysts.Drwwing 3i tmg胜D 可包新 1nrg时 t幅新g制t时 braicallinonsicn12的,Hi2 3 Syitan.Drwring街时 FixalFormat Pm2T中 4石54桶新g制t明 出m6tnt 5□Synt描Jruring街s球 田31。 运江 D园mt格新ag创ta Verticallezolation6 添加国) 南四 聚滴 帮雨 图5.57把图标添如进去的Im集合编钢器 (3)将TBr控件从【工具箱】窗格中加入窗体,这样为窗体添加了一个工具栏,然后 为官体添知一个Rich TextBoox控件、一个OpenFileDialog控件、一个SaveFileDialog控件, 如图5.58所示 起维项Farl,h[设计]*7em1.b 。Foral ▣X RichText3oor1 IoagListl 国opai1 Dialegl 四swi1li1od 图55移界面添加拉件
图 5.57 把图标添加进去的 Image 集合编辑器 (3)将 ToolBar 控件从【工具箱】窗格中加入窗体,这样为窗体添加了一个工具栏,然后 为窗体添加一个 RichTextBox 控件、一个 OpenFileDialog 控件、一个 SaveFileDialog 控件, 如图 5.58 所示 图 5.58 界面添加控件

(4》右击工具栏,在弹出的快捷菜单中透择【属性】命令,弹出工具栏的【属性】窗格, 如图5.59所示 原相 ToolBar l Syatom.Tindows.Forms.ToolBar 融初回回 A特arance Wermal AutoSie True BerderStyle Hene Buttans Cellectien) 曰ButtenSize 第,3第 CousesYali dation True C6aLtx想eau 无) Cerser Defvilt Di阿r True Dock Tep DrapllownArraws TrB和 Enabled True Foat 宋体,9即t 回InageList IssgeListl 回Lecatien 0.0 Battens 组成t工具栏的ToalBarButtan集台, 日属性0动密助 图5.59工具栏属性窗口 (5)单击【属性】窗格中的1ml属性,设置为刚才的ImageL过1控作,使之与图标 关服。再单击Bue色属性右边的对话框按铝,打开【ToolBarButton集合编辑器】对话医, 如图5.60所示
(4)右击工具栏,在弹出的快捷菜单中选择【属性】命令,弹出工具栏的【属性】窗格, 如图 5.59 所示 图 5.59 工具栏属性窗口 (5)单击【属性】窗格中的 ImageList 属性,设置为刚才的 ImageList1 控件,使之与图标 关联。再单击 Buttons 属性右边的对话框按钮,打开【ToolBarButton 集合编辑器】对话框, 如图 5.60 所示

Tool参arHutto师角合编桥遥 成员围 黑性D 添加因 强) 保家 取清 帮动 图560工具栏按粗编辑器 (6)单击【添加】按钮。在右侧属性列表框内选择Sye属性设置按细风格,用1mclx 属性设置按钮图像,用T属性设定按钮标题(例如“打开),月ToolTipText属性设置提 示文本(即鼠标停面在本工具栏按细上的黄底文字),最后单击【确定】按组,结果如图5.61 和562所示. ToulBarButton焦合编辑冠 成员) ToulBarBet1oal黑性D 目配 国DymuieProperti性 3 Teel形rBettonl 想,在百ra Friand 日题据 Tas 日项 g时ose里ar为 G元) 凸hld True InageInder 司0 PartialPuzh Fulse Puthad Falte Style Puthluttan Tast 打开 Toalfipfant 打开一个文本文件 添加) 标种) 71n。 Trus 佛定 黎消 蒂动
图 5.60 工具栏按钮编辑器 (6)单击【添加】按钮,在右侧属性列表框内选择 Style 属性设置按钮风格,用 ImageIndex 属性设置按钮图像,用 Text 属性设定按钮标题(例如“打开”),用 ToolTipText 属性设置提 示文本(即鼠标停留在本工具栏按钮上的黄底文字),最后单击【确定】按钮,结果如图 5.61 和 5.62 所示

图5.61设置工具栏上的按钮 工具栏IoolBar应用 日▣☒ 打开 打开一个文本文件间 ic小T extBooe1 图562设置好打开按细的工具栏 (7)用同样的步叠添如其能按钮。按钮T属性分别为“保存”、“复制”、“劈切”,“粘贴”、 “撤销”、“重复”。 (8)编写代码实现单击工具栏上各按细图标的功能,代码如图5.63所示。 彩:左腰击工栏上正某一阳的功 Private Seb Toallarl ButtenClick ByVal sender As Syat 根标左耀单透工具栏中任一反用时发 Seleet Case ToolBarl.Futtoas.Indexof (e Button] C8#0 ·物吉的是打开按用 OpenFileDialogl.ShowDialog( Case 1 ·驰击的是保存按用 SwweFilaDialogl.Shewlialog() C52 单击的是按团 B正chTartBaxl.CawO ·垂击的是口切按相 Cu…电的县化板相 RichTertBaxl.Faste O ·静击的是置销按用 BichTextBaxl.Tnde O Case “维击的是重观按田 BichTantBaxl.Bada Ead Seleet Ind Sub 图5.63工具栏上的各按组功使的参考代码截图 (9)【打开】按钮和【保存】按钮的代码略。 例题5,16利用StatusB控件,以编程方式向状态栏StatusBar控件添加面板。运行时参
图 5.61 设置工具栏上的按钮 图 5.62 设置好打开按钮的工具栏 (7)用同样的步骤添加其他按钮。按钮 Text 属性分别为“保存”、“复制”、“剪切”、“粘贴”、 “撤销”、“重复”。 (8)编写代码实现单击工具栏上各按钮图标的功能,代码如图 5.63 所示。 图 5.63 工具栏上的各按钮功能的参考代码截图 (9)【打开】按钮和【保存】按钮的代码略。 例题 5.16 利用 StatusBar 控件,以编程方式向状态栏 StatusBar 控件添加面板。运行时参

考图5.66和5.67所示, 通StatusBar状态老应用 日▣☒ 添知状老老面板 Stau日r1 图5.6的按钮单击前状老栏运行效果参考 。5 tatusBar共姿老应用 口▣☒ 带加状者栏正板 五一 正板二空面板三 图567按钮单击后状态栏运行效果参考 要求如下: (1)设计界面,如图5.6所示 委加状老走面顺 (2)编程实现单 校钥。烈在状药烂添如三个状药栏面板 (3)用鼠标单击某个状态栏面板,则给出如图5.68所示的提示。 ☒ 你单击了板三 定 图5.68单击状态栏而板三的提示 解题步骤: (I)往窗体中添加一个StatusB控件和一个Bt赠按钮。 (2 StatusBar控件内的可编程区域由Status知rPl类的实例组成。添加这些实例的方式 是:在设计时通过StatusBarPand集合编辑器,在运行时通过向StatusBarPanclCollection类 进行添如。因此在Buon按细的Ci止事件中添加如下如图5.69所示代码
考图 5.66 和 5.67 所示。 图 5.66 按钮单击前状态栏运行效果参考 图 5.67 按钮单击后状态栏运行效果参考 要求如下: (1)设计界面,如图 5.66 所示。 (2)编程实现单击 按钮,则在状态栏添加三个状态栏面板。 (3)用鼠标单击某个状态栏面板,则给出如图 5.68 所示的提示。 图 5.68 单击状态栏面板三的提示 解题步骤: (1) 往窗体中添加一个 StatusBar 控件和 一个 Button 按钮。 (2) StatusBar 控件内的可编程区域由 StatusBarPanel 类的实例组成。添加这些实例的方式 是:在设计时通过 StatusBarPanel 集合编辑器,在运行时通过向 StatusBarPanelCollection 类 进行添加。因此在 Button 按钮的 Click 事件中添加如下如图 5.69 所示代码

功铭:击细币加花而板 rivate3 Battanl白ick0 al tender As3y5t辅,0的jet,B书l。As Systen 2v4at短ts)Handler Sut '漆加达老担面板按团单由触发 StuturBar1.Purelt Add正款一") 5ttwl.Fu+1sAMC立2二 5ttBL.Fu11AaHC家蔽E) 三不的尺寸 Status3ar1.Panels (0).AuteSize StatuslarPonelhoteSize Spring StattaBur 1.Panels(1).AuteSite StatuslarPaneluteSite.Coatents StatuzBar1.Furelr2).AutaSire StaturFarPanelAnteSire.Coatants 置西的式 StutesBur1.Puels00).Jor derStyle StatuslPellordrStyle.Baised StatuaBur1.Pural:(1).Bor derstyle StatusEarPanellor drstyla.Srkun StatusSar1 Panels2)Jorderstyle StaturlarPanelforderstyle.Kaised 为面三添加图夏下面代为一个语句分两行写 StatusBur1.Parels(2).Icon Hew System.Dr wring.Icen Systen Envirerment.GetFelder?ath Systen Enviranment.SpecialFolder.Persanal)a "VOpen ics) 让状态栏是示值板 StwtuaBur1.Sher?unels True End Sab 图56码添如加状态栏面板的参考代玛截图 (3)若要通过对S1usB控件进行编程米响应用户的单击操作,我们可以使用 PanelClick事件中的Select Case语句。该事件包含一个参数(面板参数),该参数包含对单 击的StatusBarP对象的引用。使用该引用可以确定单击的面板的索引,从而可以相应 地进行编程,StatusBar1控件的PneC1i这事件中添加如图5.D所示的代码. ”功能:单击状方栏上便板时发 Private Sub StatusJar1_PomelclickOyfal sender As Systes.Obj '据紫来确定单击了个面版 Salact Case StaturBurl.Parals.Inderof(e.StatusBarPanel) Cuse 0 5 sageDex.5hm你单击了重妆一) C4B#1 stageBex.m〔你单击了面板二) Cau。2 sseb线.r(你单击了面板三") End Seleet End Sub 图5和单击状布栏上的面版的参考代码截图 例题5.I7 VBNET中的状态注StatusBar控件没有VB6中状态栏的功能,能让某个而板 显示键盘上的CAPS LOCK、NUM LOCK或SCROLL LOCK之类的键是否按下了?创建 一个像VB6的状态栏控件的StatusB控件效果的状态栏, 要求如下: (1》让状态栏某个面板是示健盘上的CAPS LOCK,NUM LOCK成SCROLL LOCK之 类的健是否按下了? (2》 让状态栏的某个面板显示时间。 (3) 运行效果如图571所示 通显Caps Lock/us Lock/Scrol1Loct等 日▣☒ CAFS 是 实山 2008-6-%18:3422 图5.71 状态栏运行效果 解思步果:
图 5.69 添加状态栏面板的参考代码截图 (3) 若要通过对 StatusBar 控件进行编程来响应用户的单击操作,我们可以使用 PanelClick 事件中的 Select Case 语句。该事件包含一个参数(面板参数),该参数包含对单 击的 StatusBarPanel 对象的引用。使用该引用可以确定单击的面板的索引,从而可以相应 地进行编程。StatusBar1 控件的 PanelClick 事件中添加如图 5.70 所示的代码。 图 5.70 单击状态栏上的面板的参考代码截图 例题 5.17 VB.NET 中的状态栏 StatusBar 控件没有 VB6 中状态栏的功能,能让某个面板 显示键盘上的 CAPS LOCK、NUM LOCK 或 SCROLL LOCK 之类的键是否按下了?创建 一个像 VB6 的状态栏控件的 StatusBar 控件效果的状态栏。 要求如下: (1) 让状态栏某个面板显示键盘上的 CAPS LOCK、NUM LOCK 或 SCROLL LOCK 之 类的键是否按下了? (2) 让状态栏的某个面板显示时间。 (3) 运行效果如图 5.71 所示 图 5.71 状态栏运行效果 解题步骤:

(1) 设计界面,往窗体中添加一个StatusBar控件,一个Tia控件,因为对于在S减usBa 控件中显示时间的问题,我们可以通过一个Tm世1控件来毫成。 (2) 对于指示CAPS LOCK、NUM LOCK或SCROLL LOCK按键状态,我们可以通过 向窗体添加消息第选器米实现。因此先声明实现IMsf接口,并定义 indows消息中键盘按键弹起常量,声明要博用indows API函数GetKeyStae来 得到按键状态,程序参考如图5卫所示。 山e可as Po Tnbeteits Srstem Tiadees.Forns.Turm 】大n1t”自第选器接口 型 职“ Poblic Deelao+ectin4ta6tate山b“s这LinG4 Cagtate"(Eyfal的rhs1t4r)e1t4 团5.2参考程序截图 (3》 窗口初始化时,生成四个状态栏面板并显示CapsLock,Numl0e、ScrollLock按键状 药和系统时间,参考代马如图5.73所示。 功花:密得依人可包健个正我开时圈】 Private Suh Forn2 Lead (ByVal seader Ax Systen.Objeet 标plication A通iiFi1tr0) 本加4个1 e.StatusBer1.Panels.Cleer O s.3 tatusBar1 Panels.Add℃P State") 想a.StatusB世1.Fn1s.A2以s”) Ma.StatusBar】.Fnl.AMd("Sers1山) He.Statusbarl.Fanels.Add(Now) He StaturBar1.ShowPanels Tree ·设置计讨器星性 Tiserl.Intervul 500 Tiserl.Iasbled True '事各个按理状容并星示 TegclevirtuulKeystae 0 End Stb 图5.73创建四个状态栏面板并显示的参考代码截图 (4) 判断Capslock、NumLoc、Scrolllock按健是否按下并显示在状态栏面板上的实现. 参考代到如图5.74所示. 功彩:所名个称保是活孩价下并示在状衣定面顾中 C好sLok按键是舌按下 If GetEeyState (Keys CapsLock)Then 已经下 Me.Statusbarl.Panels D).Tert "CArS" 口4 Me.StstusBurl.Punel:(0).Tart Ind If “斯eLad板键是否按下 If Getkeystate (Keyt HonLock)1 Then Me.StatusBurl.Punels 0).Tert "W" 口 国StatusBarl.Panel:0),Tts” End If ·断3er11L。e径理是活痘下 If Getkeystate (Keys.Screll)I Them 已是防下 Be.StstuBurl.Punels (2).Tert ="SCBOLL" 且 Be.StatusBarl.PanelrQ).Tert" End If Ind Sub
(1) 设计界面,往窗体中添加一个 StatusBar 控件、一个 Timer 控件。因为对于在 StatusBar 控件中显示时间的问题,我们可以通过一个 Timer1 控件来完成。 (2) 对于指示 CAPS LOCK、NUM LOCK 或 SCROLL LOCK 按键状态,我们可以通过 向窗体添加消息筛选器来实现,因此先声明实现 IMessageFilter 接口,并定义 Windows 消息中键盘按键弹起常量,声明要调用 Windows API 函数 GetKeyState 来 得到按键状态,程序参考如图 5.72 所示。 图 5.72 参考程序截图 (3) 窗口初始化时,生成四个状态栏面板并显示 CapsLock、NumLoc、ScrollLock 按键状 态和系统时间,参考代码如图 5.73 所示。 图 5.73 创建四个状态栏面板并显示的参考代码截图 (4) 判断 CapsLock、NumLoc、ScrollLock 按键是否按下并显示在状态栏面板上的实现, 参考代码如图 5.74 所示

图5.74判斯按键是否按下并显示的参考代码截图 (5) 第四个面板最示系统当前时间,实现参考代码如图5乃所示, ·功能:第四个面板里示聚时间 Private Sub Tiserl_Tick(yVal sender As Syaton 0hje He Status3ar1.Faels 3).Tidth 300 银e5 tatus边1.rals月).Tet=Me.TcSu1g End Sob 图5?5显示系统当前时间的参考代码截图 (6) 实现清息席选器的参考代码如图5.76所示。 功能:买现清息选愿 Fenetian PraFilter相sauge yRef n As想 Seleet Case。."sg Caw■江YF gcleVirtsulKeyStae0 End Selact Beturn False Ead Fuction 图5.76实现消息筛法图的参考代码截图 (7) 窗体处于活动状态时触发事件的参考代码如下图5?7所示 功能:留体活动触发 Private Sub Farm2_Activated (ByVal sender As “新备个拉的秋移并温示在状带栏中 TogelevirtualKeystetO Ead Suh 图577窗体活动状态的参考代阴截图 例题5.19利用鼠标事件编写一个简单的鼠标检测程序,检测鼠标是否拥有所有最新的按 细?并利用鼠标事件米检测是鼠标技按下还是滚轮滚动?运行参考界面如图582所示, 进显标拔惯检洞 ▣☒ 潭轮 银 保材中键 捷A 健B 巴经按下了所有谜 图5.8粒2鼠标按键检测运行参考界面 要求如下: (1)参照如图5.98所示设计界面. (2) 检测出是否有鼠标左键、右键、中键、滚轮、X键A,X键日的最新鼠标, (3) 测试是候标健按下还是滚轮滚动? (4) 适当改变按钮的颜色和文字
图 5.74 判断按键是否按下并显示的参考代码截图 (5) 第四个面板显示系统当前时间,实现参考代码如图 5.75 所示。 图 5.75 显示系统当前时间的参考代码截图 (6) 实现消息筛选器的参考代码如图 5.76 所示。 图 5.76 实现消息筛选器的参考代码截图 (7) 窗体处于活动状态时触发事件的参考代码如下图 5.77 所示 图 5.77 窗体活动状态的参考代码截图 例题 5.19 利用鼠标事件编写一个简单的鼠标检测程序,检测鼠标是否拥有所有最新的按 钮?并利用鼠标事件来检测是鼠标被按下还是滚轮滚动?运行参考界面如图 5.82 所示。 图 5.82 鼠标按键检测运行参考界面 要求如下: (1) 参照如图 5.98 所示设计界面。 (2) 检测出是否有鼠标左键、右键、中键、滚轮、X 键 A、X 键 B 的最新鼠标。 (3) 测试是鼠标键按下还是滚轮滚动? (4) 适当改变按钮的颜色和文字

解题步耀: (1)设计界面。添加7个Bam控件,并设置各个校银的Tad属性分别为:左键、右键。 中键、滚轮、X键A,X键B、已按下所有健, (2) 编写窗体上鼠标按下MoD0mn事件程序来判断是螺个鼠标键按下,并改变对于 B0m的须色,参考代码如图5.83所示, 「功能:留体上有队标健按下时触发 Private Sub Ferml_Mouseown (Byal sander As Object,ByVal As If a.Jutton Houselutteas.Left Thes 按下的是左程 Battonl.Backcalar Color.Aquanurine D:ttonl.T红t=“左健亮或” 口eIf e Dutton三围useluttons.慧idle Then 按下的是中隆 Buttond.Backaler=Color.Aqunarine Dttd.T红t三“中深完成户 IlseIf e Dutton Bouseluttons.Bight Thea 反下的是石壁 Buttor2.Backcalar Color.Nguanarine tt2.Tat三“右课完成” 且seTE e.向tton Meuseluttons.ZDattonl Then ‘按下的是捷A Button5.Bacldalar Color.Aqusmarine Dtta5.Tut=“绿元成” Elself e.Batton BousePuttons.KDatton2 Then ”按下的是建B Batton6.Backcalar Color.Aquanarine btto6.Tut=“1建1完说” Ind It End Sub 图5.83判断爆个鼠标键按下的参考代码截图 (3) 编写窗体上鼠标流轮MeWh©事件判断是香有滚轮浪动,参考代码如图5.84所 "功能:服行亲轮来动时慎性发 Private Sub Farm1 Heurerheel ByVal sender Batten3.Tt三“津轮壳成 a制5h 图5.84鼠标滚轮事件的参考代码藏图 (4)为防止用户用鼠标乱按Button按钮,使用Hnds共享事件避免用户按下界面上的 按组。参考代码如图585所示。 对:单击预阳时出话我泉 Private Sub Buttonl_Click (ByVal sender As System.Object,Byal e As System.EventArgs) Eandle:Buttonl.Click,Btton2.Clic,Buttom.Click,Buttor5.Click,Brttor6.Click @x按你泽上的标!不是按这里) End Sub 图5.85防止用户乱按界面上按钮的参考代码极图 (5) 判断是否是最新款鼠标的参考代码如图5.85所示
解题步骤: (1) 设计界面。添加 7 个 Button 控件,并设置各个按钮的 Text 属性分别为:左键、右键、 中键、滚轮、X 键 A、X 键 B、已按下所有键。 (2) 编写窗体上鼠标按下 MouseDown 事件程序来判断是哪个鼠标键按下,并改变对于 Button 的颜色,参考代码如图 5.83 所示。 图 5.83 判断哪个鼠标键按下的参考代码截图 (3) 编写窗体上鼠标滚轮 MouseWheel 事件判断是否有滚轮滚动,参考代码如图 5.84 所 示。 图 5.84 鼠标滚轮事件的参考代码截图 (4) 为防止用户用鼠标乱按 Button 按钮,使用 Handles 共享事件避免用户按下界面上的 按钮,参考代码如图 5.85 所示。 图 5.85 防止用户乱按界面上按钮的参考代码截图 (5) 判断是否是最新款鼠标的参考代码如图 5.86 所示