VBNET程序设计实用教程7

上传人:枫** 文档编号:592551584 上传时间:2024-09-21 格式:PPT 页数:82 大小:2.62MB
返回 下载 相关 举报
VBNET程序设计实用教程7_第1页
第1页 / 共82页
VBNET程序设计实用教程7_第2页
第2页 / 共82页
VBNET程序设计实用教程7_第3页
第3页 / 共82页
VBNET程序设计实用教程7_第4页
第4页 / 共82页
VBNET程序设计实用教程7_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《VBNET程序设计实用教程7》由会员分享,可在线阅读,更多相关《VBNET程序设计实用教程7(82页珍藏版)》请在金锄头文库上搜索。

1、VB.NETVB.NET清华大学出版社清华大学出版社VB.NET程序设计实用教程程序设计实用教程第第7 7章章 WindowsWindows高级界面设计高级界面设计本章任务:体 育 彩 票 摇 奖 程 序简 易 文 本 编 辑 器 程 序 图 文 浏 览 器 程 序计算机算机应用用教研教研室室操作系操作系统本章要点本章要点菜单的制作方法标准对话框的使用工具栏的制作方法多窗体应用程序设计状态栏的制作方法要要点点MDI应用程序设计7.1 7.1 任务任务7-17-1:体育彩票摇奖程序:体育彩票摇奖程序多窗体程序设计多窗体程序设计任务7-1描述:编写一个七位号码体彩摇奖程序,程序中有三个窗体,分别如

2、图7-1、图7-2和图7-3所示。程序运行时首先出现摇奖窗体,在该窗体上单击“摇奖”按钮,将不停地产生随机数并填充在七个文本框中,如图7-4所示。单击“停止”按钮将停止摇奖,此时在文本框中显示的数就是获奖号码。单击“公布”按钮将公布获奖号码,如图7-5所示。在该窗体上单击“返回”按钮将返回到摇奖窗体。单击“退出”按钮将出现如图7-6所示的“退出提示框”,单击“确定”按钮将退出应用程序。注意:在图7-1所示的窗体中还有一个定时器控件。计算机算机应用用教研教研室室操作系操作系统 图7-1 摇奖窗体设计界面 图7-2 公布中奖号码窗体设计界面图7-3 “退出提示框”窗体设计界面 图7-4 摇奖窗体运

3、行界面图7-5 公布中奖号码窗体运行界面 图7-6 “退出提示框”窗体运行界面1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH07”,项目名为“Task7_1”。2把Form1窗体的Text属性值设置为“体育彩票摇奖程序”,把它的Name属性值设置为“frmTicketReward”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmTicketReward.vb”。然后执行【项目】【Task7_1属性】命令,在出现的“Task7_1属性页”对话框中把“启动对象”设置为frmTick

4、etReward”。注意:在多窗体程序设计中,如果要改变启动窗体,方法也是执行【项目】【*属性】命令,在出现的“*属性页”对话框中把“启动对象”设置为相应窗体即可。 任务实现:控件名属性名属性值作用Label1Caption号码提示TextBox1TextBox7Text显示摇奖号码Button1Caption摇奖单击它开始摇奖Button2Caption停止单击它停止摇奖Button3Caption公布单击它弹出公布获奖号码窗体,公布中奖号码Button4Caption退出单击它弹出“退出提示框”提示是否退出程序Timer1EnabledIntervalFalse200每隔150毫秒产生一组

5、号码3对照图7-1摇奖窗体设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表7-1所示。表7-1 任务7-1中的frmTicketReward窗体中的控件属性设置及其功能计算机算机应用用教研教研室室操作系操作系统4单击工具栏上的“”按钮或执行【项目】【添加Windows窗体】命令,将会出现如图7-7所示的【添加新项】对话框。5在该对话框的“模板”下面的列表框中选中【Windows窗体】图标,在名称后面的文本框中输入窗体名“frmTicketPublish”,然后单击“打开”按钮,即为应用程序添加了一个名为“frmTicketPublish”窗体。把该窗体的Text属性值设置为“中奖号

6、码公布”。注意:也可以选添加窗体,然后再修改其Name属性值。图7-7 “添加新项”对话框控件名属性名属性值作用Label1Caption本期获奖号码如下:提示TextBox1TextBox7Text显示中奖号码Button1Caption返回返回到摇奖窗体6对照图7-2公布获奖号码窗体设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表7-2所示。7采用与步骤4和步骤5同样的方法为项目再添加一个名为“frmExit”的窗体,并把它的Text属性值设置为“退出提示框”。表7-2 任务7-1中的frmTicketPublish窗体中的控件属性设置及其功能对象名属性名属性值说明Label1

7、Text真的要退出应用程序吗?提示信息Button1TextDialogResult确定OK单击它将退出应用程序Button2TextDialogResult取消Cancel单击它将不退出应用程序8对照图7-3退出提示框窗体设计界面,为窗体添加控件并设置控件的属性。控件的属性设置如表7-3所示。然后再把该窗体的FormBorderStyle属性值设置为“FixedSingle”,把AcceptButton属性值设置为“Button1”把CancelButton属性值设置为“Button2”。至此界面设计基本完成。表7-3 任务7-1中的frmExit窗体中的控件属性设置及其功能9在“解决方案资

8、源管理器”中双击“frmTicketReward”窗体,并切换到“frmTicketReward”窗体的代码窗口,在代码窗口的最顶部加上如下程序代码。ImportsTask7_1.frmTicketPublishImportsTask7_1.frmExit注意:在多窗体程序设计中,每个窗体相当于一个类,在一个窗体中要调用其它窗体,必须通过Imports语句把该窗体作为命名空间引入进来。10在“”下面编写如下程序代码,定义7个全局公享的整型变量,用来存放中奖号码。PublicShareda1,a2,a3,a4,a5,a6,a7AsInteger存放摇出来的中奖号码注意:必须是在窗体的“Decla

9、ration”部分用“PublicShared”定义的变量才能被其它窗体使用。11编写本窗体的Load事件过程代码,如下。 Private Sub frmTicketReward_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() 随机数初始化 End Sub12编写Button1按钮的Click事件过程代码,如下。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As S

10、ystem.EventArgs) Handles Button1.Click Timer1.Enabled = True 启动定时器,开始摇号 Button2.Enabled = True 停止按钮可用 Button1.Enabled = False 摇奖按钮不可用 End Sub13编写Timer1控件的Tick事件过程代码,如下。 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 产生七位随机数作为中奖号码 a1 = Int(Rnd(

11、) * 10) : a2 = Int(Rnd() * 10) a3 = Int(Rnd() * 10) : a4 = Int(Rnd() * 10) a5 = Int(Rnd() * 10) : a6 = Int(Rnd() * 10) a7 = Int(Rnd() * 5) + 1 最后一位是特别号,只能在15之间 显示随机产生的七位号码 TextBox1.Text = CStr(a1) : TextBox2.Text = CStr(a2) TextBox3.Text = CStr(a3) : TextBox4.Text = CStr(a4) TextBox5.Text = CStr(a5)

12、 : TextBox6.Text = CStr(a6) TextBox7.Text = CStr(a7) End Sub说明:该过程每隔200毫秒执行一个,产生7个随机数并显示在文本框中,产生摇奖的效果。14运行程序,单击“摇奖”按钮,会发现各个文本框中不停地出现随机数。15编写Button2按钮的Click事件过程代码,如下。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Timer1.Enabled = False 关闭定

13、时器,结束摇号 Button3.Enabled = True 公布按钮可用 Button2.Enabled = False 停止按钮不可用 End Sub16运行程序,单击“摇奖”按钮摇奖后,单击“停止”按钮,会发现文本框中的数固定了下来,此时的值就可以认为是中奖号码。17编写Button3按钮的Click事件过程代码,如下。 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim Frm As New frmTicketPub

14、lish 定义一个frmTicketPublish类的对象 Frm.Show() 显示该对象,窗体将显示出来 End Sub18编写Button4按钮的Click事件过程代码,如下。 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim frmExitDialog As New frmExit 根据退出窗体生成对象 If frmExitDialog.ShowDialog() = DialogResult.OK Then 如果单

