第13章VB.
Net程序设计基础VisualStudio.
NET是Microsoft公司针对互联网推出的新一代可视化开发工具.
VisualBasic.
NET就是支持该结构的编程语言之一.
VisualBasic.
NET:面向对象的可视化程序设计语言事件驱动程序基于Windows程序的基本特点.
面向对象编程(OOP)将特征属性抽象为变量,行为方法编写为函数.
用户界面窗体和控件、菜单等可视化应用程序集成开发环境编辑、调试、运行VB.
NET的程序开发的特点解决方案:在.
NET环境中,开发工作以解决方案的形式进行组织,每个解决方案包含一个或多个项目.
项目:每个项目可以执行一项不同的任务,它由VB.
NET代码、图片和文档等相关文件的构成.
编程的第一步是新建一个项目.
13.
1.
1VB.
NET简介13.
1.
2VB.
NET可视化集成开发环境(1)启动VB.
NET:开始/程序/[MicrosoftVisualStudio.
NET2008"起始页"区域:显示了最近打开过的项目链接及其修改日期解决方案资源管理器子窗口新建一个项目的操作步骤:(2)单击"起始页"中间区域中的"新建项目"或选择"文件/新建/项目"(3)在"新建项目"对话框中,在"项目类型"列表框中选择"VisualBasic项目";在"模板"列表框中选择"Windows应用程序"模板;在"名称"文本框中输入项目的名称,这里输入"project1",并在其下方的"位置"列表框中为项目选定一个保存路径.
(4)单击"确定"按钮,完成了"project1"项目的新建,进入了.
NET开发环境.
控件工具箱解决方案资源管理器属性窗口设计窗口双击窗体进入代码窗口13.
1.
3VB.
NET中面向对象的基本概念1.
对象和类(1)对象:一个实体的抽象描述,包括属性和方法,可以识别并响应事件.
属性:对象中的数据,用来描述和反映对象特征的参数.
方法:对象中的程序过程,可执行的功能,作为方法供用户直接调用.
事件:用户或操作系统执行的操作,如单击控件、鼠标移动、键盘按下等.
在VB.
NET程序设计语言中,对象是程序设计的基本单元,也是设计时的核心.
(2)类:具有相同操作功能和相同属性的对象的集合和抽象.
在VB.
NET中,工具箱内列出的各种控件都是系统设计好的标准控件类.
当把控件设置在窗体上后,才把控件类实例化为对象,即创建了一个控件对象.
例如:命令按钮(Button)类,它集中了命令按钮对象的共有特征.
在把"命令按钮"画到窗体上之前,"命令按钮"控件对象是不存在的,只有当把"命令按钮"控件设置在窗体上后,才把类实例化为对象,即创建了一个命令按钮控件对象.
设置对象属性的二种方法:(1)设计阶段:在属性窗口中设置(2)在程序代码中设置.
格式如下:对象名.
属性=属性值2.
对象的属性、方法和事件(1)对象属性:用以描述和反映对象特征的参数例如:Button1.
Text="打开"Button1.
ForeColor=Color.
Red调用格式如下:[对象名].
方法(参数名表)注:方括号内内容可省略例如:Text1.
Focus()//用该方法把光标置于Text1文本框上.
(2)对象方法:描述了该对象能执行的动作.
是在对象上可执行的动作.
是由VB系统已设计好的过程、函数,可供用户直接调用.
(3)对象事件:由VB.
NET预先设置好的、能够被对象设别的动作.
例如单击(Click)、DblClick(双击)等格式如下:PrivateSub对象名称_事件名称(对象引用,事件信息)Handles事件处理程序……事件过程代码……EndSub其中,"对象名称"是对象的Name属性,"事件名称"是该对象能够识别的事件,是VB.
NET预先定义好并赋于该对象的.
PrivateSubButton1_Click(ByValsenderAsSystem.
Object,ByValeAsSystem.
EventArgs)HandlesButton1.
ClickButton1.
Text="打开"Button1.
ForeColor=Color.
RedEndSub13.
1.
4创建一个简单的应用程序实例1.
建立程序窗体;2.
在程序窗体上设置控件对象;3.
确定控件对象的属性;4.
编写对象的事件驱动代码.
5.
程序运行和调试13.
保存文件VB.
NET程序的基本组成文件包括:解决方案文件(.
sln)窗体文件(.
frm)Basic模块文件(.
vb)资源文件(.
resx)每创建一个解决方案会生成一个文件夹,所有这些文件都在该文件夹下.
如要拷贝所开发程序,应该拷贝整个文件夹.
【例13-1】设计一个小程序.
窗体的标题为"VB.
NET应用程序设计示例",在窗体上设置一个文本框显示"您好,欢迎使用VB.
NET",两个命令按钮【下一步】和【结束】,单击【下一步】按钮时,文本框中显示的内容改变为"VB.
NET简单易学,功能强大",单击【结束】按钮时,程序结束.
程序运行界面如图13-5和13-6所示.
13.
2VB.
NET基本语法VB.
NET作为一种程序设计语言同样规定了编写程序所必须的一些语言元素如常量、变量、基本语句、函数和过程等.
13.
2.
1数据类型、常量和变量1.
数据类型数据类型确定数据在内存中的存储容量和取值范围等.
VB.
NET的基本数据类型可分为数值型、字符型、字符串型、逻辑型、日期型、对象型等.
表13-1数值型数据类型数据类型类型符存储空间范围Byte(字节型)1个字节0到255(无符号)Short(整型)2个字节-32768到32767Integer(整型)%4个字节-2147483648到2147483647Long(长整数)&8个字节-9223372036854775808到9223372036854775807Single(单精度浮点数)!
4个字节负数:-3.
402823E+38到-1.
401298E-45;正数:1.
401298E-45到3.
402823E+38Double(双精度浮点数)#8个字节负数:-1.
79769313486231E308到-4.
94065645841247E-324;正数:4.
94065645841247E-324到1.
79769313486231E308Decimal(数值型)@16个字节0到±79228162514264337593543950335不带小数点的数;0到±7.
9228162514264337593543950335带28位小数的数表13-2其他数据类型数据类型类型符存储空间范围Boolean(逻辑型)2个字节True或FalseChar(字符型)2个字节一个字符Date(日期型)8个字节0001年1月1日0:00:00到9999年12月31日11:59:59Object(对象型)4个字节任何类型数据都可存储在该类型的变量中String(字符串)$实际可用内存空间0到大约20亿个字符说明:1)Date类型用于表示日期或时间;常量需要用#括起来,格式为:#mm/dd/yyyy#,如:#02/15/2007#.
2)Char类型只能接受一个用双引号括起来的字符.
String类型表示字符串.
字符串是用双引号括起来的字符序列,如"ABC".
String类型的缺省规定为可变长度的字符串,即在对字符串操作时,其长度可增可减.
2.
常量和变量(1)常量和变量的命名规则1)必须以英文字母(或汉字)开头,后跟字母、汉字、数字或下划线.
字母大小写意义相同.
2)常量名、变量名的长度不能超过255个字符.
3)在同一个有效范围内,每个常量或变量的名称必须唯一.
4)不能使用VB.
NET关键字作为常量和变量的名字.
DimxAsDouble'声明双精度型变量xDimm%,v'声明整型变量m和对象型变量v,如缺省类型则为ObjectDimfAsBoolean=False'声明逻辑型变量f,并设置初值False(2)变量声明基本语法格式:Dim变量名[类型说明符|As类型](3)常量VB.
NET中常量有两种形式:直接常量和符号常量.
例如:12、-1.
23、'a'为直接常量.
符号常量:用一个标识符来代表一个数值或字符串.
定义符号常量的格式如下:Const常量名[As数据类型]=表达式例如:ConstUserNameAsString="John"'符号常量UserName是字符串常量ConstMaxAsInteger=100'符号常量Max是整型常量13.
2.
2运算符和表达式1.
运算符(1)算术运算符^(乘方运算符)、*(乘法运算符)、/(除法运算符)、\(整除运算符)、Mod(模运算符)、+(加法运算符或正值运算符)、-(减法运算符或负值运算符)、&(连接运算符)例如:19\13.
7=219Mod6=119Mod–6=123.
67Mod7.
88=0"abcd"+"efg"="abcdefg""123"+123=246123&"abcd"="123abcd""abc"+123(不允许)(2)复合赋值运算符在赋值运算符(=)之前加上一些算术运算符,可以构成复合的赋值运算符.
例如:a+=3等价于a=a+3"+="称为"自反加赋值运算符"x*=y+8等价于x=x*(y+8)"*="称为"自反乘赋值运算符"m^=2等价于m=m^2"^="称为"自反指数赋值运算符"VB.
NET中还可使用以下的复合赋值运算符:-=(自反减赋值运算符)/=(自反浮点除赋值运算符)\=(自反整除赋值运算符)&=(自反字符串连接赋值运算符)(3)关系运算符>(大于运算符)、(不等于运算符)>=(大于等于运算符)、bThen'如果a>b,交换a和b的值t=aa=bb=tEndIfMsgBox("较小数"&a较大数"&b,,"从小到大排序")'报告结果EndSub图13-13两数排序结果或:Ifa>bThent=a:a=b:b=t2)If语句格式2If条件Then语句1Else语句2EndIf或:If条件Then语句1Else语句2图13-14双分支语句的流程图条件表达式语句块1语句块2TrueFalse【例】计算分段函数的值程序1:Dima,x,yAsSinglea=Val(InputBox("请输入a的值","计算分段函数"))x=Val(InputBox("请输入x的值","计算分段函数"))Ifx-a)And(xa/2Theny=xMsgBox("a="&a&"x="&x&"y="&y)程序2Ifx-a)And(xa/2Theny=xEndIfMsgBox("a="&a&"x="&x&"y="&y)3)多分支If语句If条件表达式1Then语句块1ElseIf条件表达式2Then语句块2……Else语句块n图13-15多分支语句的流程图不管有几个分支,当某条件满足,执行相应的语句块,其余分支不再执行.
4)If语句的嵌套If语句的嵌套是指If语句中的语句块又包含If语句.
语句格式如下;If条件表达式1ThenIf条件表达式11Then语句块1…EndIfEndIf(2)SelectCase语句SelectCase语句也称为情况语句,它可以用来实现多分支选择结构程序.
语句格式:SelectCase表达式Case表达式列表1语句块1Case表达式列表2语句块2CaseElse语句块nEndSelectCase子句的表达式可以由以下几种形式构成:表达式1to表达式2:Case1To5表达式值在1到5范围内.
Is运算表达式:CaseIs>5表达式的值大于5的值.
枚举常量:Case"q","Q"表达式的值等于"q"或"Q".
多种表达混合:Case1To5,Is>Min表达式的值在1到5或大于Min的值.
测试表达式可以是变量、函数、数值表达式、字符串表达式或逻辑表达式.
Case子句中表达式列表的数据类型应当与表达式的数据类型一致.
【例13-3】从键盘输入一个字符,判断它是大写字母、小写字母、数字字符还是其他字符.
'本例使用标签Label1报告结果,首先在窗体上添加一个Label1.
PrivateSubForm1_Click(…)HandlesMyBase.
ClickDimchAsCharch=InputBox("请输入字符","字符判断",,200,200)SelectCasechCase"A"To"Z"Label1.
Text=ch+"是大写字母"Case"a"To"z"Label1.
Text=ch+"是小写字母"Case"0"To"9"Label1.
Text=ch+"是数字字符"CaseElseLabel1.
Text=ch+"是其他字符"EndSelectEndSub3.
循环结构VB.
NET提供了两种类型的循环控制:计数循环控制与条件循环控制.
ForI=1To10Step1TextBox1.
Text=TextBox1.
Text&I&""NextI一般用于循环次数已知的情况(1)计数循环控制语句(ForNext语句)语法格式:For循环变量=初值To终值[Step步长值]语句块[ExitFor]语句块Next[循环变量]>0初值终值=0死循环步长循环次数图13-17For循环语句流程图说明:(1)循环变量必须是数值型变量.
(2)初值、终值、步长值可以是表达式.
类型必须与循环变量的类型相同.
(3)步长值可以是正数(初值小于终值)或负数(初值大于终值).
缺省值为1.
(4)ExitFor:退出循环,执行Next语句的后继语句.
(5)For与Next中间的语句称为循环体,可以是多个语句.
PrivateSubForm1_Click(…)HandlesMyBase.
ClickDimsAsSingle,numAsInteger,smaxAsInteger,sminAsInteger's读入成绩,num学号,smax最高分,smin最低分DimnummaxAsInteger,numminAsInteger'nummax最高分学号,nummin最低分学号DimsumAsInteger,aveAsSingle,chAsString'sum总分,ave平均分,ch为InputBox提示smax=-1:smin=101'最高分赋值为-1,最低分赋值为101Fornum=1To10ch="请输入第"&num&"个学生的成绩"s=InputBox(ch)输入学生成绩sum=sum+s'学生成绩累加Ifs>smaxThensmax=s:nummax=num'保留最高分及对应学号Ifs"ABCD"PW=InputBox("输入密码")LoopPW=InputBox("输入密码")DoUntilPW="ABCD"PW=InputBox("输入密码")Loop(2)条件循环控制语句2)Do……LoopWhile和Do……LoopUntil语句DoWhile……LoopDoUntil……Loop语句格式Do语句块[ExitDo]语句块LoopWhile条件Do语句块[ExitDo]语句块LoopUntil条件执行流程举例(密码检验)DoPW=InputBox("输入密码")LoopWhilePW"ABCD"DoPW=InputBox("输入密码")LoopUntilPW="ABCD"【例13-5】编写一个译码程序,将一个由大写字母组成的英语句子译成数字代码.
译码规则是:以数字1代替字母A、数字2代替字母B、……、数字26代替字母Z,如遇空格则输出*号.
英语句子以句号结束.
PrivateSubForm1_Click(…)HandlesMyBase.
ClickDimCodeAsInteger,LetterAsStringTextBox1.
TextLetter=InputBox("请输入一个大写字母(输入小数点结束程序)DoWhileLetterIfLetter=""ThenTextBox1.
Text=TextBox1.
Text&"*"&Space(3)'Space(3)是3个空格字符串ElseCode=Asc(Letter)-Asc("A")+1TextBox1.
Text=TextBox1.
Text&Code&Space(3)EndIfLetter=InputBox("请输入一个大写字母(输入小数点结束程序)LoopTextBox1.
Text=TextBox1.
Text&".
"EndSub译码算法如下:Code=ASC(Letter)-ASC("A")+1(3)循环嵌套所谓循环嵌套就是在一个循环结构的循环体内包含另一个或多个循环结构,也称为多重循环.
对于循环的嵌套,要注意以下事项:1)内循环变量与外循环变量不能同名;2)外循环必须完全包含内循环,不能交叉;3)不能从循环体外转向循环体内,也不能从外循环转向内循环,反之则可以.
【例13-6】编写一个程序输出九九乘法表.
该程序窗体界面有1个命令按钮Button1和1个文本框TextBox1,需将TextBox1的Multiline属性设置为True,并拖至足够大.
Form=1To9Forn=1To9k=m*nIfk>=10ThenTextBox1.
Text=TextBox1.
Text&kElseTextBox1.
Text=TextBox1.
Text&kEndIfNextnTextBox1.
Text=TextBox1.
Text&vbCrLfNextm外重循环执行一次,内重循环执行一遍.
13.
2.
6数组1.
数组的定义一维数组定义格式:Dim数组名(下标上界)As类型名称注意:下标下界为0,一维数组的大小为上界+1.
无数据类型表示Object类.
例如:DimA(10)AsInteger定义了一个一维数组,该数组的名字为A,类型为Integer(整型),该数组由11个数组元素组成,即A(0)---A(10))二维数组定义格式:Dim数组名(第一维下标上界,第二维下标上界)As类型名称例如:DimPage(1,2)AsInteger定义了一个二维数组,该数组的名字为Page,类型为Integer(整型),共6个数组元素,分别是:Page(0,0)、Page(0,1)、Page(0,2)Page(1,0)、Page(1,1)、Page(1,2)2.
数组的初始化和引用(1)数组的初始化1)一维数组元素初始化格式如下:Dim数组名()As类型名称={值1,值2,…值n}注意:VB.
NET规定不允许对指定上界的数组进行初始化,所以圆括号中必须为空,根据实际初值的个数确定数组的上界.
例如:DimSeason()AsString={"春天","夏天","秋天","冬天"}定义了一个字符串数组Season该数组有4个初值,分别为:Season(0)="春天"、Season(1)="夏天"、Season(2)="秋天"、Season(3)="冬天"2)二维数组元素初始化格式如下:Dim数组名(,)As类型名称={{第一行值},{第二行值},…{第n行值}}例如:DimAI(,)AsInteger={{1,2,3},{4,5,6}}定义了一个二维数组AI,内层花括号的个数表示数组的行数,每个内层花括号中数值个数表示数组的列数,该语句定义了一个2行3列的数组,即AI(2,3).
各元素的值分别为:AI(0,0)=1AI(0,1)=2AI(0,2)=3AI(1,0)=4AI(1,1)=5AI(1,2)=6(2)数组元素的引用只能逐个引用数组元素而不能一次引用整个数组,数组元素的表示形式如下.
数组名(下标1[,下标2…])其中,下标可以是整型常量或整型表达式,例如:A(5)、Season(2)、AI(1,1)、AI(1+1,2).
数组元素可以出现在表达式中,也可以被赋值.
【例13-7】设计一个应用程序,使用数组对新进榜歌曲按输入顺序逆序排列并显示结果.
该程序窗体界面有2个标签Label1和Label2、1个命令按钮Button1.
PrivateSubButton1_Click(…)HandlesButton1.
ClickConstn=6'声明常量,歌曲数目为6首DimiAsInteger,jAsInteger'i为循环控制变量,i和j为数组下标变量DimtAsString't用于逆序排列的中间变量DimSong(n-1)AsString'声明字符串数组变量,下标上界为n-1'为数组元素赋值,建立歌曲榜单,并显示在标签Label1上Fori=0Ton-1Song(i)=InputBox("请输入歌曲名称:Label1.
Text=Label1.
Text&""&Song(i)图13-19程序运行结果Nexti'采用首尾元素对换完成逆序排列Fori=0To(n-1)\2j=n-1-it=Song(i)Song(i)=Song(j)Song(j)=tNexti'在标签Label2上输出逆序排列结果Fori=0Ton-1Label2.
Text=Label2.
Text&""&Song(i)NextiEndSub【例13-8】编写程序,要求能输入4名学生的英语、数学、政治、物理四门课的考试成绩.
计算并输出每名学生的平均分.
PrivateSubForm1_Click(…)HandlesMyBase.
ClickConstStuNum=4,CourseNum=4DimStuGrade(StuNum-1,CourseNum-1)AsSingle'StuGrade成绩二维数组DimAveGrade(StuNum-1)AsSingle'AveGrade平均成绩一维数组DimCurrentGradeAsStringDimiAsInteger,jAsInteger,kAsIntegerTextBox1.
Text=TextBox1.
Text&"学号"&"英语"_图13-20程序运行结果&"数学"&"政治"&"物理"&"平均"&vbCrLfFori=0ToStuNum-1k=0TextBox1.
Text=TextBox1.
Text&iForj=0ToCourseNum-1'输入一个人各门课成绩,并计算和,输出成绩CurrentGrade="请输入"&i+1&"号学生第"j+1&"门课程的成绩"StuGrade(i,j)=InputBox(CurrentGrade)k=k+StuGrade(i,j)TextBox1.
Text=TextBox1.
Text&StuGrade(i,j)Nextj'计算平均成绩并输出AveGrade(i)=k/4TextBox1.
Text=TextBox1.
Text&AveGrade(i)&vbCrLfNextiEndSub13.
2.
7子程序过程与函数过程通用过程分为两类:子程序过程和函数过程.
子程序过程又称为Sub过程,函数过程称为Function过程或自定义函数.
Sub过程与自定义函数的区别在于:(1)过程较为灵活,可以带参数,也可以不带参数,而且不返回值.
(2)函数通常都要求带参数,并有返回值.
1.
Sub过程的定义和调用(1)Sub过程的定义定义Sub过程的格式如下:[Private|Public][Static]Sub过程名([形式参数表])局部变量和常量声明语句块[ExitSub]语句块EndSub过程必须以Sub开始使用说明:1)过程必须以Sub开始,EndSub结束.
Public(默认)为全局(公有)过程,全局有效;Private为局部(私有)过程,本模块有效;Static为静态过程(每次调用该过程后,都将保留其中的局部变量值).
2)形式参数(简称形参)是过程与主程序(调用过程的程序)之间进行数据传递的变量.
多个参数之间用逗号分隔.
形参有两种类型,格式如下:ByVal|ByRef参数名[()][As数据类型]其中:ByVal表示该参数以传值的方式传递数据(值传递).
ByRef表示以传地址的方式传递数据.
3)过程中说明的变量和常量仅在该过程中有效.
4)ExitSub表示退出过程,返回到调用过程的主程序的下一个语句继续执行.
(2)Sub过程的建立通用过程不属于任何一个事件过程,因此不能用事件过程定义.
通用过程可以在窗体、模块或类中建立,由程序员在程序代码窗口直接输入整个过程,包括框架.
(3)Sub过程的调用Sub过程建立后,只有通过调用,Sub过程才能执行.
调用Sub过程的语句格式如下:[Call]过程名([实在参数表])过程调用时的参数称为实在参数(简称实参).
实在参数的个数、类型以及前后次序必须和形参一致.
另外,调用过程时可省略关键字Call.
实参可以是用逗号分隔的变量、常数、表达式等.
程序运行时,将实参按次序一一对应形参,即:将实参的值或地址传送给对应的形参,而后在过程中进行相应的处理.
【例13-9】编写一计算阶乘的过程,并在主程序中调用.
PublicSubJC(ByValx,ByRefp)DimkAsIntegerp=1Fork=1Toxp=p*kNextKEndSubPrivateSubForm1_Click(…)HandlesMyBase.
ClickDimcAsLong,mAsIntegerm=10CallJC(m,c)MsgBox("10!
="&c)EndSubJC(x,p)是个通用过程,形参x传值,将接受调用程序传递来的数据(要计算阶乘的具体数值);形参p是传址,它将接受调用程序传来的实参变量地址,可以将计算结果传送回调用程序.
事件过程Form1_Click中调用过程JC(m,c)计算阶乘,m=10,对应形参x,即计算10阶乘;变量c对应形参p,它接受过程JC传送回的计算结果.
用MsgBox报告计算结果.
2.
自定义函数的定义和调用(1)自定义函数的定义定义格式如下:[Private|Public][Static]Fuction函数名([参数表])[As类型]局部变量和常量声明语句块[函数名=返回值][ExitFuction]语句块函数名=返回值EndFunction使用说明:(1)在建立自定义函数时,与过程不同的是在参数表后有一选择项"As类型",它是自定义函数返回值的数据类型,若类型缺省,则为Object类型.
(2)在函数体内必须将函数的计算结果值赋予函数名,这是函数返回值所必需的.
(3)函数参数表的具体格式与过程参数相同.
不论有无参数,函数名后面的括号均不能省略.
【例13-10】编写一计算阶乘的函数.
FunctionFJC(ByValxAsInteger)AsIntegerDimkAsInteger,pAsIntegerp=1Ifx<0ThenExitFunctionEndIfFork=1Toxp=p*kNextkFJC=pEndFunction(2)自定义函数的调用若调用上述例题中的函数FJC,必须先确定一个变量用以接受函数的返回值,如下两种形式都可以:M1=FJC(5)或MsgBox("5!
"&FJC(5))13.
3窗体与常用控件13.
3.
1窗体设计的基本方法1.
窗体的创建创建窗体有两种方法:(1)当创建一个新的项目时,系统自动创建项目的第一个窗体,并将名称默认为Form1.
(2)在应用程序的开发过程中,可根据需要添加新的窗体.
右单击当前项目,选择"添加/添加Windows窗体"命令或"添加/添加新项",在"添加新项"对话框的"模板"列表框中,选择"Windows窗体",单击【打开】按钮,一个新窗体被添加到项目中,默认为Form2.
2.
窗体的属性窗体的属性决定了窗体的外观和操作,窗体的主要属性和功能如下:Text:设置窗口标题栏中的标题.
Size、Location:设置窗口显示时的大小和位置.
ForeColor、BackColor:设置窗体前景色和背景色.
MinimizeBox、MaximizeBox:设置窗体在运行时是否可以最小化和最大化.
FormBorderStyle:设置窗体在运行时是否可以调整窗体的大小.
BackgroundImage:设置对象的背景图片,属性值是图片的路径.
Cursor:设置鼠标在该对象上时的形状.
Font:设置对象中文字的字体、大小、颜色和风格等.
Icon:设置窗体的图标.
Opacity:设置窗体的不透明度级别.
WindowState:设置窗体的窗口状态.
注意:用Windows窗体设计器创建的窗体是类(如Form1实质是一个类名),在运行时显示的窗体是它的实例,对当前窗体来说,可以用"Me"作为对象名,而不能用"Form1".
例如,用程序代码设置窗体的标题.
应该写成:Me.
Text="VB.
NET应用程序"若写成:Form1.
Text="VB.
NET应用程序",则是错误的.
3.
窗体的方法窗体可以使用的主要方法如下:Activate:激活窗体并赋予焦点.
Close:关闭窗体.
Hide:隐藏窗体.
Show:显示非模式窗体.
ShowDialog:显示模式对话框窗体.
使用方法的格式为:[对象名.
]方法名[表达式]4.
窗体的事件最常用的窗体事件如下:Load:在第一次显示窗体前发生.
Click:在单击窗体时发生.
DoubleClick:双击窗体时发生.
Closed:关闭窗体后发生.
GotFocus:窗体接收焦点时发生.
LostFocus:当窗体失去焦点时发生.
5.
多重窗体一个VB应用程序可以包含多个窗体,每个窗体相对独立且具有自己的界面和程序代码,以实现不同的功能、完成不同的任务.
(1)设置启动窗体在具有多个窗体的应用程序中,若不指定启动对象,则窗体Form1为启动对象.
可以根据应用程序功能上的需要把逻辑上最先运行的窗体设置为启动对象.
重新设置启动窗体的方法如下:1)选择"项目/属性"命令.
2)单击"启动对象"下拉按钮,选择某一个窗体或Main子过程作为启动对象.
(2)窗体的显示在多重窗体程序中,除了启动窗体外,其他窗体的显示可以通过程序代码来完成.
例如:要显示窗体Form2,则可以通过以下代码来实现:DimFrmDialogAsForm2'定义一个Form2类的对象变量FrmDialogFrmDialog=NewForm2'FrmDialog初始化,即创建一个实例赋予FrmDialogFrmDialog.
Show(显示FrmDialog或采用以下语句:DimFrmDialogAsNewForm2FrmDialog.
Show()13.
3.
2常用控件标签Label文本框TextBox命令按钮Button单选按钮复选框框架列表框组合框1.
标签(Label)主要用于描述其它控件.
(1)主要属性AutoSize:设置标签的大小是否随显示内容自动调整.
取值类型Boolean,默认为False.
BorderStyle:设置标签的边框样式.
有3种选择:Fixed3D(三维边框)、FixedSingle(单行边框)、None(无边框),默认为None.
Enabled:设置指示标签是否可以对用户交互作出响应,值为True或False.
Image、ImageAlign:设置图片以及图片的对齐方式.
Visible:设置该标签是否在窗体上显示.
True(显示)、False(不显示).
默认为TrueText、TextAlign:设置在标签中显示的文本以及文本的对齐方式.
2.
文本框TextBox:允许用户在应用程序中输入文本.
(1)主要属性Text:接受文本信息.
运行程序时,用户在文本框中输入的内容都保存在该属性中.
MaxLength:设置用户在文本框中键入或粘贴的最大字符数.
Multiline:设置是否允许显示或输入多行文本.
PasswordChar:设置字符,程序运行时,输入文本框中的字符全部显示该字符.
当Multiline为True时,该属性不起作用,如该属性设为"*",则用户的任何输入都显示为"*".
ScrollBars:设置滚动条的模式.
Both(水平和垂直滚动条)、Horizontal(水平滚动条)、Vertical(垂直滚动条)、None(没有滚动条).
SelectedText:设置或返回当前选定的文本内容.
SelectionLength:设置或返回文本框中选定的字符数.
SelectionStart:设置或返回文本框中选定的文本起始点,第一个字符的位置是0.
ReadOnly:设置文本框内容为只读.
(2)事件TextChanged:Text属性值更改时触发该事件.
GotFocus:当文本框得到焦点时触发该事件.
LostFocus:当文本框失去焦点时触发该事件.
KeyPress:当文本框具有焦点时,按下任意键就会触发该事件.
(3)方法Focus:使文本框获得焦点.
Copy:将文本框中的当前选定内容复制到剪贴板.
Cut:将文本框中的当前选定内容移动到剪贴板中.
Paste:用剪贴板的内容替换文本框中的当前选定内容.
SelectAll:选择文本框中的所有内容.
3.
按钮(Button)主要用于启动应用程序.
.
(1)属性Text、TextAlign:设置按钮的标题文字及对齐方式.
BackColor、BackgroundImage:设置按钮的背景色及背景图片.
ForeColor:设置按钮控件所包含文字或图形的前景色.
Image、ImageAlign:设置前景图片以及图片的对齐方式.
FlatStyle:设置按钮的平面样式外观.
默认Standard(三维).
Font:设置按钮包含的文字的字体.
(2)事件命令按钮最常见的事件:Click例EX4-1例EX4-24.
单选按钮(RadioButton)单选按钮用于让用户在一组相关的选项中选择一项.
(1)属性Text、TextAlign:设置控件的标题文字及其对齐方式.
Checked:设置是否选中单选按钮.
选中单选钮,Checked为True;否则,Checked为False.
(2)事件单选按钮的主要事件有:Click和CheckedChage事件.
当用户单击单选钮时,触发Click事件;当Checked属性值发生改变时,触发CheckedChage事件.
5.
复选框(CheckBox)复选框用于让用户在一组可供选择的项中选定其中的一项或多项.
(1)属性复选框的主要属性有Text、Checked和CheckState.
其中Text和Checked属性的意义与单选按钮相同.
CheckState:表示复选框的状态.
Checked(被选中)、Unchecked(未被选中,默认值)、Indeterminate(显示选中标记并变灰)(2)事件复选框的主要事件有:Click和CheckedChage事件.
它们的触发条件与单选按钮相同.
13.
框架(GroupBox)框架的典型用途是建立包含多个单选按钮的逻辑组,即当窗体上需要创建多组相互独立的单选按钮时,可用框架将每组单选按钮分开,这样对一个框架内的单选按钮的操作就不会影响到框架外的单选按钮.
当需要将一组单选钮或复选框放在框架中时,首先应设置框架,然后在框架中建立需要的控件对象.
(1)属性框架的主要属性是Text,它被用来设置框架的标题.
(2)事件框架的主要事件有Click和DoubleClick事件.
(3)方法Add:将指定的控件添加到框架中.
Clear:从框架中删除所有控件.
Remove:从框架中删除指定的控件.
例EX4-57.
列表框(ListBox)用来显示一组选项供用户选择,用户一次可以选择一项或多项.
(1)属性SelectionMode:设置在列表框中提供单项选择或多项选择Items:设置列表框中的列表项.
SelectedItem:获取或设置列表框中的当前选定项.
SelectedIndex:获取或设置列表框中当前选定项的索引(从零开始).
MultiColumn:获取或设置列表框是否支持多列.
(2)事件列表框的主要事件有Click、DoubleClick和SelectedIndexChanged事件.
当SelectedIndex属性值更改时,SelectedIndexChanged事件将被触发.
(3)方法列表框常用的方法如下:Items.
Add:向列表框中添加选项.
Items.
Remove:从列表框中删除选项.
Items.
RemoveAt:从列表框中删除指定索引的选项.
Items.
Insert:向列表框中插入选项.
Items.
Clear:清除列表框中所有的选项.
SetSelected:选择或清除对列表框中指定项的选定.
8.
组合框(ComBox)是列表框和文本框的组合,用户可以从列表框中选择选项或在文本框中输入新的文本.
当用户从列表框中选定某项时,该选项会显示在文本框中.
组合框和列表框的属性、事件和方法大致相同,下面介绍组合框独有的一些属性.
DropDownStyle:设置组合框的样式.
DropDown(下拉组合框)、DropDownList(下拉列表框)、Simple(简单组合框).
MaxDropDownItems:设置要在组合框的下拉部分中显示的最大项数.
MaxDropDownWidth:设置组合框下拉部分的宽度.
Text:设置组合框的文本.
组合框的常用事件为DropDown事件,单击组合框的下拉按钮时触发该事件.
例EX4-3例EX4-413.
3.
3菜单设计主菜单:通常位于应用程序窗口的顶部,它系统而集中地体现了应用程序的功能,用户可单击菜单命令来完成全部(或大部分)程序功能.
上下文有关菜单:也叫快捷菜单(或称弹出菜单),当用户右单击窗体或控件时弹出.
MainMenu控件和Contextmenu控件,分别用来设计主菜单和快捷菜单.
它们是非用户界面控件,在设计阶段,它们不出现在窗体上,而是位于窗体下面的专用面板中.
【例13-10】主菜单的建立过程.
1)从工具箱中把MainMenu控件拖到窗体中或双击MainMenu控件,弹出可视化的主菜单设计器,MainMenu控件位于窗体下面的专用面板中.
2)单击"请在此处输入",依次输入菜单项.
3)编写菜单项的事件过程.
菜单项的属性:Text:设置菜单项标题.
Shortcut:设置菜单项的快捷键.
Checked:设置选中标记是否出现在菜单项文本的旁边.
弹出式菜单的创建过程也类似于主菜单.
必须把弹出式菜单的名称与窗体或所需要的控件相关联.
例如:如果已建立了一个弹出式菜单Contextmenu1,右单击Text1时弹出,则需设置:Text1.
ContextMenu=Contextmenu1例EX4-1013.
4VB.
NET程序调试和排错13.
4.
1常见错误1.
语法错误不符合VB.
NET语法规则的语句而产生的错误.
用户在编写代码的同时系统会对代码进行检查,会在错误代码下面以兰色波浪线的形式标注出来.
当鼠标指针移到带波浪线的代码时,会显示错误的描述提示,同时在任务列表窗口中指明错误的原因.
2.
运行错误运行错误是指程序没有语法上错误,在程序运行时产生的错误.
这类错误产生的原因通常是由于程序中包含了看上去正确但不会执行的代码.
例如,算数表达式中的分母为0、数组下标越界等.
当程序发生了运行时错误,系统会弹出异常提示对话框,程序终止运行.
运行错误通常比较隐蔽,需要根据源程序和错误现象进行推断.
3.
逻辑错误逻辑错误是指程序运行后不能产生编程人员所期望的结果而产生的错误.
一般逻辑错误是由于算法考虑不周全或编码时疏忽而引起的.
通常逻辑错误不会产生错误提示信息,因此难以发现和排除.
13.
4.
2调试与排错1.
VB.
NET的三种工作模式(1)设计模式在设计模式下,可以创建和编辑代码并通过VB.
NET环境的自动检测能检测并定位语法错误,但是在设计模式下无法检测出运行错误和逻辑错误.
(2)运行模式在运行模式下可以查阅代码,检测逻辑错误和运行时错误,但是无法对错误进行更改.
(3)中断模式中断模式用于跟踪、调试应用程序,排除程序中所有可能存在的运行错误和逻辑错误.
在中断模式下能够浏览和修改代码,也可以查看变量的取值.
2.
中断程序中断模式是进行程序调试的主要环境模式,进入中断模式后程序不会停止执行,可以随时继续执行.
进入中断模式有以下方法:选择"调试/全部中断"命令或单击工具栏上的"全部中断"按钮暂停程序执行.
按Ctrl+Break组合键强制进行中断设置断点(1)断点的设置在程序代码窗口,单击代码左边边界的灰色部分,该行便被设定为断点.
在程序代码窗口,在需要设置断点的代码行上单击鼠标右键,选择"插入断点"命令.
在程序代码窗口,单击需要设置断点的代码行,然后按F9键.
图13-24设置断点(2)断点的删除单击断点所在代码行左边的断点符号"".
将鼠标光标置于断点所在行上,按F9.
在需要设置断点的代码行上单击鼠标右键,选择"移除断点"命令.
3.
查看应用程序的状态(1)直接查看数据在中断模式下可以直接查看某个变量的值,只要将鼠标指针指向需要查看数据的变量处,就会在鼠标下方显示该变量的值.
(2)"立即"窗口中断模式下,可在"立即"窗口中使用""来显示当前过程的变量值.
可选择"调试/窗口/即时"命令,打开"立即"窗口.
如图13-25所示.
(3)任务列表窗口选择"视图/其他窗口/任务列表"命令,打开"任务列表"窗口.
如图13-26所示.
任务列表窗口列出了应用程序的所有语法错误,并且指明发生错误的文件路径,标识出发生语法错误所在的代码行号.
如果要修改某一错误可双击该错误,则直接定位到错误在代码窗口中的所在位置,可进行修改.
(4)"自动变量"窗口选择"调试/窗口/自动变量命令,打开"自动变量"窗口.
自动窗口是程序运行过程中显示当前所执行语句的变量和变量值的窗口,自动窗口随着程序运行会显示不同的变量及不同的变量结果,其显示内容是随程序运行而变化的.
图13-25"立即"窗口图13-26"任务列表"窗口4.
动态跟踪应用程序动态跟踪有几种方式:逐语句、逐过程、跳出.
下面介绍逐语句的使用方式.
逐语句执行方式为一次执行一条语句.
这种执行方式又称单步执行.
每执行一条语句之后,可以利用"即时"窗口、"自动变量"窗口、"监视"窗口查看语句执行的效果.
可选择"调试/逐语句"命令或工具栏上的"逐语句"按钮或热键F11来启动单步执行.
极光KVM怎么样?极光KVM本月主打产品:美西CN2双向,1H1G100M,189/年!在美西CN2资源“一兆难求”的大环境下,CN2+大带宽 是很多用户的福音,也是商家实力的象征。目前,极光KVM在7月份的促销,7月促销,美国CN2 GIA大带宽vps,洛杉矶联通cuvip,14元/月起;香港CN2+BGP仅19元/月起,这次补货,机会,不要错过了。点击进入:极光KVM官方网站地址极光KVM七月...
月神科技怎么样?月神科技是由江西月神科技有限公司运营的一家自营云产品的IDC服务商,提供香港安畅、香港沙田、美国CERA、华中电信等机房资源,月神科技有自己的用户群和拥有创宇认证,并且也有电商企业将业务架设在月神科技的平台上。目前,香港CN2云服务器、洛杉矶CN2云主机、华中电信高防vps,月付20元起。点击进入:月神科技官方网站地址月神科技vps优惠信息:香港安畅CN2-GIA低至20元核心:2...
ttcloud怎么样?ttcloud是一家海外服务器厂商,运营服务器已经有10年时间,公司注册地址在香港地区,业务范围包括服务器托管,机柜托管,独立服务器等在内的多种服务。我们后台工单支持英文和中文服务。TTcloud最近推出了新上架的日本独立服务器促销活动,价格 $70/月起,季付送10Mbps带宽。也可以跟进客户的需求进行各种DIY定制。点击进入:ttcloud官方网站地址TTcloud拥有自...