• 1.70 MB
  • 2022-04-22 11:35:47 发布

Visual Basic 2005程序设计 丁爱萍 人民邮电出版社 课后答案

  • 49页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《VisualBasic2005程序设计教程》习题解答习题11.VB2005集成开发环境有哪几个重要组成部分?答:VisualBasic把支持软件开发的各种功能集成在一个公共的工作环境中,称之为“集成开发环境(IDE)”,主要有以下几个部分组成:(1)菜单栏菜单栏中显示了“文件”、“编辑”、“视图”、“项目”、“格式”等菜单项,包含了VB编程的常用命令。单击菜单栏中的菜单名,即可弹出下拉菜单。在下拉菜单中显示各种功能子菜单,包含执行该项功能的快捷键。(2)工具栏菜单栏下面是工具栏。工具栏提供了许多常用命令的快速访问按钮,如图1-13所示。单击某个按钮,即可执行对应的操作。(3)窗体窗体是应用程序的用户界面,用户需在窗体中设计窗体的外观。在开发过程中,由用户在窗体上放置各种控件来为应用程序创建用户界面。应用程序运行时,用户能看到这个窗体。在系统默认情况下,系统会自动生成一个窗体,结构类似于在Windows系统下运行的窗体,操作也和Windows系统下运行的窗体类似。(4)工具箱工具箱中提供了各种可用控件和组件。默认情况下,工具箱中将控件和组件按不同的类型分为不同的组,通常分为所有Windows窗体、公共控件、容器、菜单和工具栏、数据、组件、打印、对话框、CrystalReports和常规组,如图1-15所示。用户可以根据需要在各组中选择控件和组件。(5)属性窗口“属性”窗口包含选定对象(窗体或控件)的属性列表。在设计程序时可通过修改对象的属性来设计外观和相关数据,这些属性值将是程序运行时各对象属性的初始值。2.在VB2005工具箱中有控件和组件,控件和组件的区别是什么?答:在.NETFramework中,控件是包含在窗体对象内的对象。每种类型的控件都具有其自己的属性集、方法和事件,以使该控件适合于特定用途。可以在设计器中操作控件,也可以编写代码以便在运行时动态操作控件。控件必须从以下基本控件类之一派生:System.Windows.Forms.Control和System.Web.UI.Control。在.NETFramework中,组件是指实现System.ComponentModel.IComponent接口的一个类,或从实现IComponent的类中直接或间接派生的类。在编程中,组件这个术语通常用于可重复使用并且可以和其他对象进行交互的对象。.NETFramework组件满足这些一般要求,另外还提供诸如控制外部资源和设计时支持等功能。可以在设计器中操作组件,也可以编写代码以便在运行时动态操作组件。组件和控件组件是两个不同的概念,虽然它们的使用类似。 3.建立一个VisualBasic2005应用程序一般需要哪些步骤?答:通常VB2005创建应用程序一般包括7个基本步骤。1)应用程序分析;2)创建应用程序用户界面;3)设置用户界面对象的属性;4)编写代码实现程序的功能;5)测试和调试应用程序;6)生成可执行并保存文件;7)创建应用程序的安装程序。4.在VB2005集成开发环境中向窗体添加控件后,怎样打开代码窗口添加或编辑控件代码?答:代码窗口是编写应用程序代码的地方。使用代码窗口,可以快速查看和编辑应用程序代码中的任何部分。有以下方法可以打开“代码窗口”:1)双击窗体的任何地方;2)右键单击,在快捷菜单中单击“查看代码”;3)单击“视图”菜单→“代码”命令。5.上机练习。在窗体中输出“大家好!”字样。答:窗体上通常是不能直接输出文本信息的,只能通过在窗体上的对象中输出文本信息,例如在标签上输出。设计步骤如下:1)建立应用程序界面和添加控件。在窗体上添加1个标签对象。设置如图1-1左图所示。2)编写窗体的Load事件代码:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadLabel1.Text="大家好!"EndSub3)运行程序,出现一个窗体。如图1右图所示。图1标签文本显示习题21.什么是对象的属性、方法、事件?它们有何区别。答:在可视化编程语言中,对象是代码和数据的集合,它可以是窗体和控件,也可以是菜单或数据库等。从可视化编程的角度来看,这些对象都具有属性(数据)和方法(行为方式)。简单地说,属性是用于描述对象的一组特征,方法是对象实施的一些动作,对象的动作则常常要触发事件,而触发事件又可以修改属性。一个对象建立以后,其操作就通过与该对象有关的属性、事件和方法来描述。 2.在VB2005中,系统定义了哪几种基本数据类型?答:VB2005定义的数据类型通常可以分为:数值数据类型、字符数据类型、布尔数据类型、日期数据类型、对象数据类型。3.下列不能作为VB2005变量名的是哪个?()(1)AB(2)AB78(3)78AB(4)ab答:(3)。4.下列数据中哪些是常量?哪些是变量?(1)MyNo(2)"MyNo"(3)True(4)"12/26/08"(5)name(6)"12.3"(7)#12/26/2008#(8)12.3答:常量有(2)、(3)、(4)、(6)、(7)、(8)。变量有(1)、(5)。5.在VB2005中,对于没有赋值的Integer型变量、Decimal型变量、Date型变量、String型变量、Boolean型变量、Object型变量,系统默认值分别是什么?答:在VB2005中,对于没有赋值的Integer型变量,系统默认值为0;Decimal型变量,系统默认值为0;Date型变量,系统默认值为0001-1-10:00:00;String型变量,系统默认值为空串;Boolean型变量,系统默认值为False;Object型变量,系统默认值为空。6.把下列数学表达式,改写为等价的VB2005数值表达式。22(1)x+2x+1(2)cos(2x)/xy1+x(3)(4)ssasbsc(-)(-)(-)y1-x答:1)x*x+2*x+12)Math.Cos(2*x)/(x*x)3)(1+y/x)/(1-y/x)4)Math.Sqrt(s*(s-a)*(s-b)*(s-c))7.写出下列表达式的值。(1)(2+8*3)/2(2)3^2+8(3)"abc"+"def"(4)"ZYX"&123&"ABC"(5)2/2*2/2(6)8Mod3+2^3/55(7)(2*5>9)OrTrue(8)Not(TrueAndFalse)答:(1)13(2)17(3)"abcdef"(4)"ZYX123ABC"(5)1(6)2(7)True(8)True8.写出下列函数的值。(1)Int(1.2)(2)Math.Sqrt(Math.Sqrt(256))(3)Lcase("Apple")(4)Str(−456.78)答:(1)1.2(2)4(3)"apple"(4)"-456.78"9.函数Int(Rnd(1)*10)是在哪个范围内的整数? 答:是(0,10)范围内的整数。10.如果x是一个正实数,对x的第3位小数四舍五入的表达式是()。(1)0.01*Int(x+0.005)(2)0.01*Int(100*(x+0.005))(3)0.01*Int(100*(x+0.05))(4)0.01*Int(x+0.05)答:(2)。习题31.程序设计有哪几个基本结构?答:程序设计有3种基本结构:顺序结构、选择结构和循环结构。2.什么是顺序结构?顺序结构有什么特点?答:顺序结构是一种线性结构,是程序设计中最简单、最常用的基本结构。它要求顺序地执行每一条语句,是任何从简单到复杂的程序主体的基本结构。3.实现数据输出的方法有哪些?答:在VB2005中,系统提供了多种方法可以实现数据输出。最常用的是使用Console控制台类在输出窗口中进行数据输出,另外,还可以使用控件或组件在窗体上实现数据输出。4.TextBox控件既可实现数据输入,也可实现数据输出。如果只想用TextBox控件实现数据输出,应该修改该控件的什么属性?答:应修改TextBox控件的ReadOnly属性,将其设置为True。5.为什么要在程序中使用注释?答:注释语句用来对程序代码进行说明,不参与程序的执行。在程序中使用注释,可以提高程序的可读性。6.从键盘输入三角形的两条边长和夹角,根据三角形面积公式求三角形的面积。答:已知三角形的两条边长和夹角,可以利用公式1Sa***sinb2求三角形的面积。设计步骤如下:1)建立应用程序用户界面和添加控件。设置如图2左所示。图2求三角形的面积2)编写事件代码。 "命令按钮“计算”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDima,b,x,sAsSinglea=CSng(TextBox1.Text)b=CSng(TextBox2.Text)x=CSng(TextBox3.Text)s=0.5*a*b*Math.Sin(x*3.14/180)"求三角形面积公式TextBox4.Text=CStr(s)EndSub3)运行程序,输入两边长和角度值后单击“计算”按钮,结果如图2右所示。7.从键盘输入角度值(度、分、秒),将角度换算为弧度值的形式,然后输出。答:将角度值换算为弧度值的形式,应先将角度值变为十进制。例如84度30分24秒,转换为十进制:24/3600=0.00666730/60=0.5十进制角度值=84+0.5+0.006667=84.50667,然后将十进制角度换算为弧度值:84.50667×π/180=1.474919573设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加文本框控件对象、组框控件、标签控件和命令按钮控件。设置如图3左所示。图3求弧度值2)编写事件代码。"命令按钮“计算”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimh,m,sAsIntegerDimx,yAsSingleh=CInt(TextBox1.Text)m=CInt(TextBox2.Text)s=CInt(TextBox3.Text)x=s/3600+m/60+h"转换成十进制角度y=x*3.14/180"转换成弧度值TextBox4.Text=CStr(y)EndSub3)运行程序,输入角度值后单击“计算”按钮,结果如图3右所示。8.向一个RC串联电路充电,电容上的电压为:tUU=×(1-eRC)0 其中,U0为直流电源的电压。求在t=1s时(R=500kΩ,C=10μf)U/U0的值。答:根据公式设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加1个掩码文本框控件对象。设置如图4左所示。图4求U/U02)编写事件代码。"命令按钮“计算”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimt,r,c,xAsSinglet=1r=500c=10x=1-Math.Exp(-t/r/c)TextBox1.Text=CStr(x)EndSub3)运行程序,输入工资数后单击“应付”按钮,结果如图4右所示。9.编程输出在指定范围内的3个随机数。答:生成随机数可以调用随机函数Rnd和Randomize的用法。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加2个掩码文本框控件对象,3个文本框对象。设置如图5左所示。图5生成随机数2)编写事件代码。"命令按钮“输出”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimlow,high,t,x,y,zAsIntegerlow=MaskedTextBox1.Text"随机数上限high=MaskedTextBox2.Text"随机数下限Iflow>highThent=lowlow=highhigh=tEndIf x=CInt(Int((high-low+1)*Rnd()+low))"第1个随机数y=CInt(Int((high-low+1)*Rnd()+low))"第2个随机数z=CInt(Int((high-low+1)*Rnd()+low))"第3个随机数TextBox3.Text=xTextBox4.Text=yTextBox5.Text=zEndSub3)运行程序,输入随机数上限和下限后单击“输出”按钮,结果如图5右所示。习题41.选择结构是解决什么现象的?该结构有什么特点?答:选择结构是用来解决分支现象的。其特点是:根据所给定的条件是否为真(即条件成立),来决定从各分支中执行某一分支的相应操作,并且任何情况下总有:“无论分支多寡,必择其一;纵然分支众多,仅选其一”的特性。2.在编写程序时,一般应遵循什么原则来验证用户的输入?答:一般应遵循以下原则来验证用户的输入:(1)要防止用户输入无效数据。例如,当要求用户输入成绩时,则只能输入数值型数据。(2)引导用户输入有效数据,从而避免用户输入错误次数过多而影响系统和用户的使用。例如,提示用户最多输入次数。(3)让用户输入数据时有一定的灵活性。例如,在多个输入控件中,输入的先后顺序不影响结果。(4)对某些特殊情况,需要特殊处理。例如,输入学生的出生日期,虽然输入的是日期型数据,但日期必须有一定的范围,不能是任意一个日期。3.什么是选择结构的嵌套?在嵌套时应遵循什么原则?答:选择结构的嵌套是指把一个选择结构放入另一个选择结构之内。例如,在If…Then语句中,语句块1或语句块2本身又是一个If…Then语句或者Select…Case语句,则称之为选择结构的嵌套。在嵌套时应注意语句的起始行不能相互交叉骑跨。4.计算水费时有4种情况:生活用水,每吨1元;农业用水,每吨1.5元;工业用水,每吨2元;娱乐业用水,每吨6元。请编制程序,由用户选择水费类型,程序根据用水吨数和水费类型计算应缴水费,如图6所示。图6计算水费答:由于水费标准分为多种情况,所以使用选择结构If…Then…ElseIf…EndIf语句。设计步骤如下: 1)建立应用程序用户界面和添加控件。在窗体上添加1个下拉列表框控件对象。设置如图7左所示。图7计算水费2)编写事件代码。"窗体的Load事件PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadComboBox1.Items.Add("生活用水(每吨元)")ComboBox1.Items.Add("农业用水(每吨.5元)")ComboBox1.Items.Add("工业用水(每吨元)")ComboBox1.Items.Add("娱乐业用水(每吨元)")EndSub"命令按钮“计算”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDima,bAsDecimala=CDec(TextBox1.Text)IfComboBox1.SelectedIndex=0Then"判断下拉列表框选择的序号b=a*1ElseIfComboBox1.SelectedIndex=1Thenb=a*1.5ElseIfComboBox1.SelectedIndex=2Thenb=a*2ElseIfComboBox1.SelectedIndex=3Thenb=a*6EndIfTextBox2.Text=bEndSub3)运行程序,选择水费类型并输入用水量后单击“计算”按钮,结果如图7右所示。5.设计一个日期时间显示程序。如图8所示,日期时间显示的格式由单选框和复选框选项确定。当选择复选框选项,显示日期、时间和星期。当选择单选框选项,设置时间显示格式。图8设置日期时间显示 答:设置日期时间显示格式,需要复选框控件和单选框控件。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加1个掩码文本框控件对象,3个复选框控件对象,2个单选框控件对象。设置如图9左所示。图9日期时间显示2)编写事件代码。"窗体的Load的事件PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadMaskedTextBox1.Text=Now"掩码文本框显示当前日期时间EndSub"复选框“日期”的CheckedChanged事件PrivateSubCheckBox1_CheckedChanged(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesCheckBox1.CheckedChangedLabel1.Text=Format(Today,"yyyy年MM月dd日")"格式化日期IfCheckBox1.Checked=TrueThen"判断复选框是否选中,控制标签显示Label1.Visible=TrueElseLabel1.Visible=FalseEndIfEndSub"复选框“时间”的CheckedChanged事件PrivateSubCheckBox2_CheckedChanged(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesCheckBox2.CheckedChangedLabel2.Text=TimeOfDay"输出时间IfCheckBox2.Checked=TrueThen"判断复选框是否选中,控制标签显示Label2.Visible=TrueElseLabel2.Visible=FalseEndIfEndSub"复选框“星期”的CheckedChanged事件PrivateSubCheckBox3_CheckedChanged(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesCheckBox3.CheckedChangedLabel3.Text=Format(Today,"dddd")"格式化星期IfCheckBox3.Checked=TrueThen"判断复选框是否选中,控制标签显示Label3.Visible=TrueElseLabel3.Visible=FalseEndIfEndSub"单选框“12小时制”的CheckedChanged事件PrivateSubRadioButton1_CheckedChanged(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesRadioButton1.CheckedChanged Label2.Text=Format(TimeOfDay,"hh:mm:sstt")"格式化时间EndSub"单选框“24小时制”的CheckedChanged事件PrivateSubRadioButton2_CheckedChanged(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesRadioButton2.CheckedChangedLabel2.Text=Format(TimeOfDay,"H:mm:ss")"格式化时间EndSub3)运行程序,输入工资数后单击“应付”按钮,结果如图9右所示。6.设计一个登录界面。如图10所示,要求输入用户名和密码,用户名和密码都不能为空,否则显示提示信息。密码用“*”隐藏。如果输入有错,提示出错信息。并限制最多只能输入三次;超过三次将退出程序。如果输入正确,则提示登录成功。图10应用程序界面答:使用If...Else...EndIf语句。根据用户输入的用户名和密码作为选择条件表达式,如果正确,执行Then语句块;如果错误,执行Else语句块。为了限制输入次数,设一个计数器i,用来记录输入次数。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加2个命令按钮对象,1个信息提示对象,1个错误提示组件对象,1个掩码文本框对象,3个标签对象,1个文本框对象。设置如图11左所示。图11应用程序界面2)设置各对象的属性。设置见表1。表1属性设置对象属性属性值说明Mask999999密码只能输入数字,最多输入6个数字MaskedTextBox1PasswordChar*设置密码以“*”显示Label3VisibleTrue隐藏提示标签3)编写事件代码。DimiAsInteger=1"登录次数计数器DimmyNameAsString="cheng""用户名DimmyPasswordAsString="12345""密码"命令按钮“登录”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_ HandlesButton1.ClickErrorProvider1.SetError(TextBox1,"")"初始化图标出现的位置和出错提示信息ErrorProvider1.SetError(MaskedTextBox1,"")"初始化图标出现的位置和出错提示信息"判断用户名和密码是否正确If(TextBox1.Text=myName)And(MaskedTextBox1.Text=myPassword)Then"显示正确信息Label3.Visible=TrueLabel3.Text="欢迎登录成功!"Label3.ForeColor=Color.GreenElse"判断用户名和密码是否为空IfTextBox1.Text=""ThenErrorProvider1.SetError(TextBox1,"必须输入姓名")"提示错误ElseIfMaskedTextBox1.Text=""ThenErrorProvider1.SetError(MaskedTextBox1,"必须输入密码")"提示错误EndIfEndIfIf(TextBox1.Text<>myName)Or(MaskedTextBox1.Text<>myPassword)ThenLabel3.ForeColor=Color.RedLabel3.Visible=TrueLabel3.Text="登录失败!"&"您还有"&CStr(3-i)&"次机会!"i=i+1"输入失败,登录计数器加1Ifi>3Then"如果计数器大于3,则退出程序Me.Close()EndIfEndIfEndSub"命令按钮“取消”的Click事件PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton2.ClickTextBox1.Text=""MaskedTextBox1.Text=""TextBox1.Focus()Label3.Visible=FalseEndSub4)运行程序,输入用户名和密码,用鼠标单击命令按钮,结果如图11右所示。习题51.什么是循环?什么是循环体?循环结构的特点是什么?答:循环是客观世界的一种普遍现象。程序设计中的循环结构(简称循环)是指在程序中,从某处开始有规律地反复执行某一操作块(或程序块)。被重复执行的该操作块(或程序块)称为循环体。循环结构的特点是:必须确保循环体的重复执行能被终止(即非无限循环)。2.在For循环中,如何计算循环体的执行次数?答:For循环的循环次数由初值、终值和步长3个因素决定。可以通过下式计算:循环次数=Int((终值-初值)/步长+1)如果计算出的循环次数小于或者等于0,循环次数为0,这时系统将不执行循环体。 3.VB2005中常用的循环语句有哪些?在编写循环结构程序时,如何选用循环语句?答:VB2005提供的实现循环结构的语句有:For...Next、While...EndWhile、Do...Loop等。通常,当知道循环的启始和终止时,使用For…Next循环语句比较方便。当不清楚循环的启始和终止,只知道循环的条件时,可以使用While循环语句和Do…Loop循环语句。4.在VB2005中,除了可以在代码窗口直接输入各种流程控制语句外,还可以通过什么方法来快速生成流程控制语句?答:可以通过下面的“插入代码段”来生成各种流程控制语句:(1)在代码编辑窗口中,单击鼠标右键,在快捷菜单中选择“插入代码段”选项,如图12所示。(2)在系统自动显示的下拉列表中,选择“通用代码模式”选项。(3)继续选择“条件语句和循环”选项,此时菜单选项会出现多种控制流程语句。图12“插入代码段”选项(4)选择其中需要的语句,如选择“For…Next语句”项,如图13所示,系统会自动插入相应的流程控制语句模块。其中,相关参数系统用绿色标识,提示程序员可以修改这些参数。图13选择语句(5)在流程语句模块中,输入相关代码即可。5.如图14所示,以“上三角”形式输出“九九乘法表”。图14乘法表答:设计步骤如下:1)建立应用程序用户界面和添加控件。 2)编写事件代码。"窗体的Load事件PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadDimi,jAsIntegerDimmystringAsString="""初始化乘法表字符串Fori=1To9"控制输出行数Forj=iTo9"控制每行输出表达式个数"每个表达式的输出形式Ifi*j>=10Thenmystring=mystring&Str(i)&"*"&Str(j)&"="&Str(i*j)&Space(1)Elsemystring=mystring&Str(i)&"*"&Str(j)&"="&Str(i*j)&Space(1)EndIfNextmystring=mystring&Chr(13)"每行输出结束,以回车换行符结束NextLabel1.Text=mystring"输出乘法表字符串EndSub3)运行程序,结果如图14所示。6.设计程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。答:使用For…Next循环语句的嵌套,来控制加数的个数以及每个加数的数字个数。变量n的值从键盘输入,n的值决定了表达式的“长度”。如果n为3,表达式为1+(1+2)+(1+2+3),长度为3;如果n为4,表达式为1+(1+2)+(1+2+3)+(1+2+3+4),长度围;…。设计步骤如下:1)建立应用程序用户界面和添加控件。2)编写事件代码。"命令按钮“计算”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimmyNumberAsDoubleDimi,j,k,sumAsIntegersum=0myNumber=CInt(TextBox1.Text)i=myNumberForj=1Toi"控制表达式个数Fork=1Toj"控制每个表达式数字个数sum=sum+kNextNextTextBox2.Text=CStr(sum)EndSub3)运行程序,输入n值后单击“计算”按钮,结果如图15所示。图15求s的值 7.编制程序,求出所有小于或等于500的自然数对。自然数对是指两个自然数的和与差都是平方数,如12与37的和12+37=49与其差37–12=25都是平方数,则12和37称为自然数对。答:使用For…Next循环语句的嵌套来检查500以内的所有自然数对。设计步骤如下:1)建立应用程序用户界面和添加控件。2)编写事件代码。"命令按钮“求500以内自然数对”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimk,m,n,s,dAsIntegerComboBox1.Items.Clear()Forn=1To500"循环500以内的所有自然数Form=1Ton"循环每一个数s=n+md=n-mIfMath.Sqrt(s)=Int(Math.Sqrt(s))AndMath.Sqrt(d)=Int(Math.Sqrt(d))ThenComboBox1.Items.Add(CStr(n)&Space(2)&CStr(m))EndIfNextNextEndSub3)运行程序,单击“求500以内自然数对”按钮,结果如图16所示。图16求自然数对8.“完备数”是指一个数恰好等于它的因子之和,如6的因子为1、2、3,而6=1+2+3,因而6就是完数。编制程序,找出1~1000之间的全部“完备数”,并将这些完备数显示在列表框中。答:判断一个数是否是“完备数”,首先要求出将该数的所有约数,然后将这些约数相加。如果和等于该数,则该数就是“完备数”。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加文本框控件对象、下拉列表控件对象、命令按钮控件对象。设置如图17左所示。图17完备数2)编写事件代码。"命令按钮“显示”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimi,j,sumAsInteger Fori=2To1000"循环1000以内的所有整数Forj=1ToInt(Math.Sqrt(i))+1"循环求每个整数的因数IfiModj=0Thensum=sum+j"求每个整数的因数和EndIfNextIfsum=iThen"判断因数与原数是否相等ListBox1.Items.Add(i)"如果相等则将其添加到下拉列表框中EndIfsum=0NextEndSub3)运行程序,单击“显示”按钮,结果如图17右所示。习题61.现有1个三维数组A(2,4,6),请问该数组包含多少个数组元素?答:包含3×5×7=105个数组元素。2.在VB2005中,可以改变已声明数组的维数吗?使用ReDim语句可以改变已声明数组的数据类型吗?答:VB2005规定不能改变已声明数组的维数。使用ReDim语句不可以改变已声明数组的数据类型,但可以通过ReDim语句改变已声明数组的大小,也就是为数组变量重新分配存储空间。3.求方阵的对角线元素之和。答:求方阵的两个对角线元素和,即求数组行、列下标值相等的元素值的和。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加控制面板控件对象。设置如图18左所示。图18方阵的两个对角线元素的和2)编写事件代码。DimmyArray(4,4)AsInteger"窗体的Load事件PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadDimi,jAsIntegerDimmyStringAsString=""Randomize()Fori=0To4Forj=0To4myArray(i,j)=Int(Rnd()*90)+10myString=myString&CStr(myArray(i,j))&"" NextmyString=myString&vbCrLfNextLabel1.Text=myStringEndSub"命令按钮“计算”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimi,j,sumAsIntegersum=0Fori=0To4Forj=0To4Ifi=jThensum=sum+myArray(i,j)EndIfNextNextTextBox1.Text=CStr(sum)EndSub3)运行程序,单击“计算”按钮,结果如图18右所示。4.矩阵的加法运算(提示:两个相同阶数的矩阵A和B相加,是将相应位置上的元素相加后放到同阶矩阵C的相应位置)。答:矩阵相加,即将两个维数相同的二维数组下标相同的元素相加,公式为:C(i,j)=A(i,j)+B(i,j)设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加列表控件对象、组框控件对象。设置如图19左所示。图19矩阵的加法2)编写事件代码。DimA(4,4)AsIntegerDimB(4,4)AsIntegerDimC(4,4)AsInteger"窗体的Load事件PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadDimi,jAsIntegerDimmyStringAsString=""Randomize()Fori=0To4Forj=0To4A(i,j)=Int(Rnd()*90)+10myString=myString&CStr(A(i,j))&""Next myString=myString&Chr(10)ListBox1.Items.Add(myString)myString=""NextmyString=""Fori=0To4Forj=0To4B(i,j)=Int(Rnd()*90)+10myString=myString&CStr(B(i,j))&""NextmyString=myString&Chr(10)ListBox2.Items.Add(myString)myString=""NextEndSub"命令按钮“=”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimi,jAsIntegerDimmyStringAsString=""Fori=0To4Forj=0To4C(i,j)=A(i,j)+B(i,j)myString=myString&CStr(C(i,j))&""NextmyString=myString&Chr(10)ListBox3.Items.Add(myString)myString=""NextEndSub3)运行程序,单击“=”按钮,结果如图19右所示。5.利用二维数组统计10个学生成绩,将成绩及格或不及格的学生姓名和分数显示出来。学生姓名和成绩从键盘输入。答:学生的信息由姓名和分数组成,所以使用二维数组存储。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加掩码文本框控件对象、列表框控件对象、下拉列表框控件对象。设置如图20左所示。图20统计学生成绩2)编写事件代码。Dimstudent(9,1)AsStringDimiAsInteger=0 "窗体的Load事件PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadComboBox1.Items.Add("及格")ComboBox1.Items.Add("不及格")EndSub"命令按钮“添加”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.Clickstudent(i,0)=MaskedTextBox1.Textstudent(i,1)=MaskedTextBox2.TextListBox1.Items.Add(student(i,0)&Space(2)&student(i,1))ListBox1.Refresh()i=i+1Ifi>9ThenButton1.Enabled=FalseEndIfEndSub"下拉列表框的SelectedIndexChanged事件PrivateSubComboBox1_SelectedIndexChanged(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesComboBox1.SelectedIndexChangedSelectCaseComboBox1.SelectedItemCaseIs="及格"ListBox2.Items.Clear()Fori=0To9Ifstudent(i,1)>=60ThenListBox2.Items.Add(student(i,0)&Space(2)&student(i,1))EndIfNextCaseIs="不及格"ListBox2.Items.Clear()Fori=0To9Ifstudent(i,1)<60ThenListBox2.Items.Add(student(i,0)&Space(2)&student(i,1))EndIfNextEndSelectEndSub3)运行程序,单击“添加”按钮,添加学生记录。选择显示类型,结果如图20右所示。6.现有一个商品清单,包括商品的名称和单价,让顾客选购。要求将商品信息存放到数组中,选择商品使用复选列表框。答:设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加复选列表框控件对象。设置如图21左所示。 图21购物清单2)编写事件代码。PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.Load"向CheckedListBox中添加数据CheckedListBox1.Items.Add("方便面1.5")CheckedListBox1.Items.Add("口香糖1.0")CheckedListBox1.Items.Add("火腿肠1.2")CheckedListBox1.Items.Add("优酸乳2.8")CheckedListBox1.Items.Add("可乐1.4")CheckedListBox1.Items.Add("瓜子3.0")CheckedListBox1.Items.Add("牙膏2.1")CheckedListBox1.Items.Add("洗衣粉5.8")EndSubPrivateSubMixedControls_Click(ByValsenderAsSystem.Object,ByValeAs_System.EventArgs)HandlesButton1.Click,Button2.Click,Button3.Click,Button4.ClickDimi,jAsIntegerSelectCaseDirectCast(sender,Button).NameCaseButton1.Name"命令按钮“>”的事件代码"判断CheckedListBox1中哪个选项被选中Fori=0ToCheckedListBox1.CheckedItems.Count-1IfCheckedListBox1.CheckedItems.Count<>0ThenForj=0ToCheckedListBox1.CheckedItems.Count-1"将CheckedListBox1中选中的选项添加到CheckedListBox2中CheckedListBox2.Items.Insert(j,CheckedListBox1.CheckedItems(i).ToString)"将CheckedListBox1中选中的选项删除CheckedListBox1.Items.RemoveAt(i)NextjEndIfNextiIfCheckedListBox1.Items.Count=0ThenButton1.Enabled=FalseButton2.Enabled=FalseEndIfButton3.Enabled=TrueButton4.Enabled=TrueCaseButton2.Name"命令按钮“>>”的事件代码"将CheckedListBox1中选中的所有选项添加到CheckedListBox2中Fori=0ToCheckedListBox1.Items.Count-1CheckedListBox2.Items.Add(CheckedListBox1.Items.Item(i))NextCheckedListBox1.Items.Clear()"清空CheckedListBox1中所有的选项Button1.Enabled=FalseButton2.Enabled=FalseButton3.Enabled=TrueButton4.Enabled=TrueCaseButton3.Name"命令按钮“<”的事件代码"判断CheckedListBox2中哪个选项被选中Fori=0ToCheckedListBox1.CheckedItems.Count-1IfCheckedListBox2.CheckedItems.Count<>0ThenForj=0ToCheckedListBox2.CheckedItems.Count-1"将CheckedListBox2中选中的选项添加到CheckedListBox1中 CheckedListBox1.Items.Insert(j,CheckedListBox2.CheckedItems(i).ToString)"将CheckedListBox2中选中的选项删除CheckedListBox2.Items.RemoveAt(i)NextjEndIfNextiIfCheckedListBox1.Items.Count=0ThenButton1.Enabled=FalseButton2.Enabled=FalseEndIfButton3.Enabled=TrueButton4.Enabled=TrueCaseButton4.Name"命令按钮“<<”的事件代码"将CheckedListBox1中选中的所有选项添加到CheckedListBox2中Fori=0ToCheckedListBox2.Items.Count-1CheckedListBox1.Items.Add(CheckedListBox2.Items.Item(i))NextCheckedListBox2.Items.Clear()"清空CheckedListBox1中所有的选项Button1.Enabled=TrueButton2.Enabled=TrueButton3.Enabled=FalseButton4.Enabled=FalseEndSelectEndSub3)运行程序,单击相应按钮,结果如图21右所示。7.设有10位学生3门课程的成绩,求各科成绩的平均值,以及每个学生的平均成绩和总成绩,各科不及格的学生姓名和人数。答:可以将学生的姓名存储在一个一维数组中,成绩存储在一个二维数组中,然后将学生的姓名显示在一个列表框中。当鼠标选中列表框的某一项时,调用列表框的SelectedIndexChanged事件,将相应的学生成绩显示在一系列的文本框中。再通过下拉列表框,处理学生成绩。设计步骤如下:1)建立应用程序用户界面和添加控件,并设置各对象的属性。设置如图22左所示。图22统计学生成绩2)编写事件代码。"在所有事件的前面声明数组DimStudent(9)AsStringDimStu_Score(9,2)AsDouble"窗体的Load事件PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadDimi,jAsInteger "给数组分别赋值Student(0)="张明":Stu_Score(0,0)=80:Stu_Score(0,1)=55:Stu_Score(0,2)=90Student(1)="李大生":Stu_Score(1,0)=85:Stu_Score(1,1)=80:Stu_Score(1,2)=86Student(2)="郭广民":Stu_Score(2,0)=70:Stu_Score(2,1)=65:Stu_Score(2,2)=73Student(3)="马英英":Stu_Score(3,0)=55:Stu_Score(3,1)=70:Stu_Score(3,2)=69Student(4)="赵阳":Stu_Score(4,0)=79:Stu_Score(4,1)=46:Stu_Score(4,2)=90Student(5)="杨大伟":Stu_Score(5,0)=78:Stu_Score(5,1)=89:Stu_Score(5,2)=82Student(6)="王东平":Stu_Score(6,0)=79:Stu_Score(6,1)=79:Stu_Score(6,2)=87Student(7)="刘小林":Stu_Score(7,0)=70:Stu_Score(7,1)=50:Stu_Score(7,2)=48Student(8)="姜珊珊":Stu_Score(8,0)=78:Stu_Score(8,1)=85:Stu_Score(8,2)=89Student(9)="吴林林":Stu_Score(9,0)=88:Stu_Score(9,1)=89:Stu_Score(9,2)=90"将学生数组添加到列表中Fori=0To9ListBox1.Items.Add(Student(i))Next"将课程信息添加到下拉列表中ComboBox1.Items.Add("大学英语")ComboBox1.Items.Add("离散数学")ComboBox1.Items.Add("数据结构")EndSub"下拉列表框的SelectedIndexChanged事件PrivateSubListBox1_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAs_System.EventArgs)HandlesListBox1.SelectedIndexChangedDimi,jAsIntegerDimsum,avgAsSingleFori=0To9"循环判断每个列表框选项个成绩数组IfListBox1.GetSelected(i)=TrueThen"判断列表框中哪个选项被选中TextBox1.Text=Stu_Score(i,0)"大学英语成绩TextBox2.Text=Stu_Score(i,1)"离散数学成绩TextBox3.Text=Stu_Score(i,2)"数据结构成绩sum=Stu_Score(i,0)+Stu_Score(i,1)+Stu_Score(i,2)"计算总分TextBox5.Text=sumavg=sum/3"计算平均分TextBox4.Text=Math.Round(avg,1)"平均分只保留1位小数ExitFor"计算结束,退出For…Next循环EndIfNextEndSub"命令按钮“统计”的Click事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimCourse,NameAsStringDimiAsIntegerCourse=ComboBox1.TextSelectCaseCourse"判断下拉列表框选中哪门课程CaseIs="大学英语""如果是大学英语Fori=0To9"循环判断成绩IfStu_Score(i,0)<60Then"如果不及格Name=Name&Student(i)&"""挑出不及格学生姓名EndIfNextCaseIs="离散数学""如果是离散数学Fori=0To9 IfStu_Score(i,1)<60ThenName=Name&Student(i)&""EndIfNextCaseIs="数据结构""如果是数据结构Fori=0To9IfStu_Score(i,2)<60ThenName=Name&Student(i)&""EndIfNextEndSelectTextBox6.Text=Name"显示不及格学生姓名EndSub3)运行程序,单击按钮,运行结果如图22右所示。8.设计一个简单的计算器,如图23所示。图23计算器答:实现两个数简单的加、减功能,并且能够进行重新运算功能。在窗体上添加1个下拉菜单、1个文本框控件对象和15个按钮控件对象。设计步骤如下:1)设计应用程序界面和添加控件,并设置各对象的属性。如图24所示。图24计算器2)编写一个事件过程来处理15个Button按钮控件的Click事件:"窗体上MenuStrip1的TabIndex为0;TextBox1的TabIndex为1;"15个Button的TabIndex为2~16;PrivateSubMixedControls_Click(ByValsenderAsSystem.Object,_ByValeAsSystem.EventArgs)HandlesButton1.Click,Button2.Click,_Button3.Click,Button4.Click,Button5.Click,Button6.Click,_Button7.Click,Button8.Click,Button9.Click,Button10.Click,_Button11.Click,Button12.Click,Button13.Click,Button14.Click,_Button15.Click"num代表当前输入的数"sum代表当前的结果"flag的取值中,0代表空,1代表+,2代表-,3代表= "sflag的取值中,0代表继续输入数,1代表结束连续输入数Staticnum,sum,flag,sflagAsInteger"以TabIndex区分对象"以对象的TabIndex属性来区分命令按钮对象SelectCasesender.TabIndex"判断TabIndex序号Case2"如果是数字1Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(1)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(1)num=1EndIfsflag=0Case3"如果是数字2Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(2)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(2)num=2EndIfsflag=0Case4"如果是数字3Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(3)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(3)num=3EndIfsflag=0Case5"如果是数字4Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(4)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(4)num=4EndIfsflag=0Case6"如果是数字5Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(5)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(5)num=5EndIfsflag=0Case7"如果是数字6Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(6) num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(6)num=6EndIfsflag=0Case8"如果是数字7Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(7)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(7)num=7EndIfsflag=0Case9"如果是数字8Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(8)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(8)num=8EndIfsflag=0Case10"如果是数字9Ifsflag=0ThenTextBox1.Text=TextBox1.Text&CStr(9)num=CInt(TextBox1.Text)ElseTextBox1.Text=CStr(9)num=9EndIfsflag=0Case11"如果是运算符+Ifflag=2Thensum=sum-numTextBox1.Text=CStr(sum)ElseIfflag=1Thensum=sum+numTextBox1.Text=CStr(sum)ElseIfflag=0ThenTextBox1.Text=CStr(num)sum=numElseTextBox1.Text=CStr(sum)EndIfflag=1sflag=1Case12"如果是运算符-Ifflag=1Thensum=sum+numTextBox1.Text=CStr(sum)ElseIfflag=2Then sum=sum-numTextBox1.Text=CStr(sum)ElseIfflag=0ThenTextBox1.Text=numsum=numElseTextBox1.Text=CStr(sum)EndIfflag=2sflag=1Case13"如果是运算符=Ifflag=1Thensum=sum+numTextBox1.Text=CStr(sum)Elsesum=sum-numTextBox1.Text=CStr(sum)EndIfflag=3sflag=1Case14"如果是控制键Cnum=0Case15"如果是控制键CNsum=0num=0flag=0sflag=0TextBox1.Text=""Case16"如果是控制键OffEndEndSelectEndSub3)运行程序,可以进行算术运算。习题71.VB2005中的过程分为哪几种?答:在VB2005中,有六种类型的过程:Sub过程、事件处理过程、Function函数过程、Property过程、运算符过程和泛型过程。2.Sub过程和Function过程有什么区别?答:Sub过程和Function函数过程一样,都是一个独立的过程,可读取参数、执行一系列语句。与Sub过程不同的是,Function函数过程可返回一个值到调用的过程,而Sub过程没有返回值。3.在VB2005的过程中,传递参数的方式有哪两种?它们的区别是什么?答:在VB2005中,参数传递的方式有两种。一是传值,即将实参的值传递给形参。定义过程时,在形式参数前加ByVal,是VB2005中参数的默认传递方式。二是传地址,即将实参的引用(存放实参的内存地址)传递给形参。定义过程时,在形式参数前加ByRef。 4.编制随机整数Function函数过程,输出30个1~100之内的随机数。答:将生成随机数的操作定义为1个函数过程,随机数个数作为参数输入。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加1个列表框控件对象。设置如图25左所示。图25随机整数Function过程2)编写事件代码。FunctionRand(ByValiAsInteger)AsIntegerDimm,nAsIntegerRandomize()Form=1Toin=CInt(Int((9999-1000+1)*Rnd()+1000))ListBox1.Items.Add(CStr(n))NextEndFunctionPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimiAsIntegeri=CInt(TextBox1.Text)Rand(i)EndSub3)运行程序,输入随机数个数后单击“生成”按钮,结果如图25右所示。5.写两个函数,分别求两个数的最大公约数和最小公倍数。答:设计步骤如下:1)建立应用程序用户界面和添加控件。设置如图26左所示。图26求两个数的最大公约数和最小公倍数2)编写事件代码。PublicFunctiongy(ByValnAsInteger,ByValmAsInteger)AsIntegerDimMax,intModAsIntegerIfn*m=0ThenExitFunctionEndIfIfn0ReturnnEndFunctionPublicFunctiongb(ByValnAsInteger,ByValmAsInteger)AsIntegerDimresultAsIntegerresult=(n*m)/gy(n,m)ReturnresultEndFunctionPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimNum1,Num2AsIntegerNum1=CInt(TextBox1.Text)Num2=CInt(TextBox2.Text)TextBox3.Text=gy(Num1,Num2)TextBox4.Text=gb(Num1,Num2)EndSub3)运行程序,输入两个数后单击“计算”按钮,结果如图26右所示。6.编写判断是否同时被17与37整除的Function函数过程。输出1000~10000之间所有能同时被17与37整除的数。答:将计算1000~9000之间所有能同时被17与37整除的数的操作定义为1个函数过程。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加1个列表框控件对象。设置如图27左所示。图27输出1000~9000之间所有能同时被17与37整除的数2)编写事件代码。Functionflag(ByValxAsInteger)AsBooleanIf(xMod17=0)And(xMod37=0)Thenflag=TrueElseflag=FalseEndIfEndFunctionPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimiAsIntegerDimbAsBooleanFori=1000To10000b=flag(i)Ifb=TrueThenListBox1.Items.Add(i) EndIfNextEndSub3)运行程序,单击“计算”按钮,结果如图27右所示。7.编写一个过程,获取用户输入的字符串数据,计算该字符串中共有多少个字母、数字及其他字符。答:将计算该字符串的操作定义为一个过程。设计步骤如下:1)建立应用程序用户界面和添加控件。设置如图28左所示。图28计算该字符串2)编写事件代码。PublicSubcount()DimchSubAsCharDimstrInAsStringDimiAsIntegerDimdx,xx,sz,qtAsIntegerstrIn=TextBox1.TextFori=0TostrIn.Length-1chSub=strIn.Chars(i)SelectCasechSubCase"A"To"Z"dx=dx+1Case"a"To"z"xx=xx+1Case"1"To"9"sz=sz+1CaseElseqt=qt+1EndSelectNextTextBox2.Text=dxTextBox3.Text=xxTextBox4.Text=szTextBox5.Text=qtEndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.Clickcount()EndSub3)运行程序,输入字符串后单击“统计”按钮,结果如图28右所示。8.利用数字上下调节器控件调整图片的大小。当光标在图片上移动时,显示为沙漏型。 答:利用数字上下调节器控件调整图片的大小,数字上下调节器的调节范围从0到10,10表示初始大小,数字越小图片越小。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加1个数字上下调节器控件对象,1个图片框控件对象。设置如图29左所示。图29调整图片的大小2)编写事件代码。Dimh,wAsIntegerPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.Loadh=PictureBox1.Heightw=PictureBox1.WidthEndSubPrivateSubNumericUpDown1_ValueChanged(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesNumericUpDown1.ValueChangedPictureBox1.Height=h*NumericUpDown1.Value*0.1PictureBox1.Width=w*NumericUpDown1.Value*0.1EndSubPrivateSubPictureBox1_MouseMove(ByValsenderAsObject,ByVale_AsSystem.Windows.Forms.MouseEventArgs)HandlesPictureBox1.MouseMoveMe.Cursor=Cursors.WaitCursorEndSub3)运行程序,调节数字上下调节器,结果如图29右所示。9.编写程序解决汉诺塔问题。有3根针A、B、C。A针上有N个盘子,大的在下,小的在上,要求把这N个盘子从A针移到C针,在移动过程中可以借助B针。每次只允许移动一个盘,且在移动过程中在3根针上都保持大盘在下,小盘在上。答:将n个盘子从A针移到C针可以分解为下面3个步骤:1)将A上n-1个盘子移到B针上(借助C针);2)把A针上剩下的一个盘子移到C针上;3)将n-1个盘子从B针移到C针上(借助A针);事实上,上面3个步骤包含两种操作:1)将多个盘子从一个针移到另一个针上,这是一个递归的过程。hanoi函数实现。2)将1个盘子从一个针上移到另一针上。用move函数实现。设计步骤如下:1)创建应用程序用户界面,并设置各对象的属性。设置如图30左所示。 图30应用程序界面2)编写代码。"hanoi递归函数代码Submoves(ByValgetoneAsString,ByValputoneAsString)ListBox1.Items.Add(getone&"--->"&putone)EndSubSubhanoi(ByValnAsInteger,ByValoneAsString,ByValtwoAsString,ByValthreeAsString)Ifn=1Thenmoves(one,three)Elsehanoi(n-1,one,three,two)moves(one,three)hanoi(n-1,two,one,three)EndIfEndSub"命令按钮“开始”的Click事件代码PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimnumAsIntegernum=CInt(TextBox1.Text)hanoi(num,"A","B","C")EndSub3)运行程序,输入盘子的个数后,单击“开始”。按钮,结果如图30右所示。习题81.在VB2005中,下拉菜单和快捷菜单是一个控件吗?如何设置下拉菜单和快捷菜单?答:在VB2005中,下拉菜单和快捷菜单都是控件。创建下拉菜单的操作步骤如下:(1)从工具箱中选取MenuStrip控件,将其添加到窗体上。此时,窗体下方的面板中出现一个名为MenuStrip1的对象。(2)单击“在此处键入”文本,然后输入一个有意义的菜单名称(如“文件”),输入的名称显示在菜单项的Text属性栏中。在默认状态下,最上面一层菜单是菜单标题。(3)继续单击其他的“在此处键入”区域输入菜单项。如果单击当前菜单项的右侧,即可为该菜单项添加子菜单,但不能向菜单标题项添加子菜单;如果单击当前菜单项的下侧,即可在当前菜单项中添加另一菜单项。各菜单项的名字,系统默认为是输入信息与ToolStripMenuItem的组合,例如FileToolStripMenuItem。(4)创建完菜单结构后,即可为各菜单项添加功能。双击需要添加功能的菜单项,进入其Click事件代码编辑窗口,编写程序代码即可。创建快捷菜单的步骤如下: (1)在工具箱中,单击ContextMenuStrip控件,将其添加到窗体上。此时在窗体下方出现一个名为ContextMenuStrip1的对象,并打开快捷菜单设计器。(2)单击“请在此处键入”文本,输入一个有意义的菜单名称。此时输入的名称显示在菜单项的Text属性栏中。(3)依次在菜单设计器中创建各菜单项和子菜单。各菜单项的名字默认为输入信息与ToolStripMenuItem1的组合,例如FontToolStripMenuItem1。(4)创建完菜单结构后,即可为各菜单项添加功能。双击需要添加功能的菜单项,进入其Click事件代码编辑窗口,编写程序代码。2.状态栏的作用是什么?默认情况下状态栏有没有面板?有哪几种方法可以将面板添加到状态栏?答:状态栏一般位于窗体的底部,常用来显示窗体中一些有用的信息(如当前打开文件的名称、当前日期等)。默认情况下,状态栏没有面板。有两种方法可以将面板添加到状态栏:(1)在程序代码中,使用ToolStripItemCollection.AddRange方法;(2)在设计窗口中,使用StatusStrip“项集合编辑器”,在设计时添加、移除或重新排序项并修改属性。3.默认情况下,工具栏中的对象具有功能提示属性吗?答:默认情况下,工具栏中的对象都有ToolTipText属性,即具有功能提示属性。4.计时器组件的作用是什么?其常用的属性和方法有哪些?答:计时器组件Timer可以控制程序的执行,在应用中以设定的时间间隔引发同一个事件。计时器组件的常用属性有Enabled、Interval属性,常用方法是Start和Stop方法。5.通告图标控件的作用是什么?其常用的属性是什么?答:通告图标控件NotifyIcon也称系统托盘控件,其作用是当应用程序运行时,在Windows任务栏的系统托盘中出现一个图标,用户可以通过该图标的快捷菜单操作该程序。其常用属性有ContextMenuStrip、Icon和Text属性。6.设计一个文本编辑器,能够编辑两个文本框中的文本信息,包括复制、剪切、粘贴、查找、替换。要求程序具下拉菜单、快捷菜单、状态栏和工具栏,并能通过相关控件编辑文本信息。答:为了实现类似于文本编辑器的功能,需要使用下拉菜单控件、快捷菜单控件、工具栏控件、图像列表组件。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加1个下拉菜单控件对象,1个快捷菜单控件对象,1个工具栏控件对象,1个图像列表组件。设置如图31左所示。 图31类似于文本编辑器2)编写事件代码。PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadToolStripButton1.Image=ImageList1.Images(0)ToolStripButton2.Image=ImageList1.Images(1)ToolStripButton3.Image=ImageList1.Images(2)ToolStripComboBox1.Items.Add("宋体")ToolStripComboBox1.Items.Add("楷体")ToolStripComboBox1.Items.Add("黑体")ToolStripComboBox1.Items.Add("魏碑")EndSubPrivateSubCopyToolStripMenuItem1_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesCopyToolStripMenuItem1.ClickRichTextBox1.Copy()EndSubPrivateSubCutToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesCutToolStripMenuItem.ClickRichTextBox1.Cut()EndSubPrivateSubPasteToolStripMenuItem1_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesPasteToolStripMenuItem1.ClickRichTextBox1.Paste()EndSubPrivateSubToolStripComboBox1_SelectedIndexChanged(ByValsenderAsObject,ByValeAs_System.EventArgs)HandlesToolStripComboBox1.SelectedIndexChangedDimztAsStringzt=ToolStripComboBox1.TextRichTextBox1.Font=NewFont(zt,15)RichTextBox2.Font=NewFont(zt,15)EndSubPrivateSubRichTextBox1_GotFocus(ByValsenderAsObject,ByValeAsSystem.EventArgs)_HandlesRichTextBox1.GotFocusRichTextBox1.ContextMenuStrip=ContextMenuStrip1EndSubPrivateSubRichTextBox2_GotFocus(ByValsenderAsObject,ByValeAsSystem.EventArgs)_HandlesRichTextBox2.GotFocusRichTextBox2.ContextMenuStrip=ContextMenuStrip1EndSub3)运行程序,可以实现类似于简单文本编辑器的操作,结果如图31右所示。习题91.简述类与对象的关系。答:对象是客观世界中的事物或人们头脑中的各种概念在计算机程序中的抽象表示,既是现实世界中个体的数据抽象模型,又是面向对象程序设计的基本元素。类是对具有相同属性和相同行为的一组相似对象的集合。类是用来创建对象的模板,它为属于该类的全部对象提供了统一的抽象描述,其内部包含状态描述和方法定义,而对象只是类的一个具体实例。“类”看作某种事物的抽象表示,而把“对象”看作该事物的可用实例,每个实例都是其类的一个 精确而又不同的副本。2.SubNew和SubFinalize有什么作用?答:VB2005中所有的类都有一个默认的构造函数,即SubNew()过程,这个New方法在创建对象时自动调用。每次创建一个类的实例的时候,New方法就会执行一次。所以,可以在构造函数过程里编写代码来控制创建对象时发生的事情,例如跟踪当前有多少个该类对象生成。VB2005使用名为“析构函数”的过程,即调用SubFinalize过程控制系统资源的释放。在释放对象之前,CLR会为定义SubFinalize()过程的对象自动调用Finalize方法。Finalize方法可以包含刚好在对象销毁前需要执行的代码(如用于关闭打开的文件和保存状态信息的代码)。执行SubFinalize会有轻微的性能降低,所以应当在需要显式释放对象时才定义SubFinalize方法。3.对于成员变量,主要通过哪几个关键字来控制变量的作用域?答:成员变量主要通过以下几个关键字来控制变量的作用域:(1)Private:仅适用于声明它的类中的代码。(2)Friend:仅适用于声明它的工程和组件中的代码。(3)Protected:仅适用于继承于类的子类。(4)Public:适用于类外的代码,具有最大的开放性。4.在VB2005中,什么是类的继承?什么是类的多态性?答:在VB2005中,继承是指一个派生类只能从一个基类中继承,即一个派生类只能有一个基类,但是基类可以有多个派生类。派生类可以从它的基类中继承成员:属性、方法和事件。多态性是指当两个或两个以上的类具有相似的属性或方法时,编译程序能自动根据这些属性和方法找到相应的对象。多态性常与继承有关,即多态性常常伴随着类的继承及重载。此外,多态性还可以存在于独立的类中,即不相干的类之间也可以利用多态性来实现对一些接口的共享。5.为某公司创建一个类来建立员工的人事记录:包括员工的姓名、性别、工资、到公司的日期、部门以及联系方式等信息。创建该类,并做出简单测试。答:将员工的人事记录定义为一个类。设计步骤如下:1)编写事件代码。"定义类PublicClassemployeePublicNameAsStringPublicSexAsStringPublicSalaryAsDoublePublicEntranceDateAsDatePublicDepartmentAsStringPublicPhoneAsLongEndClassPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadDimNewEmployeeAsNewemployeeNewEmployee.Name="刘飞"NewEmployee.Sex="男"NewEmployee.Salary=5000.0NewEmployee.EntranceDate=#10/5/2005#NewEmployee.Department="财务科" NewEmployee.Phone="123456789"Dimtxt1AsNewTextBoxtxt1.Text=NewEmployee.Nametxt1.Location=NewPoint(120,10)Me.Controls.Add(txt1)Dimtxt2AsNewTextBoxtxt2.Text=NewEmployee.Sextxt2.Location=NewPoint(120,50)Me.Controls.Add(txt2)Dimtxt3AsNewTextBoxtxt3.Text=NewEmployee.Salarytxt3.Location=NewPoint(120,90)Me.Controls.Add(txt3)Dimtxt4AsNewTextBoxtxt4.Text=NewEmployee.EntranceDatetxt4.Location=NewPoint(120,130)Me.Controls.Add(txt4)Dimtxt5AsNewTextBoxtxt5.Text=NewEmployee.Department图32显示职工信息txt5.Location=NewPoint(120,170)Me.Controls.Add(txt5)Dimtxt6AsNewTextBoxtxt6.Text=NewEmployee.Phonetxt6.Location=NewPoint(120,210)Me.Controls.Add(txt6)EndSub2)运行程序,如图32所示。6.编写两个分数相加的程序,并将它们的和以简化的分数形式表现出来。程序使用类Fraction来存放分数的分子和分母,具有简化结果的方法Reduce。答:将两个分数定义为一个类,编写代码。"定义类PublicClassFractionPrivatemyfzAsIntegerPrivatemyfmAsIntegerPropertyfz()AsIntegerGetReturnmyfzEndGetSet(ByValvalueAsInteger)myfz=valueEndSetEndPropertyPropertyfm()AsIntegerGetReturnmyfmEndGetSet(ByValvalueAsInteger)myfm=valueEndSetEndPropertyPrivateFunctiongy(ByValnAsInteger,ByValmAsInteger)AsInteger DimintMax,intModAsIntegerIfn*m=0ThenMsgBox("两个数不能为0")ExitFunctionEndIfIfn0ReturnnEndFunctionPublicSubreduce()DimintMax,intMod,n,mAsIntegern=myfzm=myfmIfn0myfz=myfz/nmyfm=myfm/nEndSubEndClass7.为上一题的Fraction类添加Zero事件,无论什么时候,只要分母为0,该事件即被触发,并写一个程序来使用该事件。答:在Fraction.vb文件中改编Fraction类代码:PublicClassFractionPrivatemyfzAsIntegerPrivatemyfmAsIntegerPublicEventZero(ByValmsgAsString)Propertyfz()AsIntegerGetReturnmyfzEndGetSet(ByValvalueAsInteger)myfz=valueEndSetEndPropertyPropertyfm()AsIntegerGetReturnmyfmEndGetSet(ByValvalueAsInteger)Ifvalue=0ThenRaiseEventZero("分母不能为0!") Elsemyfm=valueEndIfEndSetEndPropertyPublicSubreduce()DimintMax,intMod,n,mAsIntegerIfmyfm=0ThenRaiseEventZero("分母不能为0!")Elsen=myfzm=myfmIfn0myfz=myfz/nmyfm=myfm/nEndIfEndSubEndClassDimWithEventsnumAsNewFractionPrivateSubnum_Zero(ByValmsgAsString)Handlesnum.ZeroMsgBox(msg)EndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimm,nAsIntegerm=CInt(TextBox1.Text)n=CInt(TextBox2.Text)num.fm=nnum.fz=mTextBox3.Text=num.fz&"/"&num.fmnum.reduce()TextBox4.Text=num.fz&"/"&num.fmEndSub习题101.VB2005的Windows标准窗体分为哪几个部分?答:Windows标准窗体可以分为两部分:标题栏和窗体主工作区。2.窗体可以使用自己的窗体名来操作吗?如果不允许,应该使用什么?答:窗体不可以使用自己的窗体名来操作,只能使用Me方法。3.在Windows应用程序中,窗体界面可以分为哪3种类型?答:在Windows应用程序中,窗体界面可以分为3种类型:单文档界面、多文档界面、和资源管理 器样式界面。4.窗体能像其它对象那样继承吗?继承与复制一样吗?答:窗体本质上是窗体类,所有的窗体都是依赖于System.Windows.Forms.Form类来确定其定义和初始值的。窗体可以象其它对象一样继承。继承与复制本质上不一样。继承是继承一个类的对象全部,复制是一个具体对象的另一个副本。5.如何将一个普通的SDI窗体设置为MDI窗体?答:只要将普通的SDI窗体的IsMdiContainer属性设置为True,任何窗体都可以成为MDI窗体中的主窗体。6.利用SDI窗体常用的属性、方法和事件,设计一个应用程序。该程序有两个SDI窗体。在一个窗体上有一个标签,可以在窗体上下和左右移动。通过另一个窗体来控制标签的移动。当单击或双击标签所在窗体,标签将改变颜色。答:标签的移动其实就是标签的位置的改变,即Left、Top、Height属性值的连续改变。但标签不能移出窗体的边界,即窗体的Size属性决定了标签的移动范围。设计步骤如下:1)建立应用程序界面和添加控件。建立应用程序界面和添加控件。向控制窗体窗体添加4个命令按钮,4个微调器,并调整各个对象的位置、大小及显示信息。如图33所示。向移动窗体窗体添加1个标签,并调整标签对象的位置、大小及显示信息。如图34所示。图33控制窗体图34移动窗体2)编写事件代码:编写Form1窗体(即控制窗体)事件代码:PublicClassForm1PrivateSubUpBtn_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesUpBtn.ClickUpTimer.Enabled=TrueLeftTimer.Enabled=FalseRightTimer.Enabled=FalseDownTimer.Enabled=FalseEndSubPrivateSubLeftBtn_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesLeftBtn.ClickUpTimer.Enabled=FalseLeftTimer.Enabled=TrueRightTimer.Enabled=FalseDownTimer.Enabled=FalseEndSubPrivateSubDownBtn_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesDownBtn.ClickUpTimer.Enabled=FalseLeftTimer.Enabled=False RightTimer.Enabled=FalseDownTimer.Enabled=TrueEndSubPrivateSubRightBtn_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesRightBtn.ClickUpTimer.Enabled=FalseLeftTimer.Enabled=FalseRightTimer.Enabled=TrueDownTimer.Enabled=FalseEndSubPrivateSubUpTimer_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesUpTimer.TickIfForm2.Label1.Top<>0ThenForm2.Label1.Top=Form2.Label1.Top-1ElseUpTimer.Enabled=FalseEndIfEndSubPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadForm2.Show()EndSubPrivateSubLeftTimer_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesLeftTimer.TickIfForm2.Label1.Left<>0ThenForm2.Label1.Left=Form2.Label1.Left-1ElseLeftTimer.Enabled=FalseEndIfEndSubPrivateSubRightTimer_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesRightTimer.TickIfForm2.Label1.Left<>Form2.Width-Form2.Label1.WidthThenForm2.Label1.Left=Form2.Label1.Left+1ElseRightTimer.Enabled=FalseEndIfEndSubPrivateSubDownTimer_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesDownTimer.TickIfForm2.Label1.Top<>Form2.Height-3*Form2.Label1.HeightThenForm2.Label1.Top=Form2.Label1.Top+1ElseDownTimer.Enabled=FalseEndIfEndSubEndClass编写Form2(即移动窗体)事件代码:PublicClassForm2PrivateSubForm2_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)_HandlesMe.ClickLabel1.ForeColor=Color.BlueEndSub PrivateSubForm2_DoubleClick(ByValsenderAsObject,ByValeAsSystem.EventArgs)_HandlesMe.DoubleClickLabel1.ForeColor=Color.RedEndSubEndClass3)运行程序,当单击控制按钮,标签按指定方向移动。7.编写一个类似于聊天工具的应用程序。程序中有两个窗体,它们之间是平等的,相当于两个聊天的人。通过操作,实现两个窗体之间(即两个人之间)传递信息,即聊天。答:由于这个应用程序需要两个窗体,必须添加窗体,而且两个窗体都是SDI窗体。设计步骤如下:1)建立应用程序界面和添加控件,并设置各对象的属性。如图35所示。2)编写事件代码。"窗体1的事件代码PublicClassForm1PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadForm2.Show()EndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.Clicktxt1=TextBox1.TextForm2.RichTextBox1.Text=Form2.RichTextBox1.Text&TextBox1.Text&Chr(10)EndSubEndClass"窗体2的事件代码PublicClassForm2PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickForm1.RichTextBox1.Text=Form1.RichTextBox1.Text&Chr(10)&TextBox1.TextEndSubEndClass3)运行程序,如图35所示。图35聊天窗体8.设计一个简易的世界各国地图浏览系统。答:这个应用程序需要收集世界各国的地图。设计步骤如下:1)建立应用程序界面和添加控件,并设置各对象的属性。其中Form1是主窗体,Form2是圆形渐隐窗体。如图36左所示。 图36世界地图2)编写事件代码。"树形视图AfterSelect事件PrivateSubTreeView1_AfterSelect(ByValsenderAsSystem.Object,ByValeAs_System.Windows.Forms.TreeViewEventArgs)HandlesTreeView1.AfterSelectDimsAsStrings=e.Node.TextSelectCasesCaseIs="亚洲"ListView1.LargeImageList=ImageList1ListView1.Items.Item(0).Text="中国"ListView1.Items.Item(1).Text="韩国"ListView1.Items.Item(2).Text="印度"ListView1.Items.Item(3).Text="日本"CaseIs="欧洲"ListView1.LargeImageList=ImageList1ListView1.Items.Item(0).Text="英国"ListView1.Items.Item(1).Text="法国"ListView1.Items.Item(2).Text="德国"CaseIs="北美洲"ListView1.LargeImageList=ImageList1ListView1.Items.Item(0).Text="美国"ListView1.Items.Item(1).Text="加拿大"ListView1.Items.Item(2).Text="墨西哥"EndSelectEndSub"缩略图显示方式PrivateSubLargeToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAs_System.EventArgs)HandlesLargeToolStripMenuItem.ClickListView1.View=View.LargeIconEndSub"平铺显示方式PrivateSubTileToolStripMenuItem1_Click(ByValsenderAsSystem.Object,ByValeAs_System.EventArgs)HandlesTileToolStripMenuItem1.ClickListView1.View=View.TileEndSub"列表显示方式PrivateSubListToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAs_System.EventArgs)HandlesListToolStripMenuItem.ClickListView1.View=View.ListEndSub"图标显示方式PrivateSubSmallToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAs_ System.EventArgs)HandlesSmallToolStripMenuItem.ClickListView1.View=View.SmallIconEndSub3)运行程序,如图36右所示。9.编写一个应用程序:当程序运行时,首先是一个渐隐显示方式的窗体。当该窗体消失后,进入一个MDI窗体。该窗体有下拉菜单和状态栏。通过菜单选项操作子窗体,同时在状态栏中显示当前时间。答:用两个计时器控制状态栏时间显示和渐隐窗体的显示。设计步骤如下:1)建立应用程序界面和添加控件。向主窗体添加1个下拉菜单,1个状态栏,2个计时器,并设置各对象的属性,如图37所示。向子窗体添加1个多行文本框,如图38所示。向渐隐窗体添加1个背景图像,如图39所示。图37主窗体图38子窗体图39渐隐窗体2)编写事件代码。编写Form1(即主窗体)事件代码:PublicClassForm1DimiAsInteger=0PrivateSubNewToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesNewToolStripMenuItem.ClickDimnewFormAsNewForm2newForm.MdiParent=MenewForm.Show()i=i+1newForm.Text="子窗体"+Str(i)EndSubPrivateSubExitToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesExitToolStripMenuItem.ClickMe.Close()EndSubPrivateSubcdToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlescdToolStripMenuItem.ClickMe.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade)EndSubPrivateSubspppToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesspppToolStripMenuItem.ClickMe.LayoutMdi(System.Windows.Forms.MdiLayout.TileHorizontal)EndSubPrivateSubczppToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesczppToolStripMenuItem.ClickMe.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical)EndSubPrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_ HandlesTimer1.TickToolStripStatusLabel1.Text=NowEndSubPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadForm3.ShowDialog()EndSubPrivateSubTimer2_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesTimer2.TickStaticsAsSingles=s+1Form3.Opacity=(100-s)/100IfForm2.Opacity=0ThenTimer1.Stop()Form3.Close()EndIfEndSubEndClass编写Form2(即子窗体)事件代码:PublicClassForm2PrivateSubForm2_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadRichTextBox1.Width=Me.WidthRichTextBox1.Height=Me.HeightEndSubEndClass3)运行程序,首先出现一个渐隐窗体。当渐隐窗体消失,出现主窗体。如图40所示。图40程序运行界面习题111.在绘制图形时,Graphics对象和Pen对象分别用来定义什么?答:在绘制图形时,Graphics对象提供将对象绘制到显示设备的方法,与特定的设备相关。除了创建Graphics对象,还必须创建Pen对象,即它们同时工作。Pen对象定义用于绘制线条、勾勒形状轮廓或呈现其他几何表示形式,存储要绘制项的属性,并且将Pen对象作为参数之一传递给绘制方法。2.在VB2005中除了可以自行绘制图形外,还可以从文件中加载图像并对其进行操作,加载图像需要什么类?答:加载图像需要图像类——Image类。Image类是抽象基类,它提供了处理光栅图像(位图)和矢量图像(图元文件)的方法。 3.在窗体上绘制如图41所示的图形,其中含有3条长度、宽度、样式一样的垂线,内切于正方形的圆,并将正方形填充以蓝色,圆形以绿色边显示。图41绘制图形答:绘制直线、矩形、圆形,分别需要创建相应的Graphics对象。设计步骤如下:1)编写事件代码:ImportsSystem.Drawing.Drawing2D"引用System.Drawing命名空间PublicClassForm1PrivateSubForm1_Paint(ByValsenderAsObject,ByValeAs_System.Windows.Forms.PaintEventArgs)HandlesMe.Paint"绘制条平行垂线DimiAsIntegerDimPen1AsNewPen(Color.Yellow)DimG1AsGraphics=Me.CreateGraphics()Pen1.DashStyle=DashStyle.SolidPen1.Width=3Fori=1To3G1.DrawLine(Pen1,20+(i*10),20,20+(i*10),200)Next"绘制蓝色矩形DimG2AsGraphics=Me.CreateGraphics()DimmyBrushAsNewSolidBrush(Color.Blue)G2.FillRectangle(myBrush,100,50,150,150)"绘制绿色边框的内切圆形DimredPenAsNewPen(Color.Green,3)DimG3AsGraphics=Me.CreateGraphics()G3.DrawEllipse(redPen,100,50,150,150)EndSubEndClass2)运行程序,效果如图41所示。4.动画程序设计,实现小动物跑的效果。答:设计步骤如下:1)编写事件代码。DimiAsInteger=1DimxAsInteger=1PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesTimer1.TickDimmyGraphicsAsGraphicsDimmyImageAsStringmyImage="C:rundog"&i&".bmp"Dimimage=NewBitmap(myImage)DimulCornerAsNewPoint(30+x,20) DimurCornerAsNewPoint(150+x,20)DimllCornerAsNewPoint(30+x,150)Me.Refresh()myGraphics=Me.CreateGraphicsDimdestParaAsPoint()={ulCorner,urCorner,llCorner}myGraphics.DrawImage(image,destPara)Ifi=6Theni=1Elsei=i+1EndIfx=x+2EndSub2)运行程序,如图42所示。图42小狗向前跑步动画5.设计一个音频视频播放器,参见43。图43音频视频播放器答:图中播放器可以播放视频文件,也可以播放声音文件,所以也需要WindowsMediaPlayer控件。如果直接使用WindowsMediaPlayer控件上的按钮,可以更方便、快捷的创建程序。设计步骤如下:1)建立应用程序界面和添加控件。如图44所示。图44音频视频播放器 2)编写事件代码。PrivateSubOpenToolStripMenuItem_Click(ByValsender_AsSystem.Object,ByValeAsSystem.EventArgs)Handles_OpenToolStripMenuItem.ClickDimstrfilenameAsStringOpenFileDialog1.Filter="视频文件(*.avi)|*.avi"OpenFileDialog1.ShowDialog()strfilename=OpenFileDialog1.FileNameAxWindowsMediaPlayer1.URL=strfilenameEndSubPrivateSubExitToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesExitToolStripMenuItem.ClickMe.Close()EndSubPrivateSubPauseToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesPauseToolStripMenuItem.ClickAxWindowsMediaPlayer1.Ctlcontrols.pause()EndSubPrivateSubStopToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesStopToolStripMenuItem.ClickAxWindowsMediaPlayer1.Ctlcontrols.stop()EndSubPrivateSubPlayToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesPlayToolStripMenuItem.ClickAxWindowsMediaPlayer1.Ctlcontrols.play()EndSubPrivateSubToolStripButton1_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesToolStripButton1.ClickDimstrfilenameAsStringOpenFileDialog1.Filter="视频文件(*.avi)|*.avi"OpenFileDialog1.ShowDialog()strfilename=OpenFileDialog1.FileNameAxWindowsMediaPlayer1.URL=strfilenameEndSubPrivateSubToolStripButton2_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesToolStripButton2.ClickAxWindowsMediaPlayer1.Ctlcontrols.play()EndSubPrivateSubToolStripButton3_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesToolStripButton3.ClickAxWindowsMediaPlayer1.Ctlcontrols.pause()EndSubPrivateSubToolStripButton4_Click(ByValsenderAsSystem.Object,ByVale_AsSystem.EventArgs)HandlesToolStripButton4.ClickAxWindowsMediaPlayer1.Ctlcontrols.stop()EndSub3)运行程序,如图43所示。6.设计一个MP3播放器,参见图45。 图45MP3播放器分析:为了让程序播放声音文件,需要WindowsMediaPlayer控件。设计步骤如下:1)建立应用程序界面和添加控件。向窗体上添加4个Button控件,2个Label控件,1个TrackBar控件,1个WindowsMediaPlayer控件,1个OpenFileDialog控件。2)编写事件代码。"设置全局变量Dimpaths()AsString"定义打开文件路径数组DimFileNameAsString"定义文件名称DimSingNameAsString"定义歌曲名称DimiAsIntegerDimselIndexAsIntegerDimpathAsStringDimd1,d2AsIntegerPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesMyBase.LoadListView1.FullRowSelect=True"可以整行选取EndSub"添加按钮事件PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimsfileAsString"定义歌曲名称DimjAsInteger"定义循环变量DimcountAsInteger"定义已有歌曲数目WithOpenFileDialog1"打开新文件.Title="打开mp3文件".Multiselect=True.Filter="mp3文件(*.mp3)|*.mp3".ShowDialog()paths=.FileNamesEndWithi=paths.GetUpperBound(0)"获取此次打开的文件数目Forj=0Toicount=ListView1.Items.Count"获取现有文件数目sfile=paths(i-j).Substring(paths(j).LastIndexOf("")+1)"获取歌曲名称DimmitemAsNewListViewItem(Str(count+1),j)mitem.SubItems.Add(sfile)mitem.SubItems.Add(paths(i-j))ListView1.Items.Add(mitem)"把新打开的文件添加到列表控件中NextEndSub"播放按钮事件PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton2.ClickselIndex=ListView1.SelectedItems(0).Text-1FileName=ListView1.SelectedItems.Item(0).SubItems(1).Text"获取歌曲名称 path=ListView1.SelectedItems.Item(0).SubItems(2).TextAxWindowsMediaPlayer1.URL=path"设置播放文件AxWindowsMediaPlayer1.Ctlcontrols.play()"开始播放Label2.Text=FileNameDimStrAsStringLabel2.Text=FileNameTimer1.Enabled=TrueButton2.Enabled=TrueStr=FileName.Substring(FileName.LastIndexOf("."))FileName=FileName.Remove(FileName.Length-_Str.Length,Str.Length)Label2.Text=FileName"对字符串进行处理,仅获取无后缀歌曲名EndSub"停止按钮事件PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton5.ClickAxWindowsMediaPlayer1.Ctlcontrols.stop()EndSub"退出按钮事件PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton6.ClickClose()EndEndSub"计时器事件PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesTimer1.TickDimm1,m2AsIntegerDims1,s2AsIntegerd1=AxWindowsMediaPlayer1.Ctlcontrols.currentPosition"获取当前播放进度d2=AxWindowsMediaPlayer1.currentMedia.duration"获取需要的总时间TrackBar1.Value=d1TrackBar1.TickFrequency=d2TrackBar1.Maximum=d2m1=d160:s1=d1Mod60m2=d260:s2=d2Mod60Label1.Text="已播放"&m1&":"&Format(s1,"00")&_"("&m2&":"&Format(s2,"00")&")""显示播放进度EndSub"列表视图控件PrivateSubListView1_DoubleClick(ByValsenderAsObject,ByValeAsSystem.EventArgs)_HandlesListView1.DoubleClickDimstrAsStringselIndex=ListView1.SelectedItems(0).Text-1FileName=ListView1.SelectedItems.Item(0).SubItems(1).Text"获取歌曲名称path=ListView1.SelectedItems.Item(0).SubItems(2).Text"获取歌曲路径AxWindowsMediaPlayer1.URL=path"设置播放文件AxWindowsMediaPlayer1.Ctlcontrols.play()"开始播放Label2.Text=FileNameTimer1.Enabled=TrueButton2.Enabled=Truestr=FileName.Substring(FileName.LastIndexOf("."))FileName=FileName.Remove(FileName.Length-_ str.Length,str.Length)Label2.Text=FileName"对字符串进行处理,仅获取无后缀歌曲名EndSub3)运行程序。当单击“添加”按钮,可以将一首或多首歌曲添加到列表视图中。当用鼠标双击列表视图中某首歌曲时,播放器回播放该歌曲。或用鼠标单击列表视图中某首歌曲,再按“播放”按钮也能播放该歌曲。习题121.在编写程序代码时,通常需要注意哪几个方面?答:在编写程序代码时,需要注意规范化编码,即要保持代码的一致性,也就是说使用同样的要求、布局样式来书写代码。在编程时,要给某些重要的语句做注释;应该使用规范、统一的命名方式,即使用规范、统一的命名规则来为每个变量、过程、模块等命名。通过工具设置一些规则来规范化程序代码的书写,即使用文本编辑器工具栏对代码执行不同的操作,例如字体大小、空格数量等。2.编程中常会出现哪几种错误?答:错误(Bug)就是程序中的问题,这些将导致应用程序的运行失败或不正常地运行。编程中常见的错误有:语法错误、运行中的错误、逻辑错误。3.什么是调试?VB2005的程序有哪几种运行模式?答:发现并纠正错误的过程称为调试(Debug)。VB2005主要有4种运行模式:全程运行模式、逐语句运行模式、逐过程运行模式和断点运行模式。4.什么是断点?在调试程序时,经常将断点模式与什么模式一起使用?答:断点运行模式是一种非常重要的一种调试方式。它可以在程序中加入断点,当程序运行到断点时,程序会在有断点的地方停止运行,这时,可以再使用各种调试工具对断点附近的代码进行跟踪,以便发现错误。断点经常与逐语句运行模式一起使用。通常在程序的某处设置断点,当程序运行到该语句停止运行,然后再逐语句运行。5.添加监视的前提是什么?如何添加?答:只有程序必须处于中断状态下才可以添加监视。当程序运行错误时,程序自动进入中断状态,这时可以对变量或表达式添加监视。也可以通过断点使程序中断后再添加监视。当程序运行到断点时自动中断。IDE的左下角有一个“监视1”窗口。用鼠标选中代码窗口中的任何变量或表达式就可以添加监视了。单击鼠标右键,会出现一个快捷菜单,选中“添加监视”选项,添加监视。6.VB2005提供了哪两种方法来处理异常?答:为了提高程序的可靠性和稳定性,VB2005提供了非结构化的异常处理语句OnError和结构化的异常处理语句Try来处理这些错误。7.什么是应用程序的部署?VisualStudio2005为部署基于Windows的应用程序提供了哪两种策略?答:部署(又称为发布),即人们经常说的程序打包,是将用户所编写的程序编译成可执行文件或 Web上可部署的文件,然后制作成可以脱离编译环境的安装文件,以方便地在其他机器上安装使用。VisualStudio2005为部署基于Windows的应用程序提供两种不同的策略:使用WindowsInstaller技术通过传统安装来部署应用程序,或使用ClickOnce技术发布应用程序。通过WindowsInstaller部署,将应用程序打包到setup.exe文件中,并将该文件分发给用户,用户可以运行setup.exe文件安装应用程序。通过ClickOnce部署,可以将应用程序发布到中心位置,然后用户再从该位置安装或运行应用程序。8.利用结构化的异常处理方式,设计除数为0时应该执行的处理方式。答:一般情况下,计算机是不能处理一个数除于0的操作的。所以必须利用结构化的异常处理方式来处理。设计步骤如下:1)建立应用程序用户界面和添加控件。在窗体上添加文本框控件对象、标签控件对象和命令按钮控件对象。设置如图46左所示。图46处理被除数为0的操作2)编写事件代码。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_HandlesButton1.ClickDimx,y,zAsLongx=CLng(TextBox1.Text)y=CLng(TextBox2.Text)Tryz=x/yMsgBox("结果是:"&CStr(z))CatchexAsExceptionMsgBox("被除数不能为!")EndTryEndSub3)运行程序,当被除数为0时,单击“计算”按钮,结果如图46右所示。9.使用两种策略,分别部署一个Windows应用程序和Web应用程序。答:(1)部署Windows应用程序参见例12-8。(2)部署Web应用程序参见书中12.5.2小节内容。'