15、击了“确定”按钮,则退出 Me.Close() 关闭本窗体 Application.Exit() 退出应用程序 End If End Sub说明:(1)上述代码首先产生一个frmExit窗体的实例,然后调用该窗体实例的ShowDialog方法把该窗体实例以对话框的形式显示出来,如果用户在对话框中单击了“是”按钮,则退出应用程序。(2)在VB.NET中,除了可以使用Windows自带的标准对话框外,如MsgBox、InputBox等,用户还可以把自己设计的窗体定义成对话框。使用自定义对话框有以下几个要点。将窗体的FormBorderStyle属性值设置为FixedDialog;根据需要向窗体上添

16、加控件;使用窗体的ShowDialog方法显示窗体,即显示出对话框。19运行程序,单击“退出”按钮,将会出现如图7-6所示的对话框,单击“是”按钮退出应用程序。20在“解决方案资源管理器”中双击“frmTicketPublish”窗体并切换到该窗体,在所有代码之前,加上如下代码。Imports Task7_1.frmTicketReward21编写“frmTicketPublish”窗体的Load事件过程代码,如下。 Private Sub frmTicketPublish_Load(ByVal sender As System.Object, ByVal e As System.EventA

17、rgs) Handles MyBase.Load 把中奖号码显示在各文本框中 TextBox1.Text = CStr(a1) : TextBox2.Text = CStr(a2) TextBox3.Text = CStr(a3) : TextBox4.Text = CStr(a4) TextBox5.Text = CStr(a5) : TextBox6.Text = CStr(a6) TextBox7.Text = CStr(a7) End Sub说明:在窗体中可以访问被引入的其他窗体中定义的全局共享变量。22为该窗体的“关闭”按钮编写Click事件过程代码,如下。 Private Sub

18、Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() 关闭本窗体 End Sub23运行程序,单击“摇奖”按钮进行摇奖,单击“停止”按钮产生中奖号码,单击“公布”按钮将会出现如图7-5所示的“中奖号码公布”窗口,单击“关闭”按钮将加到“摇奖”窗口。24保存项目,至此本任务全部完成。归纳说明:Windows应用程序很少只由一个窗体组成,一般情况下一个应用程序均拥有很多个窗体。VB.NET项目刚建立时只有一个名为Form1的窗体,要建立多窗

19、体应用程序应首先为项目添加窗体。在VB.NET中还可以任意指定其他窗体为启动窗体。本任务通过体育彩票摇奖程序的实现过程,讲解了多窗体程序设计的方法与注意事项。7.2 7.2 任务任务7-27-2:简易文本编辑器程序:简易文本编辑器程序丰富格式丰富格式文本框、菜单、对话框、工具栏、状态栏等的应用文本框、菜单、对话框、工具栏、状态栏等的应用 任务7-2描述:编写一个简易文本编辑器程序,要求通过菜单能够实现文件的新建、打开、保存、另存为、退出等文件或应用程序操作功能,能够实现撤消、重做、剪切、复制、粘贴、删除、全选等编辑操作功能,能够实现设置文本的字体、颜色、背景色等格式操作功能。对于常用的功能还要

20、通过工具栏实现,还应具有状态栏对当前的状态进行提示。程序的设计界面如图7-10所示,程序的运行界面如图7-11所示。 图7-10 程序设计界面 图7-11 程序运行界面任务分析:本 任 务 涉 及 到 菜 单 、 工 具 栏 、 状 态 栏 等 多 种 控 件 ,中 间 涉 及 到 多 种 编 程 技 巧 , 分 析 起 来 较 困 难 , 将 在讲 解 的 过 程 中 一 步 一 步 地 加 上 详 细 分 析 。任务实现:1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH07”,项目名为“Task7_2”。2把Form1窗体的Te

21、xt属性值设置为“简易文本编辑器”,把它的Name属性值设置为“frmTextEditor”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmTextEditor.vb”。然后执行【项目】【Task7_2属性】命令,在出现的“Task7_2属性页”对话框中把“启动对象”设置为“frmTextEditor”。3在工具箱上找到MainMenu(主菜单)控件图标“”,并把该控件添加到窗体上,标题栏下将出现菜单栏,如图7-12所示。 图7-12 添加了MainMenu控件后出现的菜单栏 图7-13 在菜单栏中输入了“文件&F”菜单项4在“请在此处输入

22、”文字上单击,然后输入文字“文件&F”,如图7-13所示。然后在属性窗体中把该菜单项的名称设置为“MenuItem1”。5在“文件F”下面的“请在此处输入”文字上单击,输入文字“新建&N”,然后在属性窗口中把Name属性值设置为MenuItem1_1,在属性窗口中选中Shortcut属性,单击其后的向下箭头按钮,在出现的列表中选择快捷键“CtrlN”,如图7-14所示。 图7-14 为“文件&F”菜单输入了“新建&N”菜单项 图 7-15 设计好的“文件”菜单6使用同样的方法,为“文件F”菜单再添加5个菜单项,菜单项的标题文字、名称、快捷键如表7-4所示。设置好的文件菜单如图7-15所示。表7

23、-4 “文件”菜单中的其它菜单项及其属性设置菜单标题文字(Text属性值)菜单项名(Name属性值)快捷键(ShortCut属性值)打开&O.MenuItem1_2CtrlO保存SMenuItem1_3CtrlS另存为A.MenuItem1_4None-MenuItem1_5None退出&XMenuItem1_6CtrlX说明:菜单项的常用属性如下:(1)Text属性:该属性用来获取或设置一个值,通过该值显示菜单项标题。当使用Text属性为菜单项指定标题时,还可以在字符前加一个“&”号来指定热键(访问键,即加下划线的字母)。例如,若要将“File”中的“F”指定为访问键,应将菜单项的标题指定为

24、“&File”。(2)Checked属性:该属性用来获取或设置一个值,通过该值指示选中标记是否出现在菜单项文本的旁边。如果要放置选中标记在菜单项文本的旁边,属性值为True,否则属性值为False。默认值为False。(3)DefaultItem属性:该属性用来获取或设置一个值,通过该值指示菜单项是否为默认菜单项。值为True时,是默认菜单项,值为False时,不是默认菜单项。菜单的默认菜单项以粗体的形式显示。当用户双击包含默认项的子菜单后,默认项被选定,然后子菜单关闭。(4)Enabled属性:该属性用来获取或设置一个值,通过该值指示菜单项是否可用。值为True时表示可用,值为False时表

25、示当前禁止使用。(5)RadioCheck属性:该属性用来获取或设置一个值,通过该值指示选中的菜单项的左边是显示单选按钮还是选中标记。值为True时将显示单选按钮标记,值为False时显示选中标记。(6)Shortcut属性:该属性用来获取或设置一个值,该值指示与菜单项相关联的快捷键。(7)ShowShortcut属性:获取或设置一个值,该值指示与菜单项关联的快捷键是否在菜单项标题的旁边显示。如果快捷组合键在菜单项标题的旁边显示,该属性值True,如果不显示快捷键,该属性值为False。默认值为True。(8)MdiList属性:该属性用来获取或设置一个值,通过该值指示是否用在关联窗体内显示的

26、多文档界面(MDI)子窗口列表来填充菜单项。若要在该菜单项中显示MDI子窗口列表,则设置该属性值为True,否则设置该属性的值为 False。默认值False。7单击“文件F”右边的“请在此处输入”,输入“编辑&E”形成编辑菜单,在属性窗口设置“编辑”菜单的名称为“MenuItem2”。再为“编辑”菜单输入7个菜单项,菜单项的标题文字、名称、快捷键如表7-5所示。设置好的文件菜单如图7-16所示。表7-5 “编辑”菜单中的菜单项及其属性设置菜单标题文字(Text属性值)菜单项名(Name属性值)快捷键(ShortCut属性值)撤消UMenuItem2_1CtrlZ重做RMenuItem2_2C

