1、VB.NET程序设计实用教程,第7章 Windows高级界面设计,本章任务:,体育彩票摇奖程序简易文本编辑器程序图文浏览器程序,计算机应用教研室,操作系统,本章要点,要点,7.1 任务7-1:体育彩票摇奖程序多窗体程序设计,任务7-1描述:,编写一个七位号码体彩摇奖程序,程序中有三个窗体,分别如图7-1、图7-2和图7-3所示。程序运行时首先出现摇奖窗体,在该窗体上单击“摇奖”按钮,将不停地产生随机数并填充在七个文本框中,如图7-4所示。单击“停止”按钮将停止摇奖,此时在文本框中显示的数就是获奖号码。单击“公布”按钮将公布获奖号码,如图7-5所示。在该窗体上单击“返回”按钮将返回到摇奖窗体。单
2、击“退出”按钮将出现如图7-6所示的“退出提示框”,单击“确定”按钮将退出应用程序。,注意:在图7-1所示的窗体中还有一个定时器控件。,计算机应用教研室,操作系统,图7-1 摇奖窗体设计界面 图7-2 公布中奖号码窗体设计界面,图7-3 “退出提示框”窗体设计界面 图7-4 摇奖窗体运行界面,图7-5 公布中奖号码窗体运行界面 图7-6 “退出提示框”窗体运行界面,1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”,项 目的存放位置为“D:VBTASKCH07”,项目名为“Task7_1”。 2把Form1窗体的Text属性值设置为“体育彩票摇奖程序”,把它的Name属性值
3、设置为“frmTicketReward”。单击“解决方案资源管理器”中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为 “frmTicketReward.vb”。然后执行【项目】【Task7_1属性】命令,在出现的“Task7_1属性页”对话框中把“启动对象”设置为frmTicketReward”。注意:在多窗体程序设计中,如果要改变启动窗体,方法也是执行【项目】【*属性】 命令,在出现的“*属性页”对话框中把“启动对象”设置为相应窗体即可。,任务实现:,3对照图7-1摇奖窗体设计界面,为窗体添加控件并设置控件的 属性。控件的属性设置如表7-1所示。,表7-1 任务7-1中的f
4、rmTicketReward窗体中的控件属性设置及其功能,计算机应用教研室,操作系统,4单击工具栏上的“ ”按钮或执行【项目】【添加Windows窗体】 命令,将会出现如图7-7所示的【添加新项】对话框。,5在该对话框的“模板”下面的列表框中选中【Windows 窗体】图 标,在名称后面的文本框中输入窗体名“frmTicketPublish”,然后单 击“打开”按钮,即为应用程序添加了一个名为“frmTicketPublish” 窗体。把该窗体的Text属性值设置为“中奖号码公布”。 注意:也可以选添加窗体,然后再修改其Name属性值。,图7-7 “添加新项”对话框,6对照图7-2公布获奖号码
5、窗体设计界面,为窗体添加控件并设置 控件的属性。控件的属性设置如表7-2所示。,7采用与步骤4和步骤5同样的方法为项目再添加一个名为“frmExit”的窗体,并把它的Text属性值设置为“退出提示框”。,表7-2 任务7-1中的frmTicketPublish窗体中的控件属性设置及其功能,8对照图7-3退出提示框窗体设计界面,为窗体添加控件并设置 控件的属性。控件的属性设置如表7-3所示。,然后再把该窗体的FormBorderStyle属性值设置为“FixedSingle”,把AcceptButton属性值设置为“Button1 ”把CancelButton属性值设置为“Button2”。至此
6、界面设计基本完成。,表7-3 任务7-1中的frmExit窗体中的控件属性设置及其功能,9在“解决方案资源管理器”中双击“frmTicketReward”窗体, 并切换到“frmTicketReward”窗体的代码窗口,在代码窗口的最顶部 加上如下程序代码。 Imports Task7_1.frmTicketPublish Imports Task7_1.frmExit 注意:在多窗体程序设计中,每个窗体相当于一个类,在一个窗体中要调 用其它窗体,必须通过Imports语句把该窗体作为命名空间引入进来。,10在“ ”下面编写如下程序代码,定义7个全局公享的整型变量,用来存放中奖号码。Publi
7、c Shared a1, a2, a3, a4, a5, a6, a7 As Integer 存放摇出来的中奖号码 注意:必须是在窗体的“Declaration”部分用“Public Shared”定义的变量才能被其它窗体使用。,11编写本窗体的Load事件过程代码,如下。Private Sub frmTicketReward_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.LoadRandomize() 随机数初始化End Sub 12编写Button1按钮的Click事件过程代码,
8、如下。Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickTimer1.Enabled = True 启动定时器,开始摇号Button2.Enabled = True 停止按钮可用Button1.Enabled = False 摇奖按钮不可用End Sub,13编写Timer1控件的Tick事件过程代码,如下。Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e
9、As System.EventArgs) Handles Timer1.Tick产生七位随机数作为中奖号码a1 = Int(Rnd() * 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 =
10、CStr(a3) : TextBox4.Text = CStr(a4)TextBox5.Text = CStr(a5) : 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 Syste
11、m.EventArgs) Handles Button2.ClickTimer1.Enabled = False 关闭定时器,结束摇号Button3.Enabled = True 公布按钮可用Button2.Enabled = False 停止按钮不可用End Sub 16运行程序,单击“摇奖”按钮摇奖后,单击“停止”按钮,会发现 文本框中的数固定了下来,此时的值就可以认为是中奖号码。,17编写Button3按钮的Click事件过程代码,如下。Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.E
12、ventArgs) Handles Button3.ClickDim Frm As New frmTicketPublish 定义一个frmTicketPublish 类的对象Frm.Show() 显示该对象,窗体将显示出来End Sub 18编写Button4按钮的Click事件过程代码,如下。Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.ClickDim frmExitDialog As New frmExit 根据退出窗体生成对象I
13、f frmExitDialog.ShowDialog() = DialogResult.OK Then 如果单 击了“确定”按钮,则退出Me.Close() 关闭本窗体Application.Exit() 退出应用程序End IfEnd Sub,说明: (1)上述代码首先产生一个frmExit窗体的实例,然后调用该窗体实例的ShowDialog方法把该窗体实例以对话框的形式显示出来,如果用户在对话框中单击了“是”按钮,则退出应用程序。 (2)在VB.NET中,除了可以使用Windows自带的标准对话框外,如MsgBox、InputBox等,用户还可以把自己设计的窗体定义成对话框。使用自定义对话
14、框有以下几个要点。 将窗体的FormBorderStyle属性值设置为FixedDialog; 根据需要向窗体上添加控件; 使用窗体的ShowDialog方法显示窗体,即显示出对话框。,19运行程序,单击“退出”按钮,将会出现如图7-6所示的对话框, 单击“是”按钮退出应用程序。 20在“解决方案资源管理器”中双击“frmTicketPublish”窗体并切换 到该窗体,在所有代码之前,加上如下代码。 Imports Task7_1.frmTicketReward 21编写“frmTicketPublish”窗体的Load事件过程代码,如下。Private Sub frmTicketPubli
15、sh_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) 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 说明: 在窗体中可以访问被引入的
16、其他窗体中定义的全局共享变量。,22为该窗体的“关闭”按钮编写Click事件过程代码,如下。Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickMe.Close() 关闭本窗体End Sub 23运行程序,单击“摇奖”按钮进行摇奖,单击“停止”按钮产生中奖 号码,单击“公布”按钮将会出现如图7-5所示的“中奖号码公布”窗口, 单击“关闭”按钮将加到“摇奖”窗口。 24保存项目,至此本任务全部完成。,归纳说明: Windows应用程序很
17、少只由一个窗体组成,一般情况下一个应用程序均 拥有很多个窗体。VB.NET项目刚建立时只有一个名为Form1的窗体,要 建立多窗体应用程序应首先为项目添加窗体。在VB.NET中还可以任意 指定其他窗体为启动窗体。本任务通过体育彩票摇奖程序的实现过程, 讲解了多窗体程序设计的方法与注意事项。,7.2 任务7-2:简易文本编辑器程序丰富格式文本框、菜单、对话框、工具栏、状态栏等的应用,任务7-2描述: 编写一个简易文本编辑器程序,要求通过菜单能够实现文件的新建、打 开、保存、另存为、退出等文件或应用程序操作功能,能够实现撤消、 重做、剪切、复制、粘贴、删除、全选等编辑操作功能,能够实现设置 文本的
18、字体、颜色、背景色等格式操作功能。对于常用的功能还要通过 工具栏实现,还应具有状态栏对当前的状态进行提示。程序的设计界面 如图7-10所示,程序的运行界面如图7-11所示。,图7-10 程序设计界面 图7-11 程序运行界面,任务分析:本任务涉及到菜单、工具栏、状态栏等多种控件, 中间涉及到多种编程技巧,分析起来较困难,将在 讲解的过程中一步一步地加上详细分析。,任务实现: 1启动VB.NET,新建一个项目,项目类型为“Windows应用程序”, 项目的存放位置为“D:VBTASKCH07”,项目名为“Task7_2”。 2把Form1窗体的Text属性值设置为“简易文本编辑器”,把它的 Na
19、me属性值设置为“frmTextEditor”。单击“解决方案资源管理器” 中的“Form1.VB”窗体,然后在属性窗口中把它文件名属性设置为 “frmTextEditor.vb”。然后执行【项目】【Task7_2属性】命令,在 出现的“Task7_2属性页”对话框中把“启动对象”设置为 “frmTextEditor”。,3在工具箱上找到MainMenu(主菜单)控件图标“ ”,并把该控件添加到窗体上,标题栏下将出现菜单栏,如图7-12所示。,图7-12 添加了MainMenu控件后出现的菜单栏 图7-13 在菜单栏中输入了“文件&F”菜单项,4在“请在此处输入”文字上单击,然后输入文字“文件
20、&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-4 “文件”菜单中的
21、其它菜单项及其属性设置,说明: 菜单项的常用属性如下: (1)Text属性:该属性用来获取或设置一个值,通过该值显示菜单项标题。当使用Text属性为菜单项指定标题时,还可以在字符前加一个“&”号来指定热键(访问键,即加下划线的字母)。例如,若要将“File”中的“F”指定为访问键,应将菜单项的标题指定为“&File”。 (2)Checked属性:该属性用来获取或设置一个值,通过该值指示选中标记是否出现在菜单项文本的旁边。如果要放置选中标记在菜单项文本的旁边,属性值为True,否则属性值为False。默认值为False。,(3)DefaultItem属性:该属性用来获取或设置一个值,通过该值指示
22、菜单项是否为默认菜单项。值为True时,是默认菜单项,值为False时,不是默认菜单项。菜单的默认菜单项以粗体的形式显示。当用户双击包含默认项的子菜单后,默认项被选定,然后子菜单关闭。 (4)Enabled属性:该属性用来获取或设置一个值,通过该值指示菜单项是否可用。值为True时表示可用,值为False时表示当前禁止使用。 (5)RadioCheck属性:该属性用来获取或设置一个值,通过该值指示选中的菜单项的左边是显示单选按钮还是选中标记。值为True时将显示单选按钮标记,值为False时显示选中标记。 (6)Shortcut属性:该属性用来获取或设置一个值,该值指示与菜单项相关联的快捷键。
23、 (7)ShowShortcut属性:获取或设置一个值,该值指示与菜单项关联的快捷键是否在菜单项标题的旁边显示。如果快捷组合键在菜单项标题的旁边显示,该属性值True,如果不显示快捷键,该属性值为False。默认值为True。 (8)MdiList属性:该属性用来获取或设置一个值,通过该值指示是否用在关联窗体内显示的多文档界面(MDI)子窗口列表来填充菜单项。若要在该菜单项中显示MDI子窗口列表,则设置该属性值为True,否则设置该属性的值为 False。默认值False。,7单击“文件F”右边的“请在此处输入”,输入“编辑&E”形成编 辑菜单,在属性窗口设置“编辑”菜单的名称为“MenuIt
24、em2”。再为 “编辑”菜单输入7个菜单项,菜单项的标题文字、名称、快捷键如表7-5 所示。设置好的文件菜单如图7-16所示。,表7-5 “编辑”菜单中的菜单项及其属性设置,图7-16 设计好的“编辑”菜单 图7-17 设计好了的“格式”菜单,8采用类似的方法设计格式菜单,设计好的格式菜单如图7-17所示,各菜单项及其属性设置如表7-6所示。,表7-6 “格式”菜单中的菜单项及其属性设置,注意:还需把“MenuItem3_4_1”菜单项的RadioCheck属性值设置为True,把它的Checked属 性值设置为True。把“MenuItem3_4_2”菜单项的RadioCheck属性值设置为
25、False。,9在工具箱中找到工具栏图标“ ”,并为窗体添加一个 ToolBar控件(工具栏控件),控件名称为ToolBar1,如图7-18所示。,图7-18 添加的工具栏控件,说明:对读者来说,工具栏并不陌生,如Word中的常用工具栏、格式工具栏等。工具栏是由一系列的图标按钮组成,形象化的图标与功能的对应,使应用程序界面具有更好的交互性。在VB .NET中,要实现工具栏,需要使用两个控件:ImageList控件和ToolBar控件。,10在工具箱中找到图像列表控件图标“ ”,并向窗体上添加一个ImageList控件(图像列表控件),控件名为ImageList1。,11用鼠标单击ImageLi
26、st1控件,然后在“属性”窗口中选中“Images”属性,单击其后的“”按钮,将会出现如图7-19所示的“Image集合编辑器”对话框。 12单击“添加”按钮,将会出现“打开”文件对话框,在该对话框中定义要添加到工具栏上的按钮图片文件,然后按“打开”按钮,反复操作直到需要的图形文件全部添加到“Image 集合编辑器”的成员列表中,如图7-20所示(添加了“新建”、“打开”、“保存”三个操作的按钮图片)。然后按“确定”按钮关闭“Image集合编辑器”对话框。,图7-19 “Image集合编辑器”对话框,图7-20 添加了图片文件后的“Image集合编辑器”对话框,13单击ToolBar1工具栏控
27、件,设置它的ImageList属性值为 “ImageList1”。然后再在“属性”窗口中单击“Buttons”属性后 面的“”按钮,将会出现“ToolBarButton集合编辑器”对话框。 14在该窗口中单击“添加”按钮,将会出现第一个按钮,并且在窗 口的右边将出现该按钮的属性设置窗口,通过设置ImageIndex属性可 以指定在按钮上显示的图片文件。图7-21是添加了三个按钮后的 “ToolBarButton集合编辑器”对话框。,图7-21 添加了三个工具栏 按钮后的“ToolBarButton集 合编辑器”对话框,15单击“确定”按钮,关闭“ToolBarButton集合编辑器”对话框。设
28、计好的工具栏如图7-22所示。,图7-22 设计好了的工具栏,16在工具箱中找到状态栏图标“ ”,并为窗体添加 一个StatusBar控件(状态栏控件),控件名称为StatusBar1。 说明: 状态栏一般位于应用程序窗口的下面,用来显示程序的状态。,17选中StatusBar1控件,在“属性”窗口中选中Panel属性,单击其后的“”按钮,打开“StatusBarPanel集合编辑器”对话框,在该编辑器中通过单击“添加”按钮为StatusBar添加三个面板,如图7-23所示。注意可以在该窗口的右边设置每个面板的属性,如Name等。,图7-23 添加了三个Panel面板的“StatusBarPa
29、nel集合编辑器”对话框,18单击“确定”按钮返回程序设计界面,选中StatusBar控件,把它的ShowPanels属性值设置为True。设计好的状态栏如图7-24所示。,图7-24 设计好的状态栏,19由于要在状态栏的某一Panel中显示当前时间,为实现该功能可添加一个Timer控件,设置该控件的Interval属性值为500,Enabled属性值为True。,20在工具箱中找到丰富格式文本框图标“ ”,并为窗体添加一个 RichTextBox控件(丰富格式文本框控件),控件名称为RichTextBox1,控件 位置任意,在运行时由程序自动设置成充满除工具栏和状态栏外的所有窗体部 分。至此
30、界面设计基本完成,设计好的界面如图7-10所示(没有对话框控件)。,21为窗体添加两个模块级变量,代码如下。Dim Fname As String 存放正在编辑的文件名,如果新建的文件尚末保存,则值为空串Dim FExtName As String 扩展名 22编写一个名为“RichTextBoxResize”的通用过程,其作用是使丰富格式文本框充满除工具栏和状态栏外的所有空间。该过程在窗体加载时和改变大小时被调用。该过程使丰富格式文本框充满除工具栏和状态栏外的所有空间Private Sub RichTextBoxResize()设置丰富格式文本框的起始位置为工具栏下面的最左上角RichTex
31、tBox1.Top = ToolBar1.HeightRichTextBox1.Left = 0设置丰富格式文本框的宽度与窗体的用户区宽度一样RichTextBox1.Width = Me.ClientSize.Width设置丰富格式文本框的高度为窗体用户区高度减去工具栏的高及状态栏的高度RichTextBox1.Height = Me.ClientSize.Height - ToolBar1.Height StatusBar1.HeightEnd Sub,23在工具箱中找到“保存文件”对话框控件的图标“ ”,为窗体添加一个SaveFileDialog控件,该控件主要用来弹出Windows中标
32、准的“保存文件”对话框。,24编写一个名为“SaveAs”的通用过程, 代码如下。该过程弹出“另存为”对话框,供用户选择或输入要保存的文件名,并把RichTextBox1中的文本保存到 该文件中去Private Sub SaveAs()SaveFileDialog1.Filter = “文本文件(*.txt)|*.txt|RTF格式文件(*.RTF)|*.RTF“SaveFileDialog1.FilterIndex = 1 设置当前文件过程器SaveFileDialog1.Title = “保存文件“ 设置对话框的标题SaveFileDialog1.InitialDirectory = Ap
33、plication.StartupPath 初始目录设为启动路径SaveFileDialog1.RestoreDirectory = True 自动恢复初始目录SaveFileDialog1.ShowDialog() 弹出另存为对话框Fname = SaveFileDialog1.FileName 获取保存的文件名If (Fname “) Then 如果输入了文件名If (SaveFileDialog1.FilterIndex = 1) Then 如果是文本文件RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.PlainText) 文本文件F
34、ExtName = “txt“ElseRichTextBox1.SaveFile(Fname, RichTextBoxStreamType.RichText) RTF文件FExtName = “rtf“End IfMe.Text = Fname + “-简单文件编辑器“ 设置标题End IfRichTextBox1.Modified = False 保存后把RichtextBox1.Modified属性值变为FalseStatusBar1.Panels(1).Text = “已保存“End Sub,说明: (1)请读者参考语句后的说明,体会“另存为对话框”控件各属性的含义。 (2)该过程实现类
35、似于“另存为”菜单的功能。在保存文件且需要指定文件名的 情况下可调用该过程。 (3)本例调用了RichTextBox控件的SaveFile方法,使用了RichTextBox控件的 Modified属性。RichTextBox是一种既可以输入文本、又可以编辑文本的文字处理 控件,它在工具箱中的图标为“ ”。与TextBox控件相比,RichTextBox控 件的文字处理功能更加丰富,不仅可以设定文字的颜色、字体,还具有字符串检 索功能。另外,RichTextBox控件还可以打开、编辑和存储.rtf格式文件、ASCII文 本格式文件及Unicode编码格式的文件。下面详细介绍一下该控件的常用属性和
36、方 法。 RichTextBox控件的常用属性 前面介绍的TextBox控件所具有的属性,RichTextBox控件基本上都具有,除此之 外,该控件还具有一些其它属性。,RightMargin属性:用来设置或获取右侧空白的大小,单位是像素。通过该属性可以设置右侧空白,如希望右侧空白为50像素,可使用如下语句: RichTextBox1. RightMargin= RichTextBox1.Width-50; Rtf属性:该属性用来获取或设置 RichTextBox 控件中的文本,包括所有 RTF 格式代码。可以使用此属性将 RTF 格式文本放到控件中以进行显示,或提取控件中的RTF 格式文本。
37、此属性通常用于在RichTextBox控件和其它 RTF 源(如 Microsoft Word 或 Windows 写字板)之间交换信息。 SelectedRtf属性:该属性用来获取或设置控件中当前选定的 RTF 格式的格式文本。此属性使用户得以获取控件中的选定文本,包括 RTF 格式代码。 如果当前未选定任何文本,给该属性赋值,将把所赋的文本插入到插入点处。如果选定了文本,则给该属性所赋的文本值将替换掉选定文本。 SelectionColor属性:该属性用来获取或设置当前选定文本或插入点处的文本颜色。 SelectionFont属性:该属性用来获取或设置当前选定文本或插入点处文本的字体。,常
38、用方法 前面介绍的TextBox控件所具有的方法,RichTextBox控件基本上都具有,除此之外,该控件还具有一些其它方法。Redo方法该方法用来重做上次被撤消的操作。调用的一般格式如下:RichTextBox对象.Redo()该方法无参数。Find方法 该方法用来从RichTextBox控件中查找指定的字符串。经常使用的调用格式如下: 格式1:RichTextBox对象.Find(str) 功能:在指定的“RichTextBox”控件中查找文本,并返回搜索文本的第一个字符在控件内的位置。如果未找到搜索字符串或者str参数指定的搜索字符串为空,则 返回值为-1。,格式2:RichTextBo
39、x对象.Find(str, RichTextBoxFinds) 功能:在“RichTextBox对象”指定的文本框中搜索 str 参数中指定的文本,并返回文本的第一个字符在控件内的位置。如果返回负值,则未找到所搜索的文本字符串。还可以使用此方法搜索特定格式的文本。参数RichTextBoxFinds指定如何在控件中执行文本搜索,其取值及其含义如表7-7所示。,表7-7 RichTextBoxFinds参数的取值及含义,格式3:RichTextBox对象.Find(str, start,RichTextBoxFinds) 功能:此版本的 Find 方法与前面的格式2基本类似,不同的只是通过设置搜
40、索起始位置来缩小文本搜索范围,start参数表示开始搜索的位置。此功能使用户得以避开可能已搜索过的文本或已经知道不包含要搜索的特定文本的文本。如果在 options 参数中指定了 RichTextBoxFinds.Reverse 值,则 start 参数的值将指示反向搜索结束的位置,因为搜索是从文档底部开始的。,SaveFile方法 该方法用来把RichTextBox中的信息保存到指定的文件中,调用格式有以下三种: 格式1:RichTextBox对象名.SaveFile(文件名) 功能:将 RichTextBox控件中的内容保存为RTF 格式文件中。 格式2:RichTextBox对象名.Sa
41、veFile(文件名,文件类型) 功能:将 RichTextBox控件中的内容保存为“文件类型”指定的格式文件中。 格式3:RichTextBox对象名.SaveFile(数据流,数据流类型) 功能:将 RichTextBox控件中的内容保存为“数据流类型”指定的数据流类型文件中。 其中,文件类型或数据流类型的取值及含义如表7-8所示。,表7-8 文件类型或数据流类型的取值及含义,LoadFile方法 使用LoadFile方法可以将文本文件、RTF文件装入RichTextBox控件。主要的调用格式有以下三种。 格式1:RichTextBox对象名.LoadFile(文件名) 功能:将 RTF
42、格式文件或标准 ASCII 文本文件加载到 RichTextBox 控件中。 格式2:RichTextBox对象名.LoadFile(数据流,数据流类型) 功能:将现有数据流的内容加载到 RichTextBox 控件中。 格式3:RichTextBox对象名.LoadFile(文件名,文件类型) 功能:将特定类型的文件加载到 RichTextBox 控件中。 注意:文件类型和数据流格式见表7-8。,25编写一个名为“NotSaveProcess”的通用过程,代码如下。Private Sub NotSaveProcess() 没有保存处理If RichTextBox1.Modified Then
43、 如果RichTextBox1中的文本被修改,则提示是否保存If MsgBox(“尚未保存,是否保存?“, MsgBoxStyle.YesNo, “保存提示“) = _ MsgBoxResult.Yes Then需要保存处理If Fname = “ Then 如果文件名为空,文件尚未命名,则是第一次保存Call SaveAs() 调用SaveAs过程Else 文件已经命名,已经保存过If (FExtName = “txt“) Then 如果是文本文件文本文件保存RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.PlainText) ElseR
44、TF文件保存RichTextBox1.SaveFile(Fname, RichTextBoxStreamType.RichText) End IfEnd IfEnd IfEnd IfEnd Sub,说明: 该过程首行测试文件是否被修改过,如果已经修改则提示是否保存,再根据用户 的选择决定是否保存文件。为了防止对文件的修改丢失,可在“新建”、“打开” 、“退出”等菜单命令执行时选择调用本过程,测试正在处理的文件是否被修改, 如果被修改,让用户决定是否保存。 26编写一个名为“NewFile”的通用过程,代码如下。Private Sub NewFile()Call NotSaveProcess()
45、 调用过程NotSaveProcess实现没有保存处理Fname = “ 文件名为空FExtName = “txt“ 文件的扩展名为空RichTextBox1.Text = “ 清空RichTextBox1中显示的文本Me.Text = “新建-简单文件编辑器“ 设置标题RichTextBox1.Modified = FalseStatusBar1.Panels(1).Text = “已保存“End Sub 说明: 该过程在用户选择了“新建”菜单项,或单击了工具栏上的“新建”按钮时将被调用。,27在窗体的设计界面上,双击“文件&F”菜单中的“新建”菜单 项,在出现的代码窗体中,编写该菜单项的事
46、件过程代码,如下。“新建”菜单项Private Sub MenuItem1_1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MenuItem1_1.ClickCall NewFile() 调用NewFile过程End Sub 说明: 菜单项的常用事件主要有Click事件,该事件在用户单击菜单项时发生。 28运行程序,将会出现一个空白的输入区域,标题为“新建-简单文件 编辑器”。在空白输入区域中输入任意字符。选择“文件”菜单中的“新 建”菜单项,将会出现如图7-25所示的“保存提示”对话框。单击
47、“是” 按钮,将会出现如图7-26所示的“保存文件”对话框,该对话框是调用 SaveFileDialog1控件的ShowDialog方法弹出的。在该对话框中用户可 以选择或输入保存的文件类型、保存位置和保存的文件名。,图7-25 “保存提示”对话框,图7-26 “保存文件”对话框,29在工具箱中找到“打开文件”对话框控件(OpenFileDialog控件)图标 “ ”,并为窗体添加一个OpenFileDialog控件。,说明: OpenFileDialog控件又称“打开文件”对话框,主要用来弹出Windows中标准的打开文件对话框。,30编写一个名为“FileOpen”的通用过程,代码如下。P
48、rivate Sub FileOpen()Call NotSaveProcess() 调用过程NotSaveProcess实现没有保存的处理设置过滤器属性OpenFileDialog1.Filter = “文本文件(*.txt)|*.txt|RTF格式文件(*.RTF)|*.RTF“OpenFileDialog1.FilterIndex = 1 设置当前文件过滤器OpenFileDialog1.Title = “打开文件“ 设置对话框的标题OpenFileDialog1.InitialDirectory = Application.StartupPath 初始目录设为启动路径OpenFileD
49、ialog1.RestoreDirectory = True 自动恢复初始目录OpenFileDialog1.ShowDialog() 弹出打开文件对话框Fname = OpenFileDialog1.FileName 获取打开的文件名If (Fname “) Then 如果选择了文件If (OpenFileDialog1.FilterIndex = 1) Then 如果是文本文件RichTextBox1.LoadFile(Fname, RichTextBoxStreamType.PlainText) 文本文件FExtName = “txt“ElseRichTextBox1.LoadFile(Fname, RichTextBoxStreamType.RichText) RTF文件FExtName = “rtf“End IfEnd IfMe.Text = Fname + “-简单文件编辑器“ 设置标题RichTextBox1.Modified = False 文件刚打开时,把RichtextBox1.Modified属性值设为FalseStatusBar1.Panels(1).Text = “已保存“End Sub,