资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Visual Basic.NET,软件开发技术,第,1,章,VB.NET,概述,第,1,单元 创建一个简单的应用示例,创建和使用,Visual Basic.NET,应用程序的六个步骤:,1,)新建解决方案和项目;,2,)建立应用程序页面;,3,)设置属性;,4,)编写代码;,5,)保存并调试;,6,)编译、运行;,第二单元,.NET,体系结构,.NET,框架由两个主要组件构成:公共语言运行库和,.NET,框架类库。,(,一,),公共语言运行库(,CLR,),公共语言运行库,是管理代码执行的环境。它提供了多种核心服务,例如代码编译、内存分配、线程管理以及垃圾回收等等。,由于有了公共语言运行库,实现跨语言兼容性才成为可能。,(,二,).NET,框架类库,.NET,框架类库,是一个综合性的面向对象的可重用类型集合。包括类、接口和值类型,可以加速和优化开发过程并提供对系统功能的访问。,.NET,框架类库是生成,.NET,应用程序,组件和控件的基础。主要完成以下任务:,表示基础数据类型和异常;,风封装数据结构;,执行,I/O,;,访问关于加载类型的信息;,调用,.NET,框架安全检查;,提供数据访问,多客户端,GUI,和服务器控制的客户端,GUI,;,命名空间,类库被组织到命名空间中,,命名空间,是执行相关功能的类型的逻辑分组。,.NET,框架类库中的命名空间是按照层次关系组织的。,.NET,框架的根(,Root,)是,System,命名空间。其它命名空间可以用,“,.,”,运算符访问。举例,典型的命名空间的结构如下:,System,System.Data,System.Data.SQLClient,第三单元,.NET,应用程序的编译和执行,编译阶段:,当编译,.Net,应用程序时,编译器不是将源代码编译成机器语言,而是将源代码编译成一种,中间语言,(,MSIL,或,IL,)。,除了将源代码解释成中间语言外,在编译过程中编译器还生成和程序相关的元数据。元数据包含程序的相关描述,如类和接口、可靠性以及程序设计过程中所使用组件的版本。,在编译器生成的集合中,中间语言和元数据进行链接。,然后,编译器创建,.EXE,或,.DLL,文件。,运行阶段:,当运行,.EXE,或,.DLL,文件时,被转换成中间语言的源代码和所有来自基础类库的其他的相关信息被传送到类加载器中。,源代码被运行前,,.NET Framework,必须将,中间语言转换成机器语言,或,CPU,所能识别的代码。(即时(,JIT,)编译器的作用就是将源代码从中间语言转换成有管理的本地代码。),JIT,编译器仅编译程序执行阶段所需的代码,而不是编译所有中间语言代码。在运行过程中,当调用到未编译的方法时,,JIT,编译器就将该方法的中间语言转换为本地代码。,在,JIT,编译期间将会检查代码的类型安全。类型安全可以确保总是以相互匹配的方式访问对象。,第四单元,VB.NET,的功能新特点,与,Visual Basic 6.0,相比较,,Visual Basic.NET,的新功能特点:,继承,默认情况下,,Visual Basic.NET,创建的所有类都是可继承的;,异常处理,通过使用增强版本的,Try,Catch,Finally,语法支持,“,结构化异常处理,”,;,数据类型,引入了,3,种新的数据类型;,接口,引入了,Interface,语句,能够从类将真正的接口定义为独特的实体,并用,Implements,关键字来实现这些接口;,委托,可用于调用其他对象方法的对象;,共享成员,共享成员是可以被一个类的所有实例所共享的属性、过程和字段。一些编程语言也称为,“,静态成员,”,;,引用,引用允许使用在其他程序集中定义的对象。添加对程序集的引用时,可以将,Imports,语句添加到控制该程序集的命名空间在模块内的可见性模块。,命名空间,命名空间通过按照层次结构组织类,接口和方法来避免命名冲突。而命名空间可以包含其他命名空间,命名空间避免了使用类时的多义性并简化了引用。在,.NET,环境中新建一个项目时,创建的项目就是一个命名空间,名称就是项目名。,特性,特性是类似标记的关键字,通过特效可以指定在,Visual Basic.NET,应用程序中定义实体的附加信息。,多线程处理,通过在独立于用户接口的线程中运行复杂任务,多线程处理提高了应用程序对用户输入的响应能力。,第,2,章,Visual Basic.NET,入门,第一单元,Visual Studio.NET,集成开发环境的组成,Visual Studio.NET,的集成开发环境(,IDE,)集成了许多功能,如设计、编辑、编译、调试等等。,目前,,Visual Studio.NET IDE,支持,Visual Basic,、,Visual C+,和,C,等语言,是开发符合,.NET,框架的各种项目的理想工具。,第二单元 编写案例程序,在,Visual Studio.NET,中,应用程序可以用一个或多个条款组成,如各种文件和文件夹等。,一个,项目,包含了许多相关的条款,例如,你可以创建一个包括用户界面、数据处理、数据库连接等条款的项目。一个包含了若干相关条款的项目就构成了一个应用程序。,解决方案,通常是作为一个或多个项目的容器,各个项目协同合作共同创建应用程序。,(,一,),在,Visual Studio.NET,中创建一个解决方案,【,文件,】,【,新建,】,【,空白解决方案,】,,来建立一个新的解决方案。,(,二,),在,Visual Studio.NET,中创建一个项目,【,文件,】,【,新建,】,【,项目,】,,来创建一个项目。,Visual Basic,中可以使用的各种模板的描述,l,Windows,应用程序:该模板用于创建传统的单机,Windows,应用程序;,l,类库:该模板用于创建类或可重用的组件;,l,Windows,控件库:该模板用于创建一些可添加到用户界面中的客户端控制程序,例如,你可以创建一个用于转换各国货币值的控制程序,当你开发销售程序的时候添加上去。,ASP.NET Web,应用程序:该模板可用以创建,Web,应用程序。为了能够创建,ASP.NET Web,应用程序,你必须在你的机器上安装因特网信息服务(,IIS,),5.0,。,l,控制台应用程序:该模板可用以创建能够通过命令行运行的控制台应用程序,控制台应用程序具有用户接口这一特征。,控制台应用程序,举例如下:,Sub Main(),System.Console.WriteLine(,欢迎你的到来!,),System.Console.Write(,请输入你的名字:,),Dim strName As String,strName=System.Console.ReadLine(),System.Console.WriteLine(strName&,你已经成功登录了!,),System.Console.ReadLine(),End Sub,Windows,窗体,Windows,窗体是从,System.Windows.Forms.Form,中继承下来的对象,每个,Windows,窗体都具有各种预先已定义的属性、方法和事件。我们可以使用这些预先定义的属性、方法和事件控制窗体的外观和行为。,注意:,其实,,Windows,窗体就是一个类,该类从,System.Windows.Forms.Form,中继承下来,在新建窗体时,,Visual Basic.NET,会自动,在,Form1.vb,文件中保存了新建的窗体类的描述。,Windows,窗体的属性,Windows,窗体的常用方法,例子:,Dim frmLg As New,frmLogin,为登录窗体类定义一个对象,frmLg.Show(),弹出显示登录窗体,frmLg.Close(),关闭登录窗体,当窗体对象调用了,Close,方法后,窗体(包括窗体中的所有资源,如控件等)都会被标记为垃圾回收。,当然,通过,Me,关键字,可以引用当前正在其中执行代码的类或结构的特定实例,如下所示:,Me,.Close(),关闭当前窗体,Windows,窗体的常用事件,为,Microsoft Windows,编写的应用程序是由消息驱动的,,Windows,将消息发送到适当的窗口以响应某些事件,例如鼠标单击、击键、窗口移动等。,事件,是一个信号,它告知应用程序有重要情况发生。例如,用户单击窗体上的某个按钮时,按钮引发一个,Click,事件并调用一个处理该事件的过程。,第三单元,VB.NET,的语言特征,数据类型,数据类型转换函数,常量,常量可分为两种,直接常量,例如:,3.14,“,hello world,”,Dim a As Char,a=Ac,a=Chr(65),符号常量,例如:,Const PI As Integer=3.14,变量,变量的命名规则:,l,VB.NET,的变量名最长不能超过,255,个字符;,l,变量名称必须以字母或下划线开头,后面可以跟随任意个数字、字母以及下划线;,l,VB.NET,对变量中字母的大小写不加以区分;,l,不能把,VB.NET,保留的关键字作为变量名,一般应把变量名的第一个字母大写;,在程序设计过程中,强烈建议变量命名由变量的类型前缀加上变量用途来表示,例如:,Dim intTotal As Integer,变量的声明,使用,Dim,语句来声明变量,其形式如下:,Dim,变量名,As,数据类型,例如:,Dim intX As Integer=99,Dim strY As String=,You are welcome!,变量的作用范围,变量一般分为局部变量和全局变量,其中局部变量是过程级变量,局部变量,在过程内,使用,Dim,声明。,全局变量的作用范围是整个程序,包括各个过程。全局变量,在过程块之外,、,Class,或,Module,块之内声明。,Private,Sub Button1_Click(ByVal,sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click,Dim intX As Integer,intX=1,For,intX=1 To 10,Dim intY As Integer,MessageBox.Show(intX=&intX),MessageBox.Show(intY=&intY),Next,MessageBox.Show(intX=&intX),MessageBox.Show(intY=&intY),End Sub,数组,数组的声明有两种方式:,方式一:,Dim,数组名,(,数组元素个数,-1)as,数据类型,例如:,Dim intAge(3)as Integer,表示定义了一个,intAge,数组,它包含,4,个元素,方式二,也可以使用下面的语句来声明数组:,Dim,数组名,()as,数据类型,=New Integer(,数组元素个数,-1),初始化数列,例如定义一个包含,4,个元素的整型数组:,Dim intAge()As Integer=New Integer(3),数组元素的赋值和引用,在,声明数组的同时给数组元素赋值,:,方式一:,Dim intAge()As Integer=18,19,20,21,MessageBox.Show(intAge(0),这一种方式,,不能指定数组的大小,,编译器根据初始化数列的个数来决定数组的大小。,方式二:,Dim intAge()As Integer=New Integer(3)18,19,20,21,MessageBox.Show(intAge(0),这一种方式,要指定数组的大小,而且要么不能有初始化数列(但大括号要保留),要么全部数组元素都要进行赋值。,复制数组,方式一:使用,Clone,方法,举例:,Dim arr1(2),arr2(2)As Integer,arr1(0)=0,arr1(1)=1,arr1(2)=2,arr2=arr1.Clone,Dim intI As Integer,For Each intI In arr2,MessageBox.Show(intI),Next,方式二:逐个元素复制,Dim i As Integer=0,For i=0 To 2,arr2(i)=arr1(i),Next,重设数组大小,通过使用,ReDim,关键字重新设置数组的大小。,例如,将,intAge,数组的大小重新设置为,20,:,ReDim intAge(19),当然,在使用,ReDim,语句时,数组现有的内容会被删除。如果需要保留数组现有的内容,字使用,ReDim,语句时要加上,Preserve,关键字,例如:,ReDim,Preserve,intAge(19),用,UBound,函数得到数组的最大可用下标,:,例子:,Dim intAge()As Integer=20,18,21,19,定义了,intAge,数组用于保存学生的年龄,Dim strTmp As String=,每个学生的年龄是:,Dim intSum As Integer=0,Dim intI As Integer=0,For intI=0 To,UBound(intAge),通过,UBound,函数取得数组的最大可用下标,数组拥有的元素个数为,UBound(intAge),1,intSum+=intAge(intI),strTmp=strTmp&intAge(intI)&,Next,strTmp=strTmp&Chr(10)&,平均年龄是:,&intSum/(,UBound(intAge)+1,),MessageBox.Show(strTmp),用,Sort,函数对数组元素进行排序,例子:,Dim intAge()As Integer=20,18,21,19,intAge.Sort(intAge),Dim strTmp As String=,每个学生的年龄,(,从小到大,),分别是:,Dim intI As Integer=0,For intI=0 To UBound(intAge),strTmp=strTmp&intAge(intI)&,Next,MessageBox.Show(strTmp),使用函数,Reverse,函数翻转数组元素的顺序;例如:,intAge.Reverse(intAge),二维数组,例子:,Dim intAge(4,19)As Integer,声明一个包含,5,20,个元素的二维数组,intAge(0,0)=18,intAge(4,19)=19,MessageBox.Show(intAge(4,19),或,Dim intAge(,)As Integer=New Integer(4,19),intAge(0,0)=18,intAge(4,19)=19,MessageBox.Show(intAge(4,19),使用,GetLength,函数返回指定维的元素个数,例如:,Dim intAge(4,19)As Integer 声明一个包含520个元素的二维数组,MessageBox.Show(intAge.GetLength(0),MessageBox.Show(intAge.GetLength(1),运算符,(,一,),赋值运算符,赋值运算符,“,=,”,的作用就是把右操作数的值复制一份给左操作数,举例说明如下:,intY=3,把,3,赋给变量,intY,,变量,intY,以后的值就是,3,了;,intY=intX;,把,intX,的值赋给,intY,;,(,二,),算术运算符,在算术运算符中,*、,/,、,Mod,、,、,同级别,,+,、,-,同级别,但*、,/,、,Mod,的级别高于,+,、,-,的级别,优先级高的运算符先运算。,但是,如果两个运算符有相同的优先级,那么,则使用从左到右的规则进行运算。,举例说明:,x=10-2*3;,x,的结果是,4,,因为,*,比,-,的优先级高;,y=10/2*5;,y,的结果是,25,,因为,/,与,*,的优先级相同,所以从左到右运算;,注意,a.,两个整数相除的结果是整数,如果商含有小数部分,将被截掉,例如:,Dim x,y As Integer,x=21/6,y=21/7,结果是,x,和,y,的值都是,3,。,b.,当把不同类型的表达式赋值给一个变量时,编译器会试着隐式地将右操作数的类型转换成被赋值变量的类型。例如:,Dim x As Integer,x,为整型,x=3.14,浮点类型的表达式赋值给整型型的变量,可以吗?,MessageBox.Show(x),输出的结果是,3,;,3.14,被转换成整型文字常量,3,,然后赋值给变量,x,,所以,x,的值为,3,。,(三)自反算术赋值运算符,举例说明如下:,Dim x As Integer=1,x+=2,此表达式与,x=x+2;,相同;,1,加上,2,,并把结果,3,赋值给,x,;,MessageBox.Show(x),结果是,3,;,(四)关系运算符,Like,运算符,Like,运算符用于比较两个字符串,字符串中可带有通配符。,Dim str As String=Hello world,If str Like He*Then,MessageBox.Show(,通配成功,),Else,MessageBox.Show(,通配失败,),End If,Is,运算符,Is,运算符确定两个对象引用是否引用同一个对象。但是,它不执行值比较。如果,object1,和,object2,都引用同一个对象,则,result,为,True,;否则,result,为,False,。,举例:,Dim btn1 As New Button,Dim btn2 As New Button,Dim btn2 As Button,btn2=btn1,If btn1 Is btn2 Then,MessageBox.Show(,引用了同一对象,),Else,MessageBox.Show(,引用了不同对象,),End If,举例,2,:,Dim str As String,Str=hello world,If str Is Nothing Then,MessageBox.Show(,空对象,),Else,MessageBox.Show(,实例对象,),End If,Dim btn As New Button,Dim btn As Button,(五)逻辑运算符,(六)字符串运算符,注意,注意:字符串类型要连接整型(或浮点型等其他数字类型),不能使用连接加运算符,否则会产生错误。,流程控制结构,If,语句的语法如下:,If,条件表达式,Then,语句,1,Else,语句,2,End If,举例:说明如下,求两数的大者,Dim x,y As Integer,x=1,y=2,If x y Then,MessageBox.Show(,最大者是,&x),Else,MessageBox.Show(,最大者是,&y),End If,注意:,If,语句可以嵌套使用,例如,求三个数的大者:,Dim x,y,z As Integer,x=1,y=2,z=3,If x y And x z Then,MessageBox.Show(,最大者是,&x),Else,If y z Then,MessageBox.Show(,最大者是,&y),Else,MessageBox.Show(,最大者是,&z),End If,End If,条件表达式通常是逻辑表达式,其结果通常是,True,或是,False,;,但也可以是算术表单式,则结果为零或非零,零代表,False,,非零代表,True,。举例如下:,Dim x,y,z As Integer,x=0,If x Then,MessageBox.Show(,输入正确,,X,的值为非零值!,),Else,MessageBox.Show(,输入错误,,X,的值不可以为零!,),End If,可以用,If.Then.Else.Else If.End If,语句进行多条件判断。举例如下,将输入的成绩等级转换为相应的分数:,Dim chrC As Char,声明了一个字符常量,chrC,chrC=bc,把字符常量,“,b,”,赋值给字符变量,chrC,,,bc,中后跟的,c,是用于标识常量,“,b,”,是字符常量,If chrC=ac Then,MessageBox.Show(,成绩为,90,分,!),ElseIf chrC=bc Then,MessageBox.Show(,成绩为,80,分,!),ElseIf chrC=cc Then,MessageBox.Show(,成绩为,70,分,!),ElseIf chrC=d Then,MessageBox.Show(,成绩为,60,分,!),Else,MessageBox.Show(,不及格,!),End If,(,二,)Select Case.End Select,语句,Select Case,语句的语法如下,见书本,P52,:,Select Case,条件表达式,Case,常量表达式,1,语句,1,Case,常量表达式,2,Case,常量表达式,n,语句,n,Case Else,语句,n+1,End Select,举例如下,:,Dim chrC As Char,chrC=bc,Select Case chrC,Case ac,MessageBox.Show(,成绩为,90,分,!),Case bc,MessageBox.Show(,成绩为,80,分,!),Case cc,MessageBox.Show(,成绩为,70,分,!),Case dc,MessageBox.Show(,成绩为,60,分,!),Case Else,MessageBox.Show(,不及格,!),End Select,(,五,)For.Next,语句,当知道循环的次数时,最好是使用,For.Next,语句,只有循环控制变量没有超出终值,循环就会执行下去。,For,循环最普遍的用法是遍历一个定长的数据结构,如,数组等。,For.Next,语句的语法如下,见书本,P54,:,For,循环控制变量初值,To,终值,Step,步长,语句,1,Next,如果不指定步长,则默认步长是增加,1,。,举例如下:,Dim intX,intSum As Integer,intSum=0,For intX=1 To 9 Step 1,intSum+=intX,Next,MessageBox.Show(,总和是,&intSum),(,三,)While.End While,语句,While.End While,语句的语法如下,见书本,P56,:,While,条件表达式,语句,1,End While,举例说明如下,求,1+2+3+,+9,的总和:,Dim intX,intSum As Integer,intX=1,intSum=0,While intX 10,intSum+=intX,intX+=1,End While,MessageBox.Show(,总和是,&intSum),Exit While,语句,举例,Dim intX,intSum As Integer,intX=1,intSum=0,While True,intSum+=intX,intX+=1,If intX=10 Then,Exit While,End If,End While,MessageBox.Show(,总和是,&intSum),(,四,)Do.Loop,语句,Do.Loop,语句也是用于重复执行一组特定的语句,可以用,While,关键字或,Until,关键字与,Do.Loop,语句结合使用。,依然还是求,1+2+3+,+9,的总和,举例如下,,Dim intX,intSum As Integer,intX=1,intSum=0,Do While intX 10,intSum+=intX,intX+=1,Loop,MessageBox.Show(,总和是,&intSum),也可以使用,Do.Loop While,形式,它与,Do While.Loop,形式有所不同,采用,Do.Loop While,形式,就算条件表达式一开始就不成立,但循环体至少也要执行一次。,也可以使用,Do Until.Loop,语句,与,Do While.Loop,刚好相反,,Do Until.Loop,只有条件表达式不成立,循环都会一直被执行,直到条件表达式成立为止。,补充:常用系统函数,数学函数,举例如下:,Dim dblI As Double,dblI=,Math.Sqrt(9),MessageBox.Show(dblI),字符处理函数,举例如下:,Dim intI As Integer,intI=,InStr,(Hello world,or),MessageBox.Show(intI),随机函数,举例如下,使用,Rnd,函数生成一个,1,到,6,之间的随机整数值:,Dim intX As Integer,For intI As Integer=0 To 9,intX=CInt(Int(6*Rnd()+1),MessageBox.Show(intX),Next,若要生成某给定范围内的随机整数,可使用此公式:,CInt(Int(upperbound-lowerbound+1)*Rnd()+lowerbound),日期时间函数,举例如下:,Dim dteI As Date,dteI=Now(),MessageBox.Show(dteI),DateAdd(),函数,举例如下:,Dim dteI,dteJ As Date,dteI=Now(),dteJ=DateAdd(DateInterval.WeekOfYear,1,dteI),MessageBox.Show(现在是:&dteI&;一个星期后是:&dteJ),DateDiff(),函数,举例如下:,Dim dteI,dteJ As Date,dteI=Now(),dteJ=#10/6/2006#,MessageBox.Show(距离中秋还有:&DateDiff(DateInterval.Day,dteI,dteJ)&天),InputBox(),函数,举例如下:,Dim str As String,str=InputBox(请输入你的名字,注册窗体),MessageBox.Show(你输入的是:&str),MsgBox(),函数,举例如下:,Dim intI As Integer,intI=MsgBox(请问你是否要继续执行演示操作?,MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Critical,重要询问),MessageBox.Show(你选择的是:&intI),第,3,章,Visual Basic.NET,的常用控件,控件的基本概念,控件,是放置在,Windows,窗体上,供用户与应用程序发生交互的对象。,每种类型的控件都具有其自己的属性集、方法和事件,以使该控件适合于特定用途。,控件的属性,在程序设计期间,我们可以通过属性窗口设置、修改各个控件的属性;,在程序运行期间,我们也可以通过代码来取得、设置、修改各个控件的属性。,(,一,)Label,控件,Label,控件只能用于显示文本,不能用于编辑文本,通常用它来标识一些不便于显示文本的控件。,举例如下,当点击,【,登录,】,按钮后,将提示信息,“,用户名:,”,改为,“,输入错误:,”,,并把背景颜色改为红色:,lblUserName.Text=,输入错误:,lblUserName.BackColor=Color.Red,TextBox,控件,TextBox,控件主要用于接收用户输入的文本信息,也可以向用户显示文本信息。,举例如下,当点击,【,登录,】,按钮后,判断用户输入的,“,用户名,”,和,“,密码,”,,如果输入正确则清空用户输入的,“,用户名,”,和,“,密码,”,信息,如果输入错误,将,txtPassWord,文本框的背景颜色改为红色:,If txtUserName.Text=guest And txtPassword.Text=123 Then,txtUserName.Text=,txtPassword.Text=,Else,txtPassword.BackColor=Color.Red,End If,Button,控件,Button,控件主要用于引发事件,执行相关的动作。,举例如下:当点击,【,登录,】,按钮,如果合法登录后,则将,【,登录,】,按钮设为不可用,禁止用户再次登录。,If txtUserName.Text=guest And txtPassword.Text=123 Then,btnLongin.Enabled=False,End If,控件的方法,方法是与对象关联的过程。与属性不同,方法表示对象可以执行的操作,方法可以影响属性的值。,例如,在,TextBox,控件上,可以使用,AppendText,方法或,Clear,方法,更改,Text,属性的值。,不同的方法有不同的使用方式,这取决于方法所需的参数数量以及方法是否返回值。,Label,控件,举例如下:当登录窗口不再需要输入密码的时候,我们可以通过使用,Hide(),方法,把,lblPassWord,标签隐藏掉,等到需要输入密码时,再使用,Show(),方法把它显示处理。,lblPassWord.Hide(),lblPassWord.Show(),TextBox,控件,举例如下:我们可以通过上述属性,制作一个简单的文本编辑器。,在窗体中添加一个,TextBox,控件,并命名为,txtT,添加一个,Button,控件,并显示文字,“,复制,”,,双击控件,添加代码,txtT.Copy(),添加一个,Button,控件,并显示文字,“,剪切,”,,双击控件,添加代码,txtT.Cut(),添加一个,Button,控件,并显示文字,“,粘贴,”,,双击控件,添加代码,txtT.Paste(),添加一个,Button,控件,并显示文字,“,撤消,”,,双击控件,添加代码,txtT.Undo(),添加一个,Button,控件,并显示文字,“,清空内容,”,,双击控件,添加代码,txtT.Clear(),添加一个,Button,控件,并显示文字,“,选择全部,”,,双击控件,添加代码,txtT.SelectAll(),Button,控件,举例如下:当点击,【,登录,】,按钮,如果合法登录后,则将,【,登录,】,按钮设为不可见,禁止用户再次登录;如果登录不合法,则产生提示信息,并将焦点置于接收密码文本框,以便用户再次输入密码。,If txtUserName.Text=guest And txtPassword.Text=123 Then,btnLongin.Hide(),Else,MessageBox.Show(,输入错误,请与管理员联系!,),txtPassword.Focus(),End If,控件的事件,Visual Studio.NET,开发的,Windows,应用程序都是事件驱动的,即执行流程是由外界发生的事件所确定的。,事件是一个信号,它告知应用程序有重要情况发生。例如,用户单击窗体上的某个按钮时,窗体引发一个,Click,事件并调用一个处理该事件的过程。,任何能引发事件的对象都是事件发送者,也称,事件源,。窗体、控件和用户定义的对象都可以是事件源。,事件处理程序,是相应事件发生时调用的过程,我们可以将任何有效,Sub,过程用作事件处理程序。,注意:,WithEvents,关键字指示被声明的对象可以引发事件;,Handles,关键字用于声明处理指定的事件的过程;,例如,在设计模式下双击窗体上的,Button1,按钮时,,Visual Basic.NET,会为命令按钮创建一个空事件处理程序和一个,WithEvents,变量,如以下示例所示:,声明事件源,Button1,Friend,WithEvents,Button1 As System.Windows.Forms.Button,事件处理程序,Protected Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs),Handles,Button1.Click,End Sub,其他控件,因为其他控件大部分的属性、方法及事件与前面介绍的,Label,、,TextBox,、,Button,控件相类似,遇到困难请查阅,MSDN,。,对象命名约定,考虑到团队,在程序开发的过程中要求每个人都应该用一致的前缀来命名对象,使人们容易识别对象的类型。,特殊控件,一、,Timer,控件,Timer,是按标准时间间隔引发事件的组件;,时间间隔的长度由,Interval,属性定义,其值以毫秒为单位;,若启用了该组件,则每个时间间隔引发一个,Tick,事件;,二、,PictureBox,控件,PictureBox,控件用于显示位图、,GIF,、,JPEG,、图元文件或图标格式的图形;,使用,Image,类的,FromFile,方法设置,Image,属性;,设置,PictureBox,控件的,SizeMode,属性以达成以下目的:,将图片的左上角与控件的左上角对齐,使图片在控件内居中,调整控件的大小以适合其显示的图片,拉伸所显示的任何图片以适合控件,过程,过程概述,过程,可以被看作是一组由用户定义的操作,它包含了实现这一操作所需的语句。,Visual Basic.NET,具有三种不同类型的过程:,Sub,过程:执行操作但并不将值返回给呼叫代码。(事件处理过程就是为响应由用户操作或程序中的事件引发的事件而执行的,Sub,过程。),Function,过程:执行操作并将值返回给呼叫代码。,Sub,过程,Sub,过程,就是是包含在,Sub,语句和,End Sub,语句中的一系列语句块。,每次调用过程的时候都会执行过程中的语句,从,Sub,语句后的第一个可执行语句开始,到遇到的第一个,End Sub,、,Exit Sub,或,RETurn,语句结束。,Sub,过程执行操作但并不返回值。它能够带参数,如呼叫代码传递给它的常数、变量或表达式。,可以在模块、类和结构中声明,Sub,过程。例如,声明一个过程,用于判断用户的某个输入是否为空值:,Public Sub checkValue(ByVal strInput As String),If strInput=Then,MessageBox.Show(,此处输入不能为空!,),End If,End Sub,当声明了,Sub,过程后,我们就可以在程序的其他地方调用这个过程,Dim strTmp As String,checkValue(strTmp),Sub,过程的声明,声明,Sub,过程的语法如下所示:,访问修饰符,Sub,过程名,(,参数列,),End Sub,访问修饰符可以是,Public,、,Protected,、,Friend,、,Protected Friend,或,Private,。默认情况下它们是,Public,。,参数声明,在声明过程中,我们需要定义一个参数列,参数列由若干个参数组成,各个参数之间用逗号隔开。,使用参数的目的是用于从呼叫代码中传递信息(数据)给被调用的过程。当然,如果你不需要传递信息的话,参数列可以为空,但是,过程后跟的括号必须保留。,参数列表中每个参数的语法如下所示:,ByVal|ByRef,参数名,As,参数类型,ByVal,:,ByVal,关键字用于声明该参数是值传递机制。,ByVal,是参数声明中的默认值。,ByRef,:,ByRef,关键字用于声明该参数是引用传递机制。,过程调用,调用,Sub,过程只需使用过程名即可,语法如下所示:,Call,过程名
展开阅读全文