27、trlY剪切TMenuItem2_3CtrlX复制CMenuItem2_4CtrlC粘贴PMenuItem2_5CtrlP删除DMenuItem2_6全选AMenuItem2_7CtrlA图7-16 设计好的“编辑”菜单 图7-17 设计好了的“格式”菜单8采用类似的方法设计格式菜单,设计好的格式菜单如图7-17所示,各菜单项及其属性设置如表7-6所示。表7-6 “格式”菜单中的菜单项及其属性设置菜单标题文字(Text属性值)菜单项名(Name属性值)快捷键(ShortCut属性值)格式&OMenuItem3None字体&F.MenuItem3_1None颜色C.MenuItem3_2None

28、-MenuItem3_3None背景MenuItem3_4None白色背景MenuItem3_4_1None灰色背景MenuItem3_4_2None注意:还需把“MenuItem3_4_1”菜单项的RadioCheck属性值设置为True,把它的Checked属性值设置为True。把“MenuItem3_4_2”菜单项的RadioCheck属性值设置为False。9在工具箱中找到工具栏图标“”,并为窗体添加一个ToolBar控件(工具栏控件),控件名称为ToolBar1,如图7-18所示。图7-18 添加的工具栏控件说明:对读者来说,工具栏并不陌生,如Word中的常用工具栏、格式工具栏等。工

29、具栏是由一系列的图标按钮组成,形象化的图标与功能的对应,使应用程序界面具有更好的交互性。在VB .NET中,要实现工具栏,需要使用两个控件:ImageList控件和ToolBar控件。10在工具箱中找到图像列表控件图标“”,并向窗体上添加一个ImageList控件(图像列表控件),控件名为ImageList1。11用鼠标单击ImageList1控件,然后在“属性”窗口中选中“Images”属性,单击其后的“”按钮,将会出现如图7-19所示的“Image集合编辑器”对话框。12单击“添加”按钮,将会出现“打开”文件对话框,在该对话框中定义要添加到工具栏上的按钮图片文件,然后按“打开”按钮,反复操

30、作直到需要的图形文件全部添加到“Image集合编辑器”的成员列表中,如图7-20所示(添加了“新建”、“打开”、“保存”三个操作的按钮图片)。然后按“确定”按钮关闭“Image集合编辑器”对话框。图7-19 “Image集合编辑器”对话框图7-20 添加了图片文件后的“Image集合编辑器”对话框13单击ToolBar1工具栏控件,设置它的ImageList属性值为“ImageList1”。然后再在“属性”窗口中单击“Buttons”属性后面的“”按钮,将会出现“ToolBarButton集合编辑器”对话框。14在该窗口中单击“添加”按钮,将会出现第一个按钮,并且在窗口的右边将出现该按钮的属性

31、设置窗口,通过设置ImageIndex属性可以指定在按钮上显示的图片文件。图7-21是添加了三个按钮后的“ToolBarButton集合编辑器”对话框。图7-21 添加了三个工具栏按钮后的“ToolBarButton集合编辑器”对话框15单击“确定”按钮,关闭“ToolBarButton集合编辑器”对话框。设计好的工具栏如图7-22所示。图7-22 设计好了的工具栏16在工具箱中找到状态栏图标“”,并为窗体添加一个StatusBar控件(状态栏控件),控件名称为StatusBar1。说明:状态栏一般位于应用程序窗口的下面,用来显示程序的状态。17选中StatusBar1控件,在“属性”窗口中选

32、中Panel属性,单击其后的“”按钮,打开“StatusBarPanel集合编辑器”对话框,在该编辑器中通过单击“添加”按钮为StatusBar添加三个面板,如图7-23所示。注意可以在该窗口的右边设置每个面板的属性,如Name等。图7-23 添加了三个Panel面板的“StatusBarPanel集合编辑器”对话框18单击“确定”按钮返回程序设计界面,选中StatusBar控件,把它的ShowPanels属性值设置为True。设计好的状态栏如图7-24所示。图7-24 设计好的状态栏19由于要在状态栏的某一Panel中显示当前时间,为实现该功能可添加一个Timer控件,设置该控件的Inter

33、val属性值为500,Enabled属性值为True。20在工具箱中找到丰富格式文本框图标“”,并为窗体添加一个RichTextBox控件(丰富格式文本框控件),控件名称为RichTextBox1,控件位置任意,在运行时由程序自动设置成充满除工具栏和状态栏外的所有窗体部分。至此界面设计基本完成,设计好的界面如图7-10所示(没有对话框控件)。21为窗体添加两个模块级变量,代码如下。 Dim Fname As String 存放正在编辑的文件名,如果新建的文件尚末保存,则值为空串 Dim FExtName As String 扩展名 22编写一个名为“RichTextBoxResize”的通用过

34、程,其作用是使丰富格式文本框充满除工具栏和状态栏外的所有空间。该过程在窗体加载时和改变大小时被调用。 该过程使丰富格式文本框充满除工具栏和状态栏外的所有空间 Private Sub RichTextBoxResize() 设置丰富格式文本框的起始位置为工具栏下面的最左上角 RichTextBox1.Top = ToolBar1.Height RichTextBox1.Left = 0 设置丰富格式文本框的宽度与窗体的用户区宽度一样 RichTextBox1.Width = Me.ClientSize.Width 设置丰富格式文本框的高度为窗体用户区高度减去工具栏的高及状态栏的高度 RichTe

35、xtBox1.Height = Me.ClientSize.Height - ToolBar1.Height StatusBar1.Height End Sub23在工具箱中找到“保存文件”对话框控件的图标“”,为窗体添加一个SaveFileDialog控件,该控件主要用来弹出Windows中标准的“保存文件”对话框。24编写一个名为“SaveAs”的通用过程,代码如下。 该过程弹出“另存为”对话框,供用户选择或输入要保存的文件名,并把RichTextBox1中的文本保存到该文件中去 Private Sub SaveAs() SaveFileDialog1.Filter = 文本文件(*.tx

36、t)|*.txt|RTF格式文件(*.RTF)|*.RTF SaveFileDialog1.FilterIndex = 1 设置当前文件过程器 SaveFileDialog1.Title = 保存文件 设置对话框的标题 SaveFileDialog1.InitialDirectory = Application.StartupPath 初始目录设为启动路径 SaveFileDialog1.RestoreDirectory = True 自动恢复初始目录 SaveFileDialog1.ShowDialog() 弹出另存为对话框 Fname = SaveFileDialog1.FileName

37、获取保存的文件名 If (Fname ) Then 如果输入了文件名 If (SaveFileDialog1.FilterIndex = 1) Then 如果是文本文件 RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.PlainText) 文本文件 FExtName = txt Else RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.RichText) RTF文件 FExtName = rtf End If Me.Text = Fname + -简单文件编辑器 设置标题 End If

38、RichTextBox1.Modified = False 保存后把RichtextBox1.Modified属性值变为False StatusBar1.Panels(1).Text = 已保存 End Sub说明:(1)请读者参考语句后的说明,体会“另存为对话框”控件各属性的含义。(2)该过程实现类似于“另存为”菜单的功能。在保存文件且需要指定文件名的情况下可调用该过程。(3)本例调用了RichTextBox控件的SaveFile方法,使用了RichTextBox控件的Modified属性。RichTextBox是一种既可以输入文本、又可以编辑文本的文字处理控件,它在工具箱中的图标为“ ”。

39、与TextBox控件相比,RichTextBox控件的文字处理功能更加丰富,不仅可以设定文字的颜色、字体,还具有字符串检索功能。另外,RichTextBox控件还可以打开、编辑和存储.rtf格式文件、ASCII文本格式文件及Unicode编码格式的文件。下面详细介绍一下该控件的常用属性和方法。RichTextBox控件的常用属性前面介绍的TextBox控件所具有的属性,RichTextBox控件基本上都具有,除此之外,该控件还具有一些其它属性。RightMargin属性:用来设置或获取右侧空白的大小,单位是像素。通过该属性可以设置右侧空白,如希望右侧空白为50像素,可使用如下语句:RichTe

40、xtBox1. RightMargin= RichTextBox1.Width-50;Rtf属性:该属性用来获取或设置 RichTextBox 控件中的文本,包括所有 RTF 格式代码。可以使用此属性将 RTF 格式文本放到控件中以进行显示,或提取控件中的RTF 格式文本。此属性通常用于在RichTextBox控件和其它 RTF 源(如 Microsoft Word 或 Windows 写字板)之间交换信息。SelectedRtf属性:该属性用来获取或设置控件中当前选定的 RTF 格式的格式文本。此属性使用户得以获取控件中的选定文本,包括 RTF 格式代码。如果当前未选定任何文本,给该属性赋值

41、,将把所赋的文本插入到插入点处。如果选定了文本,则给该属性所赋的文本值将替换掉选定文本。SelectionColor属性:该属性用来获取或设置当前选定文本或插入点处的文本颜色。SelectionFont属性:该属性用来获取或设置当前选定文本或插入点处文本的字体。常用方法前面介绍的TextBox控件所具有的方法,RichTextBox控件基本上都具有,除此之外,该控件还具有一些其它方法。 Redo方法 该方法用来重做上次被撤消的操作。调用的一般格式如下: RichTextBox对象.Redo() 该方法无参数。 Find方法该方法用来从RichTextBox控件中查找指定的字符串。经常使用的调用

42、格式如下:格式1:RichTextBox对象.Find(str)功能:在指定的“RichTextBox”控件中查找文本,并返回搜索文本的第一个字符在控件内的位置。如果未找到搜索字符串或者str参数指定的搜索字符串为空,则返回值为-1。格式2:RichTextBox对象.Find(str, RichTextBoxFinds)功能:在“RichTextBox对象”指定的文本框中搜索 str 参数中指定的文本,并返回文本的第一个字符在控件内的位置。如果返回负值,则未找到所搜索的文本字符串。还可以使用此方法搜索特定格式的文本。参数RichTextBoxFinds指定如何在控件中执行文本搜索,其取值及其

43、含义如表7-7所示。表7-7 RichTextBoxFinds参数的取值及含义成员名称说明MatchCase仅定位大小写正确的搜索文本的实例。NoHighlight如果找到搜索文本,不突出显示它。None定位搜索文本的所有实例,而不论是否为全字匹配。Reverse搜索在控件文档的结尾处开始,并搜索到文档的开头。WholeWord仅定位全字匹配的文本。格式3:RichTextBox对象.Find(str, start,RichTextBoxFinds)功能:此版本的 Find 方法与前面的格式2基本类似,不同的只是通过设置搜索起始位置来缩小文本搜索范围,start参数表示开始搜索的位置。此功能使

44、用户得以避开可能已搜索过的文本或已经知道不包含要搜索的特定文本的文本。如果在 options 参数中指定了 RichTextBoxFinds.Reverse 值,则 start 参数的值将指示反向搜索结束的位置,因为搜索是从文档底部开始的。SaveFile方法 该方法用来把RichTextBox中的信息保存到指定的文件中,调用格式有以下三种:格式1:RichTextBox对象名.SaveFile(文件名)功能:将 RichTextBox控件中的内容保存为RTF 格式文件中。格式2:RichTextBox对象名.SaveFile(文件名,文件类型)功能:将 RichTextBox控件中的内容保存

45、为“文件类型”指定的格式文件中。格式3:RichTextBox对象名.SaveFile(数据流,数据流类型)功能:将 RichTextBox控件中的内容保存为“数据流类型”指定的数据流类型文件中。其中,文件类型或数据流类型的取值及含义如表7-8所示。表7-8 文件类型或数据流类型的取值及含义取值含义RichTextBoxStreamType.PlainText纯文本流RichTextBoxStreamType.RichTextRTF格式流RichTextBoxStreamType.UnicodePlainText采用Unicode编码的文本流LoadFile方法使用LoadFile方法可以将文

46、本文件、RTF文件装入RichTextBox控件。主要的调用格式有以下三种。格式1:RichTextBox对象名.LoadFile(文件名)功能:将 RTF 格式文件或标准 ASCII 文本文件加载到 RichTextBox 控件中。格式2:RichTextBox对象名.LoadFile(数据流,数据流类型)功能:将现有数据流的内容加载到 RichTextBox 控件中。格式3:RichTextBox对象名.LoadFile(文件名,文件类型)功能:将特定类型的文件加载到 RichTextBox 控件中。注意:文件类型和数据流格式见表7-8。25编写一个名为“NotSaveProcess”的通

47、用过程,代码如下。 Private Sub NotSaveProcess() 没有保存处理 If RichTextBox1.Modified Then 如果RichTextBox1中的文本被修改,则提示是否保存 If MsgBox(尚未保存,是否保存?, MsgBoxStyle.YesNo, 保存提示) = _ MsgBoxResult.Yes Then 需要保存处理 If Fname = Then 如果文件名为空,文件尚未命名,则是第一次保存 Call SaveAs() 调用SaveAs过程 Else 文件已经命名,已经保存过 If (FExtName = txt) Then 如果是文本文件

48、 文本文件保存 RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.PlainText) Else RTF文件保存 RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.RichText) End If End If End If End If End Sub说明:该过程首行测试文件是否被修改过,如果已经修改则提示是否保存,再根据用户的选择决定是否保存文件。为了防止对文件的修改丢失,可在“新建”、“打开”、“退出”等菜单命令执行时选择调用本过程,测试正在处理的文件是否被修改,如果被修改,让用户决定

49、是否保存。26编写一个名为“NewFile”的通用过程,代码如下。 Private Sub NewFile() Call NotSaveProcess() 调用过程NotSaveProcess实现没有保存处理 Fname = 文件名为空 FExtName = txt 文件的扩展名为空 RichTextBox1.Text = 清空RichTextBox1中显示的文本 Me.Text = 新建-简单文件编辑器 设置标题 RichTextBox1.Modified = False StatusBar1.Panels(1).Text = 已保存 End Sub说明:该过程在用户选择了“新建”菜单项,或

50、单击了工具栏上的“新建”按钮时将被调用。27在窗体的设计界面上,双击“文件&F”菜单中的“新建”菜单项,在出现的代码窗体中,编写该菜单项的事件过程代码,如下。 “新建”菜单项 Private Sub MenuItem1_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1_1.Click Call NewFile() 调用NewFile过程 End Sub说明:菜单项的常用事件主要有Click事件,该事件在用户单击菜单项时发生。28运行程序,将会出现一个空白的输入区域,标题为“

51、新建-简单文件编辑器”。在空白输入区域中输入任意字符。选择“文件”菜单中的“新建”菜单项,将会出现如图7-25所示的“保存提示”对话框。单击“是”按钮,将会出现如图7-26所示的“保存文件”对话框,该对话框是调用SaveFileDialog1控件的ShowDialog方法弹出的。在该对话框中用户可以选择或输入保存的文件类型、保存位置和保存的文件名。图7-25 “保存提示”对话框图7-26 “保存文件”对话框29在工具箱中找到“打开文件”对话框控件(OpenFileDialog控件)图标“”,并为窗体添加一个OpenFileDialog控件。说明:OpenFileDialog控件又称“打开文件”

52、对话框,主要用来弹出Windows中标准的打开文件对话框。30编写一个名为“FileOpen”的通用过程,代码如下。 Private Sub FileOpen() Call NotSaveProcess() 调用过程NotSaveProcess实现没有保存的处理 设置过滤器属性 OpenFileDialog1.Filter = 文本文件(*.txt)|*.txt|RTF格式文件(*.RTF)|*.RTF OpenFileDialog1.FilterIndex = 1 设置当前文件过滤器 OpenFileDialog1.Title = 打开文件 设置对话框的标题 OpenFileDialog1.

53、InitialDirectory = Application.StartupPath 初始目录设为启动路径 OpenFileDialog1.RestoreDirectory = True 自动恢复初始目录 OpenFileDialog1.ShowDialog() 弹出打开文件对话框 Fname = OpenFileDialog1.FileName 获取打开的文件名 If (Fname ) Then 如果选择了文件 If (OpenFileDialog1.FilterIndex = 1) Then 如果是文本文件 RichTextBox1.LoadFile(Fname, RichTextBoxS

54、treamType.PlainText) 文本文件 FExtName = txt Else RichTextBox1.LoadFile(Fname, RichTextBoxStreamType.RichText) RTF文件 FExtName = rtf End If End If Me.Text = Fname + -简单文件编辑器 设置标题 RichTextBox1.Modified = False 文件刚打开时,把RichtextBox1.Modified属性值设为False StatusBar1.Panels(1).Text = 已保存 End Sub说明:(1)该过程在用户选择了“打

55、开”菜单项,或单击了工具栏上的“打开”按钮时将被调用。(2)上述代码中使用了OpenFileDialog控件的多个属性并调用了它的ShowDialog方法。下面将该控件的常用属性和方法作详细的介绍。OpenFileDialog控件的常用属性Title属性:该属性用来获取或设置对话框标题,默认值为空字符串()。如果标题为空字符串,则系统将使用默认标题“打开”。Filter属性:该属性用来获取或设置当前文件名筛选器字符串,该字符串决定对话框的【另存为文件类型】或【文件类型】框中出现的选择内容。对于每个筛选选项,筛选器字符串都包含筛选器说明、垂直线条(|)和筛选器模式。不同筛选选项的字符串由垂直线条

56、隔开。下面是筛选器字符串的一个示例:“文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*”。还可以通过用分号来分隔各种文件类型,可以将多个筛选器模式添加到筛选器中。例如:“图像文件(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|所有文件 (*.*)|*.*”FilterIndex属性:该属性用来获取或设置文件对话框中当前选定筛选器的索引。第一个筛选器的索引为1,默认值为1。FileName属性:该属性用来获取在打开文件对话框中选定的文件名的字符串。文件名既包含文件路径也包含扩展名。如果未选定文件,该属性将返回空字符串()。InitialDirecto

57、ry属性:该属性用来获取或设置文件对话框显示的初始目录,默认值为空字符串()。ShowReadOnly属性:该属性用来获取或设置一个值,该值指示对话框是否包含只读复选框。如果对话框包含只读复选框,则属性值为True,否则属性值为False。默认值为False。ReadOnlyChecked属性:该属性用来获取或设置一个值,该值指示是否选中只读复选框。如果选中了只读复选框,则属性值为True,反之属性值为False。默认值为False。Multiselect属性:该属性用来获取或设置一个值,该值指示对话框是否允许选择多个文件。如果对话框允许同时选定多个文件,则该属性值为True,反之属性值为Fa

58、lse。默认值为False。FileNames属性:该属性用来获取对话框中所有选定文件的文件名。每个文件名都既包含文件路径又包含文件扩展名。如果未选定文件,该方法将返回空数组。RestoreDirectory属性:该属性用来获取或设置一个值,该值指示对话框在关闭前是否还原当前目录。假设用户在搜索文件的过程中更改了目录,且该属性值为True,那么,对话框会将当前目录还原为初始值,若该属性值为False,则不还原成初始值。默认值为False。OpenFileDialog控件的常用方法常用方法有两个OpenFile和ShowDialog 方法,本节只介绍ShowDialog方法,该方法的作用是显示通

59、用对话框,其一般调用形式如下:对话框控件名.ShowDialog()调用该方法后,将会出现对话框,如果用户单击对话框中的“确定”按钮,则返回值为DialogResult.OK;否则返回值为DialogResult.Cancel。其它对话框控件均具有ShowDialog方法,以后不再重复介绍。(3)SaveFileDialog控件也具有FileName、Filter、FilterIndex、InitialDirectory、Title等属性,这些属性的作用与OpenFileDialog对话框控件基本一致。(4)需注意的是:上述两个对话框只返回要打开或保存的文件名,并没有真正提供打开或保存文件的功

60、能,程序员必须自己编写文件打开或保存程序,才能真正实现文件的打开和保存功能。31编写“打开”菜单项的Click事件过程代码,如下。 “打开”菜单项 Private Sub MenuItem1_2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1_2.Click Call FileOpen() End Sub图7-27 “打开文件”对话框32执行程序,选择“文件”菜单中的“打开”菜单项,将会出现如图7-27所示的“打开文件”对话框,用户选择文件类型和文件名后,单击“打开”按钮,将

61、把相应的文件打开并显示在编辑区域(RichTextBox1控件)中,并且文件名将显示在窗口的标题栏上。说明:“打开文件”对话框是调用OpenFileDialog的ShowDialog方法弹出的。33编写一个名为“Save”的通用过程,代码如下。 Private Sub Save() 该函数实现保存功能 If RichTextBox1.Modified Then 如果RichTextBox1中的文本被修改,则要保存 If Fname = Then 如果文件名为空,文件尚未命名,则是第一次保存 Call SaveAs() 调用SaveAs过程 Else 文件已经命名,已经保存过 If (FExtN

62、ame = txt) Then 如果是文本文件 文本文件保存 RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.PlainText) Else RTF文件保存 RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.RichText) End If End If End If RichTextBox1.Modified = False 保存后把RichtextBox1.Modified属性值变为False StatusBar1.Panels(1).Text = 已保存 End Sub说明:(1)该

63、过程首先判断Fname变量值是否为空,如果为空,则是第一次保存,调用SaveAs对话框弹出“保存文件”对话框供用户对文件进行命名。如果Fname变量值不为空,直接保存到该文件中即可。(2)在选择“文件”菜单中的“保存”菜单项时或单击工具栏上的“保存”按钮时将调用该过程。34编写“保存”菜单项的Click事件过程代码,如下。 “保存”菜单项 Private Sub MenuItem1_3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1_3.Click Call Save() E

64、nd Sub35运行程序,输入文本后,选中“文件”菜单中的“保存”菜单项,将会出现“保存文件”对话框,让用户输入文件名并保存文件。然后打开一个文件,修改后直接选择“文件”菜单中的“保存”菜单项,会发现不会出现“保存文件”对话框,而是直接保存起来。36编写“另存为”菜单项的Click事件过程代码,如下。 “另存为”菜单项 Private Sub MenuItem1_4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1_4.Click Call SaveAs() End Sub37

65、运行程序,打开一个文件,选中“文件”菜单中的“另存为”菜单项,将会出现“保存文件”对话框,让用户输入另存为的文件名并保存文件。38编写窗体的Load事件过程代码,如下。 Private Sub frmTextEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call RichTextBoxResize() 调用RichTextBoxResize过程 Fname = FExtName = txt Me.Text = 新建-简单文件编辑器 MenuItem2_1.E

66、nabled = False 撤消菜单项不可用 MenuItem2_2.Enabled = False 重做菜单项不可用 MenuItem2_3.Enabled = False 剪切菜单项不可用 MenuItem2_4.Enabled = False 复制菜单项不可用 MenuItem2_5.Enabled = False 粘贴菜单项不可用 MenuItem3_4_1.Checked = True 选中白色背景 RichTextBox1.BackColor = Color.White 设置RichTextBox1的背景色为白色 在状态栏上显示字符数 StatusBar1.Panels(0).T

67、ext() = 字符数: + CStr(RichTextBox1.TextLength) 显示是否已保存信息 StatusBar1.Panels(1).Text = 已保存 End Sub39编写Timer1的Tick事件过程代码,如下。 每隔500毫秒更新一次时间 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick StatusBar1.Panels(2).Text = DateTime.Now.ToString(T) 显示当前时间 En

68、d Sub40执行程序,会发现状态栏上显示出字符数、是否保存信息及当前时间。打开编辑菜单,会发现有多个菜单项是变灰的。41编写窗体的Resize事件过程代码,如下。 Private Sub frmTextEditor_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize Call RichTextBoxResize() 调用RichTextBoxResize过程 End Sub42运行程序,改变窗体的大小,会发现编辑区域也相应的改变大小。43编写“退出”菜单项的Click事件过程代码,

69、如下。 Private Sub MenuItem1_6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1_6.Click Call NotSaveProcess() 调用过程NotSaveProcess实现没有保存的处理 Me.Close() 关闭窗体 Application.Exit() 退出应用程序 End Sub44运行程序,对“退出”菜单项功能进行测试。45编写RichTextBox1控件的TextChanged事件过程代码,如下。 Private Sub RichTe

70、xtBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged If RichTextBox1.Modified Then StatusBar1.Panels(1).Text = 未保存 End If 在状态栏上显示字符数 StatusBar1.Panels(0).Text() = 字符数: + CStr(RichTextBox1.TextLength) End Sub46运行程序,输入若干个字符后,观察状态栏上的变化。47编写Tool

71、Bar1控件的ButtonClick事件过程代码,如下。 工具栏按钮的Click事件代码 Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick If e.Button Is ToolBarButton1 Then 如果单击的是第一个按钮 Call NewFile() ElseIf e.Button Is ToolBarButton2 Then

72、如果单击的是第二个按钮 Call FileOpen() ElseIf e.Button Is ToolBarButton3 Then 如果单击的是第三个按钮 Call Save() End If End Sub48运行程序,单击“工具栏”上的各按钮,看它们与相应的菜单命令的执行结果是否一样。49编写RichTextBox1控件的SelectionChanged事件过程代码,如下。 RichTextBox1中选中文本发生变化时将发生该事件 Private Sub RichTextBox1_SelectionChanged(ByVal sender As Object, ByVal e As Sy

73、stem.EventArgs) Handles RichTextBox1.SelectionChanged If RichTextBox1.SelectedText Then 如果有选中文本 MenuItem2_3.Enabled = True “剪切”菜单项可用 MenuItem2_4.Enabled = True “复制”菜单项可用 MenuItem2_6.Enabled = True “删除”菜单项可用 Else 如果无选中文本 MenuItem2_3.Enabled = False “剪切”菜单项不可用 MenuItem2_4.Enabled = False “复制”菜单项不可用 Me

74、nuItem2_6.Enabled = False “删除”菜单项不可用 End If End Sub50运行程序,观看“编辑”菜单中的哪些菜单项可用,选中若干文本后,再观看“编辑”菜单中的哪些菜单项可用。51为“编辑”菜单中的各菜单项编写Click事件过程代码,程序代码如下。 “撤消”菜单项 Private Sub MenuItem2_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2_1.Click RichTextBox1.Undo() End Sub “重做”菜单项

75、Private Sub MenuItem2_2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2_2.Click RichTextBox1.Redo() End Sub “剪切”菜单项 Private Sub MenuItem2_3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2_3.Click RichTextBox1.Cut() MenuItem2_5.E

76、nabled = True MenuItem2_3.Enabled = False End Sub “复制”菜单项 Private Sub MenuItem2_4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2_4.Click RichTextBox1.Copy() MenuItem2_5.Enabled = True End Sub “粘贴”菜单项 Private Sub MenuItem2_5_Click(ByVal sender As System.Object, By

77、Val e As System.EventArgs) Handles MenuItem2_5.Click RichTextBox1.Paste() End Sub “删除”菜单项 Private Sub MenuItem2_6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2_6.Click RichTextBox1.SelectedText = 清除选中文本 End Sub “全选”菜单项 Private Sub MenuItem2_7_Click(ByVal sender

78、As System.Object, ByVal e As System.EventArgs) Handles MenuItem2_7.Click RichTextBox1.SelectAll() 选中全部文本 End Sub52运行程序,对“编辑”菜单中的各菜单项功能进行验证。53在工具箱中找到“字体对话框”控件(FontDialog控件)图标“”,为窗体添加一个FontDialog控件。说明:FontDialog控件又称字体对话框,主要用来弹出Windows中标准的【字体】对话框。字体对话框的作用是显示当前安装在系统中的字体列表,供用户进行选择。54编写“字体”菜单项的Click事件过程代码

79、,如下。 “字体”菜单项 Private Sub MenuItem3_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3_1.Click FontDialog1.ShowEffects = True 显示设置下划线、删除线等的复选框 在弹出字体对话框前,把字体对话框的字体设置为选定文本的字体 FontDialog1.Font = RichTextBox1.SelectionFont If (FontDialog1.ShowDialog() = DialogResult.OK)

80、 Then 弹出字体对话框且按了确定按钮 RichTextBox1.SelectionFont = FontDialog1.Font 设置选中文本的字体 End If End Sub说明:上述代码中使用了一些字体对话框控件的属性,下面介绍字体对话框控件的主要属性。(1)Font属性:该属性是字体对话框的最重要属性,通过它可以设定或获取字体信息。(2)Color属性:该属性用来设定或获取字符的颜色。(3)MaxSize属性:该属性用来获取或设置用户可选择的最大磅值。(4)MinSize属性:该属性用来获取或设置用户可选择的最小磅值。(5)ShowColor属性:该属性用来获取或设置一个值,该值指

81、示字体对话框是否显示颜色选择框。如果显示颜色选择框,属性值为True,反之属性值为False。默认值为 False。(6)ShowEffects属性:该属性用来获取或设置一个值,该值指示对话框是否包含允许用户指定删除线、下划线和文本颜色选项的控件。如果对话框包含设置删除线、下划线和文本颜色选项的控件,属性值为True,反之属性值为False。默认值为True。55运行程序,选中一部分文本后,选择“格式”菜单中的“字体”菜单项,将会出现如图7-28所示的“字体”对话框,通过该对话框可以设置选中文本的字体。字体设定好后单击“确定”按钮,发现选中文本的字体发生了改变,如图7-29所示。图7-28 “

82、字体”对话框 图7 -29 通过“字体”对话框设置的字体56在工具箱中找到又称“颜色对话框”控件(ColorDialog控件)图标“”,为窗体添加一个ColorDialog控件。说明:ColorDialog控件又称颜色对话框,主要用来弹出Windows中标准的【颜色】对话框。颜色对话框的作用是供用户选择一种颜色,并用Color属性记录用户选择的颜色值。57编写“颜色”菜单项的Click事件过程代码,如下。 “颜色”菜单项 Private Sub MenuItem3_2_Click(ByVal sender As System.Object, ByVal e As System.EventArg

83、s) Handles MenuItem3_2.Click ColorDialog1.AllowFullOpen = True 允许用户自定义颜色 ColorDialog1.AnyColor = True 显示基本色的全部颜色 在弹出颜色对话框前,把颜色对话框的颜色设置为选定文本的颜色 ColorDialog1.Color = RichTextBox1.SelectionColor If (ColorDialog1.ShowDialog() = DialogResult.OK) Then RichTextBox1.SelectionColor = ColorDialog1.Color End I

84、f End Sub说明:上述代码中使用了一些颜色对话框控件的属性,下面介绍颜色对话框控件的主要属性。(1)AllowFullOpen属性:该属性用来获取或设置一个值,该值指示用户是否可以使用该对话框定义自定义颜色。如果允许用户自定义颜色,属性值为True,否则属性值为False。默认值为True。(2)FullOpen属性:该属性用来获取或设置一个值,该值指示用于创建自定义颜色的控件在对话框打开时是否可见。值为True时可见,值为False时不可见。(3)AnyColor属性:该属性用来获取或设置一个值,该值指示对话框是否显示基本颜色集中可用的所有颜色。值为True时,显示所有颜色,值为Fal

85、se时,不显示所有颜色。(4)Color属性:该属性用来获取或设置用户选定的颜色。58运行程序,选中一部分文本后,选择“格式”菜单中的“颜色”菜单项,将会出现如图7-30所示的“颜色”对话框,通过该对话框可以设置选中文本的字体。字体设定好后单击“确定”按钮,发现选中文本的颜色发生了改变,如图7-31所示。图7-30 “颜色”对话框图 7-31 通过“颜色”对话框设置的颜色计算机算机应用用教研教研室室操作系操作系统59编写“白色背景”和“灰色背景”菜单项的Click事件过程,代码如下。 “白色背景”菜单项 Private Sub MenuItem3_4_1_Click(ByVal sender

86、As System.Object, ByVal e As System.EventArgs) Handles MenuItem3_4_1.Click MenuItem3_4_1.Checked = True 让“白色”背景菜单项显示选中标志 MenuItem3_4_2.Checked = False 让“灰色”背景菜单项不显示选中标志 RichTextBox1.BackColor = Color.White 设置背景色为白色 End Sub “灰色背景”菜单项 Private Sub MenuItem3_4_2_Click(ByVal sender As System.Object, ByVa

87、l e As System.EventArgs) Handles MenuItem3_4_2.Click MenuItem3_4_1.Checked = False 让“白色”背景菜单项不显示选中标志 MenuItem3_4_2.Checked = True 让“灰色”背景菜单项显示选中标志 RichTextBox1.BackColor = Color.Gray 设置背景色为灰色 End Sub60运行程序,对“白色背景”和“灰色背景”菜单项的功能进行测试。保存项目,至此本任务全部完成。计算机算机应用用教研教研室室操作系操作系统归纳说明:本任务通过简易文本编辑器的实现过程,详细讲解了菜单、系统

88、对话框、工具栏、状态栏等界面要素的实现方法。对于菜单,着重讲解了热键、快捷键、选中项等的实现方法。对于对话框,分别讲解了“打开”对话框、“保存”对话框、“字体”对话框、“颜色”对话框的编程实现方法。对于工具栏,讲解了ImageList控件的使用方法、为工具栏添加按钮的方法以及编写工具栏按钮的响应代码的方法。对于状态栏,讲解了为状态栏添加Panel控件的方法以及在状态栏显示信息的方法。另外,为了显示格式文本,本任务还讲解了RichTextBox控件的使用方法,对于该控件着重讲解了它的常用属性与方法的使用。计算机算机应用用教研教研室室操作系操作系统7.3 7.3 任务任务7-37-3:图文浏览器程

89、序:图文浏览器程序多文档程序设计多文档程序设计任务7-3描述:编写一个能够显示图像文件和文本文件内容的MDI应用程序,要求如下:图7-34 “图文浏览器”程序运行界面(1)能够打开任意多个文本文件和图像文件;(2)显示文本文件和图像文件均用一个MDI子窗体来实现;(3)子窗体的菜单能够与父窗体进行融合;(4)能够实现子窗体的关闭、全部关闭等功能;(5)能够实现子窗体的重叠、平铺等功能。程序某时刻的运行界面如图7-34所示。计算机算机应用用教研教研室室操作系操作系统 任务分析:实现要点主要有以下几点:(1)MDI窗体的建立。创建一个窗体,作为MDI父窗体,只需把它的IsMdiContainer属

90、性值设置为True即可。(2)创建显示文本文件子窗体问题。建立一个窗体,在窗体上放置一个RichTextBox控件。每次执行【文件】【打开】命令均应通过程序动态创建一个子窗口,并把打开的文件内容显示在RichTextBox控件中。(3)创建显示图片文件子窗体问题。建立一个窗体,在窗体上放置一个PictureBox控件,用来显示图片,设置它的SizeMode属性值为StretchImage,以便图片显示与窗体一般大。每次执行【文件】【打开】命令均应通过程序动态创建一个子窗口,并把打开的图像文件内容显示在PictureBox控件中。(4)主菜单和子菜单的合并问题。由于打开了文本文件后,子窗体【文件

91、】菜单的选项自动添加到父窗体的【文件】菜单中,因此应把父窗体和子窗体的【文件】菜单的MergeOrder属性设置成相同的值,把它们的MergeType属性值设置为MergeItems。(5)子窗口排列问题。排列子窗口可使用父窗口的LayoutMdi方法,使用不同的参数实现不同的排列方式。(6)关闭所有子窗口。可通过一个循环,在循环中通过父窗口的MdiChildren属性遍历所有的子窗口,并执行每个子窗体的Close方法。 计算机算机应用用教研教研室室操作系操作系统任务实现:1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项目的存放位置为“D:VBTASKCH07”,项目

92、名为“Task7_3”。2把Form1窗体的Text属性值设置为“图文浏览器”,把它的Name属性值设置为“frmMain”,把它的IsMdiContainer属性值设置为True。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“frmMain.vb”。然后执行【项目】【Task7_3属性】命令,在出现的“Task7_3属性页”对话框中把“启动对象”设置为“frmMain”。3向该窗体上添加一个MainMenu控件,并设计菜单,设计完成的MDI父窗体界面如图7-35和7-36所示。各菜单项设置如表7-9所示。再为该窗体添加一个名为“OpenFile

93、Dialog1”的OpenFileDialog控件。图7-35 MDI父窗体设计界面1 图7-36 MDI父窗体设计界面2 表7-9 菜单项及其属性设置菜单标题文字菜单项名MergeType属性值MergeOrder属性值文件&FMenuItem1MergeItems1打开&OMenuItem2Add2-MenuItem3Add4退出&xMenuItem4Add5窗口&WMenuItem5排列图标MenuItem6层叠MenuItem7平铺MenuItem8垂直平铺MenuItem9-MenuItem10关闭所有子窗口MenuItem11-MenuItem12窗口列表MenuItem13说明:

94、把“窗口列表”菜单项的MDIList属性值设置为True。(1)任务7-2所创建的是单文档界面(SDI)应用程序。这样的程序仅支持一次打开一个文档。如果需要编辑多个文档,用户必须创建SDI应用程序的多个实例。而使用多文档界面(MDI)程序(如Word和Adobe Photoshop)时,用户可以同时编辑多个文档。MDI程序中的应用程序窗口称为父窗口,应用程序内部的窗口称为子窗口。虽然MDI应用程序可以具有多个子窗口,但是每个子窗口却只能有一个父窗口。此外,处于活动状态的子窗口最大数目是1。子窗口本身不能再成为父窗口,而且不能移动到它们的父窗口区域之外。除此以外,子窗口的行为与任何其他窗口一样(

95、如可以关闭、最小化和调整大小等等)。一个子窗口在功能上可能与父窗口的其他子窗口不同,例如,一个子窗口可能用于编辑图像,另一个子窗口可能用于编辑文本,第3个子窗口可以使用图形来显示数据,但是所有的窗口都属于相同的MDI父窗口。图7-34就是一个典型的MDI程序。(2)本任务设置父窗体的MainMenu菜单的某此菜单项的MergeType属性值和MergeOrder属性值的作用是为了使用菜单项能够和子窗口的菜单项合并。父窗体和子窗体可以使用不同的菜单,这些菜单会在选择子窗体的时候合并。如果需要指定菜单的合并方式,程序员可以设置每个菜单项的MergeOrder属性和MergeType属性。Merge

96、Order属性:该属性用来确定当两个菜单合并时菜单项出现的顺序,具有较低MergeOrder的菜单项会首先出现。MergeType属性:当合并的两个菜单的某些菜单项的MergeOrder属性值相等时,使用该属性可以控制这些菜单项的显示方式。其取值及含义如表7-10所示。表7-10 MergeType属性取值及其含义取 值含 义MergeType.Add子菜单中的菜单项作为菜单栏上的新菜单添加到了其父菜单中(父菜单项首先出现)MergeType.Replace在合并过程中,该菜单项就会取代父窗体中相对应的菜单项MergeType.Mergeltems菜单项会将它的菜单项与其相应父菜单中的菜单项组

97、合在一起(如果父菜单和子菜单原来占据着相同的位置,那么它们的子菜单会合并为一个大菜单)MergeType.Remove子菜单项与其父菜单中相应的项合并时,相应的子菜单项会消失4为项目添加一个新窗体,把它的Text属性值设置为“文本文件查看器”把它的Name属性值设置为“ChildForm1”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为“ChildForm1.vb”。为该窗体添加一个RichTextBox控件,控件名为RichTextBox1,用来显示打开的文件内容。为窗体添加一个MainMenu组件,并按表7-11所示对菜单进行设计,设计完成后

98、的界面如图7-37所示。表7-11 菜单项及其属性设置菜单标题文字菜单项名MergeType属性值MergeOrder属性值文件&FMenuItem1MergeItems1关闭&CMenuItem2Add3图7-37 “文本文件查看器”子窗体设计界面6为子窗体ChildForm1定义一个全局变量filename,将编写一个名为open的函数过程,如下。 Public filename As String 记录打开的文件名 Public Sub Open(ByVal FName As String) 自定义的打开文件方法 RichTextBox1.LoadFile(FName, RichText

99、BoxStreamType.PlainText) Me.Text = FName Me.filename = FName End Sub7为子窗体ChildForm1中的菜单项“关闭”编写Click事件过程代码,如下。 Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click Me.Close() 关闭当前窗体 End Sub8为子窗体ChildForm1编写Load事件过程代码,如下。 Private Sub ChildForm

100、1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 以下四条语句,使丰富格式文本框填满整个窗体 RichTextBox1.Left = 0 RichTextBox1.Top = 0 RichTextBox1.Width = Me.ClientSize.Width RichTextBox1.Height = Me.ClientSize.Height End Sub9为子窗体ChildForm2编写Resize事件过程代码,如下。 Private Sub ChildForm1_

101、Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize 以下四条语句,使丰富格式文本框填满整个窗体 RichTextBox1.Left = 0 RichTextBox1.Top = 0 RichTextBox1.Width = Me.ClientSize.Width RichTextBox1.Height = Me.ClientSize.Height End Sub10为子窗体ChildForm2定义一个全局变量filename,将编写一个名为open的函数过程,如下。 Public f

102、ilename As String 记录打开的文件名 Public Sub Open(ByVal FName As String) 自定义的打开文件方法 Dim b1 As Bitmap = New Bitmap(FName) 根据用户选择的文件产生图像对象 PictureBox1.Image = b1 把产生的图像对象赋值给pictureBox1.Image属性 Me.Text = FName Me.filename = FName End Sub11为子窗体ChildForm2中的菜单项“关闭”编写Click事件过程代码,如下。 Private Sub MenuItem2_Click(By

103、Val sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click Me.Close() 关闭当前窗体 End Sub12为子窗体ChildForm2编写Load事件过程代码,如下。 Private Sub ChildForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 以下四条语句,使图片框填满整个窗体 PictureBox1.Left = 0 PictureBox1.T

104、op = 0 PictureBox1.Width = Me.ClientSize.Width PictureBox1.Height = Me.ClientSize.Height End Sub13为子窗体ChildForm2编写Resize事件过程代码,如下。 Private Sub ChildForm2_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize 以下四条语句,使图片框填满整个窗体 PictureBox1.Left = 0 PictureBox1.Top = 0 Pictu

105、reBox1.Width = Me.ClientSize.Width PictureBox1.Height = Me.ClientSize.Height End Sub14为MDI父窗体frmMain中的菜单项“打开”编写Click事件过程代码,如下。 Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MenuItem2.Click Dim fname As String 存放文件名 Dim K As Integer OpenFileDialog1.Fil

106、ter = 文本文件(*.txt)|*.txt|图片文件(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF 设置过滤器 OpenFileDialog1.ShowDialog() 显示打开文件对话框 fname = OpenFileDialog1.FileName 获得文件名 If fname = Then 如果没有选择文件名,则退出过程 Exit Sub End If K = fname.IndexOf(.) 寻找小数点位置 If UCase(fname.Substring(K + 1) TXT Then 文件扩展名为txt,打开文本文件 Dim Child As Ne

107、w ChildForm2 创建新的子窗体 Child.MdiParent = Me 设置子窗体的MdiParent Child.Open(fname) 调用在子窗体中定义的open方法把文件显示在richTextBox框中 Child.Show() 显示子窗体 Else Dim Child As New ChildForm1 创建新的子窗体 Child.MdiParent = Me 设置子窗体的MdiParent Child.Open(fname) 调用在子窗体中定义的open方法把文件显示在richTextBox框中 Child.Show() 显示子窗体 End If End Sub说明:(

108、1)上述代码首先弹出一个“打开”文件对话框,供用户选择要显示的的文本文件或图片文件,然后根据文件的扩展名决定创建哪一个子窗体,调用相应窗体的open过程把选择的文件打开。(2)程序中的语句“Child.MdiParent = Me”使用了MDI子窗体的MdiParent属性,该属性用来指定子窗体属于哪个MDI父窗体。下面介绍一下程序设计中经常使用的MDI父窗体和子窗体的常用属性。常用的MDI父窗体属性如下。ActiveMdiChild属性:该属性用来表示当前活动的MDI子窗口,如果当前没有子窗口,则返回null。IsMdiContainer属性:该属性用来获取或设置一个值,该值指示窗体是否为多

109、文档界面(MDI)子窗体的容器,即MDI父窗体。值为True时,表示是父窗体,值为False时,表示不是父窗体。MdiChildren属性:该属性以窗体数组形式返回所有MDI子窗体,每个数组元素对应一个MDI子窗体。常用的MDI子窗体的属性有:IsMdiChild属性:该属性用来获取一个值,该值指示该窗体是否为多文档界面(MDI)的子窗体。值为True时,表示是子窗体,值为False时,表示不是子窗体。MdiParent属性:该属性用来指定该子窗体的MDI父窗体。15为MDI父窗体frmMain中的菜单项“退出”编写Click事件过程代码,如下。 Private Sub MenuItem4_C

110、lick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click Application.Exit() 退出应用程序 End Sub16为MDI父窗体frmMain中的菜单项“排列图标”编写Click事件过程代码,如下。 Private Sub MenuItem6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem6.Click Me.LayoutMdi(MdiLayou

111、t.ArrangeIcons) 排列图标 End Sub17为MDI父窗体frmMain中的菜单项“层叠”、“水平平铺”和“垂直平铺”分别编写Click事件过程代码,如下。 Private Sub MenuItem7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem7.Click Me.LayoutMdi(MdiLayout.Cascade) 层叠 End SubPrivate Sub MenuItem8_Click(ByVal sender As System.Object,

112、ByVal e As System.EventArgs) Handles MenuItem8.Click Me.LayoutMdi(MdiLayout.TileHorizontal) 水平平铺 End Sub Private Sub MenuItem9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem9.Click Me.LayoutMdi(MdiLayout.TileVertical) 垂直平铺 End Sub说明:(1)MDI父窗体有一个名为LayoutMdi方法,该方法的调

113、用格式如下:MDI父窗体名.LayoutMdi(Value)该方法用来在MDI父窗体中排列MDI子窗体,以便导航和操作MDI子窗体。参数Value决定排列方式,取值有:MdiLayout.ArrangeIcons(所有MDI子窗体以图标的形式排列在MDI父窗体的工作区内)、MdiLayout.TileHorizontal(所有MDI子窗口均水平平铺在MDI父窗体的工作区内)、MdiLayout.TileVertical(所有MDI子窗口均垂直平铺在MDI父窗体的工作区内)和MdiLayout.Cascade(所有MDI子窗口均层叠在MDI父窗体的工作区内)。(2)除了使用MDI父窗体的属性和方

114、法外,还有一个常用的MDI父窗体的事件是MdiChildActivate,该事件在激活或关闭一个MDI子窗体时将发生。18为MDI父窗体frmMain中的菜单项“关闭所有窗口”编写Click事件过程代码,如下。 Private Sub MenuItem11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem11.Click Dim i As Integer For i = Me.MdiChildren.Length - 1 To 0 Step -1 Me.MdiChildren(i

115、).Close() 关闭所有子窗体 Next i End Sub说明:上述代码通过一个循环遍历所有的MDI子窗体,并对每一个子窗体,调用它的Close方法把该窗体给关闭。19运行程序,对各菜单功能进行测试。测试无误后保存项目,本任务到此全部完成。 归纳说明:本任务通过图文浏览器程序的实现过程,讲解了MDI应用程序的设计方法。一个MDI应用程序应包括一个MDI父窗体,可以有0或多个显示在父窗体中的子窗体。在VB.NET中,可把窗体的IsMdiContainer属性值设置为True,使成为MDI父窗体。在程序运行时若想创建的窗体为某MDI父窗体的子窗体,可把它的IsMdiChild属性值设置为True,把它的MdiParent属性值设置为父窗体的名称。在本任务中讲解过程中,还介绍了通过调用父窗体的LayoutMdi方法对子窗体进行重叠、平铺、排列图标等操作的方法,还介绍了通过MDI父窗体的MdiChildren属性引用子窗体的方法。VB.NETVB.NET清华大学出版社清华大学出版社计算机算机应用用教研教研室室 2007.08VB.NET程序设计实用教程程序设计实用教程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号