1、VB程序设计教程全册配套精品完整课件课程总体情况与要求 一、课程的地位与作用一、课程的地位与作用 计算机已在各个领域和学科得到了广泛且深层计算机已在各个领域和学科得到了广泛且深层次的应用。本课程旨在让非信息类专业的学生次的应用。本课程旨在让非信息类专业的学生通过学习通过学习Visual Basic编程语言,掌握:编程语言,掌握: 程序设计的一般规律程序设计的一般规律 基本思想和常用算法基本思想和常用算法 能独立编制能独立编制Windows平台下的简单应用程序平台下的简单应用程序 培养其使用计算机分析问题、解决问题的能力,为培养其使用计算机分析问题、解决问题的能力,为进一步学习打下坚实的基础进一
2、步学习打下坚实的基础课程总体情况与要求 教学目标教学目标 通过本课程的学习,掌握:通过本课程的学习,掌握: 面向对象的程序设计思想面向对象的程序设计思想 事件驱动的编程机制事件驱动的编程机制 掌握掌握Visual Basic的基本概念和语言特性的基本概念和语言特性 程序设计的基本方法和技巧程序设计的基本方法和技巧 能独立编制简单的应用程序能独立编制简单的应用程序课程总体情况与要求 基本要求基本要求 掌握程序设计的概念掌握程序设计的概念 面向对象语言的特点面向对象语言的特点 Visual Basic集成环境的使用方法集成环境的使用方法 VB的数据类型、变量、常量、数组和运算符的使的数据类型、变量
3、、常量、数组和运算符的使用用 过程(包括函数)的定义和调用方法过程(包括函数)的定义和调用方法 内部控件和内部函数的用法内部控件和内部函数的用法 文件操作的应用文件操作的应用 常用的算法和基本的编程技巧常用的算法和基本的编程技巧课程总体情况与要求课程总体情况与要求 考核方式考核方式 平时作业情况,平时作业情况,10分分 3次随堂小测验,每次次随堂小测验,每次10分,共分,共30分分 上机实验上机实验(出勤情况、上机作业、遵守纪律出勤情况、上机作业、遵守纪律等等),共,共10分分 期末考试,笔试期末考试,笔试50分分课程总体情况与要求 课程特点课程特点 理论抽象,需要理解理论抽象,需要理解 知识
4、繁杂,需要记忆知识繁杂,需要记忆 操作技能,需要实践操作技能,需要实践课程总体情况与要求 学习方法学习方法 勤学好问,勤学苦练勤学好问,勤学苦练 课前预习,认真听讲,课后总结,习题作业课前预习,认真听讲,课后总结,习题作业 实践出真知,重视上机实验,实验指导书实践出真知,重视上机实验,实验指导书 网络课程:网络课程:http:/ 学习素材学习素材(多媒体教学课件、学习资料、课多媒体教学课件、学习资料、课外书外书课程总体情况与要求课程总体情况与要求课程总体情况与要求课程总体情况与要求Visual Basic程序设计 课件 1.0版目录Visual Basic程序设计 课件 1.0版目 录 2 程
5、序设计入门3 数据类型、常量与变量4 运算符与表达式5 控制结构6 过程8 内部控件10 绘图11 多模块程序设计7 数组与自定义数据类型12 文件操作1 引言9 内部函数打开各章例题打开各章习题关闭本课件计算机编程语言的分类程序的执行方式和运行环境(1)机器语言(2)汇编语言(3)面向过程的语言(如:C、Fortran、Basic、Pascal等 )(4)面向对象的语言(如Visual Basic、C+、C#、Java、Object Pascal 等)(1)解释型。源程序必须在编程环境的支持下才能运行。(2)编译型。生成直接运行于操作系统之上的可执行文件.exe。编译型具有执行速度快,代码效
6、率高,保密性好等优点。面向对象的基本概念“对象”与“类” 的概念任何事物都可以被看作“对象”(Object)“类”(Class)是同种对象的总称。例如:“人”是一个类,每个具体的人是一个对象。在程序设计中,类和对象是事先定义好的。例如:“按钮”是一个类,每个具体的按钮是一个对象。属性名称 =XX 材料= XX直径 = XX颜色 = XX厚度 = XX方法飘浮上升下降膨胀缩小爆炸事件被释放被扎被打气被放气对象:一只气球面向对象的PME模型任何对象都可以从以下三个方面进行描述:(1)“属性”(Property)对象所具有的特性。(2)“方法”(Method)对象可能执行的操作或行为。(3)“事件”
7、(Event)对象可以识别并作出反应的外部刺激。属性姓名 = 张三性别 = 男身高 = 1.7米国藉 = 中国年龄 = 19岁 方法跑步学习 笑 唱歌 事件遇到高兴的事情 下课了.对象:一个人不同对象之间的关系 一个“系统”是由多个相互联系的对象组成(对象的数目和种类由系统的复杂程度决定)。同一系统中的对象之间通过相互作用(方法与事件)来改变各自的属性,使整个系统保持运动和发展。 对于同一个对象,它的属性、方法和事件之间存在极为密切的关系:事件的发生方法的执行属性的改变。 Visual Basic的优点是语言简单易学,引入了“面向对象”和“事件驱动”等先进思想,支持ActiveX控件、VBS和
8、VBA,对网络和数据库的编程有良好的支持,拥有完全的中文界面和帮助系统。缺点是可移植性不好,只适用于32位Windows。 本课程使用:VB 6中文企业版SP2WinXPMSDN帮助Visual Basic 的优点和缺点Visual Basic 简介Visual Basic 发展史VB 1.0 VB 3.0 VB 4.0 VB 5.0 VB 6.0 VB.NET 1.0 VB.NET 1.120世纪90年代初 1997年 1998年 2001年 2003年中文学习版中文专业版中文企业版VB 20052005年Visual Basic 6的启动方法(1)“开始”按钮(2)“开始”菜单(3)“程序
9、”子菜单(4)“VB6”子菜单(5)此菜单项启动VB集成环境第2章 程序设计入门工具箱工程窗口属性窗口窗体布局窗口窗体对象对象窗口Visual Basic 6的集成开发环境代码窗口立即窗口本地窗口主菜单主工具栏PictureBox 控件TextBox 控件CommandButton 控件OptionButton 控件ListBox 控件VScrollBar 控件DriveListBox 控件FileListBox 控件Line 控件Data 控件Image 控件Shape 控件DirListBox 控件Timer 控件HScrollBar 控件ComboBox 控件CheckBox 控件Fra
10、me 控件Label 控件Visual Basic 工具箱窗口Visual Basic 集成环境的“工程”窗口和“属性”窗口Visual Basic 集成环境的“对象”窗口一、向窗体上添加控件的方法(1)单击图标,再拖动(2)双击图标(3)Ctrl键单击图标,再拖动(4)复制粘贴二、选择控件的方法三、改变控件的大小和位置程序的设计、运行和中断状态(1)设计状态设置对象、编辑代码。(2)运行状态解释型地运行程序。(3)中断状态调试程序,进行排错。可以在三种状态之间进行切换。窗体(Form)对象 窗体是窗口的框架,是VB程序最基本的对象,是各类控件的容器。VB开发环境为每个窗体模块自动地创建了一个
11、窗体对象。Name:对象名。用于标识对象的字符串。对象名必须满足以下条件:(1)必须以字母开头(2)可以包含字母、数字和下划线,不能包括标点和空格(3)不能多于40个字符(4)不能与其它公共对象重名,可以与关键字相同,但应避免(5)在同一模块下,不能重名(6)建议为对象名加上类型前缀Caption:显示在窗体标题栏上的文字。BorderStyle:边框类型。决定窗体是否可缩放、标题栏是正常还是窄、是否在任务栏上出现等。该属性对MinButton、MaxButton属性的设置有影响。ControlBox:窗体是否有图标、系统菜单和最大化、最小化与关闭按钮。Icon:窗体图标。与一图标文件相联系。
12、如为“无”则使用默认图标。MaxButton与MinButton:是否显示最大化与最小化按钮,值为True或False。只有二者均为False时才不显示,否则设为False者只以无效显示。Visible:窗体是否可见,True或 False。Form对象的常用属性Left、 Top属性:窗体相对于屏幕的位置。坐标值的默认单位是缇(twip),1缇等于1/567厘米。Width 、Height属性:窗体的宽度与高度。默认单位也是缇。Moveable属性 :True/False,False时窗体不能被鼠标拖动。Enabled属性: True/False,False时窗体及上面的控件不响应用户的操作
13、。WindowState属性:取值为0、1、2,决定窗体还原、最小化、最大化状态。Picture属性: 指定一个图片文件,用为窗体的背景图。对象的每个属性反映了该对象某个方面的特性。同一个对象的不同属性之间可能相互影响。程序设计阶段可以在属性窗口中对属性的值进行设置,(有些属性不能在设计时设置;有些属性的设置只有在运行时才反映出来)。在程序进行过程中,程序代码可以读取或重新设置属性的值。有一些属性的值只能在设计阶段设置,程序运行过程中这些属性是只读的。在程序中对对象的属性进行存取要以如下格式:“对象名.属性名”。如:frmFirst.Height = 1200属性的分类运行时对象属性的读写方法
14、(1)在设计和运行状态下都可设置的属性(2)只能在设计时设置,不能在运行时设置的属性。如对象的Name属性。(3)只能在运行时设置,不能在设计时设置的属性。(4)在设计和运行状态下都可设置,但只有在运行时才能生成的属性。如Visible属性。访问对象属性的格式: 对象名.属性名如: Form1.Caption通过此格式可以读取属性的值,也可以设置属性的值。如: Form1.Caption 你好!Visual Basic 或: x = Form1.Left Move方法,语法为:对象名.Move Left, Top, Width, Height 该方法将 object 对象移动到以 left,
15、top 定义的新位置。同时可以改变该对象的大小(以 width , height为新的宽与高)。其中 left 参数必须给定。但是,要给定任何其它的参数,必须先给定出现在语法中该参数前面的全部参数。例:设frmFirst为一窗体对象名。frmFirst.Move 1000,1000,1200,2000 既移动位置,又改变大小frmFirst.Move 1000,1000只移动frmFirst.Move 1000只左右移动frmFirst.Move 1000, ,1200错误,缺少参数Move方法同时改变了Left, Top, Width与Height属性的值。效果与分别设置这些属性的值等效。H
16、ide方法,语法为:对象名.Hide 此方法将object对象隐藏,并将其Visible属性设置为 False。窗体被隐藏之后,就不能响应用户的操作。该方法无参数。 某些方法的执行改变一些属性的值,有些方法的执行结果可能受一些属性的影响。方法的执行可能等效于对一些属性的修改。Form对象的常用方法Show方法:使窗体从隐藏状态变为显示状态。对象名.Show Show方法有两个参考,将在第11章讲解。Print方法:在窗体表面上显示指的内容。对象名. Print“,|;”分隔的输出项 Print支持以逗号或分号分隔的多个输出项的值,每个输出项可以是属性、变量、常量或表达式。 默认情况下,每调用一
17、次Print方法将在窗体上显示一行内容。 Print方法的详细用法见第10章。事件是对象能够识别的外部刺激,该刺激既可能来自于用户,也可能来自于操作系统。Click事件:当用户在窗体上(除标题栏和边框)单击鼠标左键或右键时引发。Click事件过程:当对象接收到Click事件时所执行的代码。窗体的Click事件语法:Private Sub Form_Click()(语句组)End Sub用户可以把想让对象对该事件所做的反应以VB语句的形式写在事件过程中。在一个对象的事件过程中,可以设置其自身的或其它的对象的属性、执行其自身的或其它的对象的方法、甚至可以调用自身的或其它的对象的事件过程。DblCl
18、ick事件:当用户在窗体上(除标题栏和边框)快速双击鼠标键时引发。DblClick事件过程:接收到DblClick事件时执行的代码,DblClick过程语法格式:Private Sub Form_DblClick()(语句)End SubResize事件:当窗体因任何原因大小发生变化时(或第一次显示窗体时)引发引事件。在拖动边框窗体改变大小时,会连续引发多个Resize事件。Load事件:窗体在加载显示时此发此事件,常用来对窗体或控件进行初始化。窗体Form对象的常用事件“代码”窗口的使用打开【例2.2】:编写窗体的Resize事件过程 P33打开【例2.1】:编写窗体的Click和DblCl
19、ick事件过程 P32Left、 Top:命令按钮在窗体上的位置。坐标值的默认单位是缇。Width 、Height :按钮的宽度与高度。默认单位也是缇。Caption:显示在按钮表面上的文字。可以使用“&”字符与其后的字母组成快捷键。Visible: True 或False。该按钮是否可见。Enabled: True 或False。False时按钮变灰,不能被点击。Name:对象名。要符合VB对对象名的要求。建议为按钮对象名加上“cmd”前缀。Value:将该属性设为True可以触发按钮对象的Click事件。只能在运行时设置。Default:若该属性为True,则按钮对象为默认按钮。不管焦点在
20、哪个控件上,用户按回车键,均触发按钮的Click事件。默认按钮有较粗的边框。一个窗体上只能有一个按钮的Default属性为True。Cancel:若该属性为True,则按钮对象为默认的“取消”按钮。不管焦点在哪个控件上,用户按“ESC”键,均触发按钮的Click事件。常用属性TopTopLeftLeftWidth命令按钮(CommandButton)对象Move方法,此方法在窗体上移动按钮对象,参数的意义与窗体的Move方法相同。 object.Move Left, Top, Width, HeightClick事件:当用户在按钮表面上单击鼠标左键产生Click事件。另外下列方法也能触发按钮的
21、Click事件:(1) 用Tab键把焦点移动到该按钮上,然后按空格或回车键。(2)按快捷键(Alt + 具有下划线的字母)(3) 如为窗体的缺省按钮,按回车键。(4) 如为窗体的默认“取消”按钮,按ESC键。(5 )在运行阶段设置属性:object.Value = TrueClick事件过程:当对象接收到Click事件时所执行的代码。按钮的Click事件语法:Private Sub object_Click()(语句组)End Sub命令按钮对象不支持鼠标双击事件,即无DblClick事件。双击操作被理解为两个单击操作。窗体与控件事件过程名的区别:对于窗体对象,其事件过程名为“Form_事件名
22、”,与其对象名无关。对于控件对象,其事件过程名为“对象名_事件名”,用到了其对象。命令按钮对象的常用方法和事件打开【例2.3】使用按钮移动窗体 P37Left、 Top、Width 、Height、Visible、Enabled 属性与命令按钮的意义相同。Name:对象名。Text:文本框中的文本内容(默认属性)。MaxLength:限制文本框中的文本的最大长度(字符个数)。如果为0,则长度只受系统限制。MultiLine:为True时,文本框中可以显示多行内容,最多可包含32K个字符。False时,忽略换行符,最多可包含2048。ScrollBars:设置文本框的滚动条,有03共4个取值。只
23、有MultiLine属性为True时,此属性才有意义。SelLength、 SelStart和 SelText:分别为当前选定文本的长度、选定文本的起始位置(以0为起点)与选定文本的内容。这三属性只在运行时使用。Appearance:文本框是平面的还是立体的。Locked:为True时,文本框的内容不能被编辑(与将Enabled设置为False不同) 。Alignment:文本框中文本相对与文本框的对齐方式。须将MultiLine设为True。PasswordChar:设置口令字符。须将MultiLine设为False。文本框(TextBox)对象的常用属性Move方法:用法与窗体相同。Cli
24、ck事件、DblClick事件:因为文本框控件已具有内在的编辑功能,一般不必编写其Click和DlbClick事件过程。Change事件:当文本框的内容发生改变时引发Change事件。Private Sub object_Change()(语句)End Sub文本框(TextBox)对象的方法与事件打开【例2.4】编写文本框的Change事件过程 P40Left、 Top、Width 、Height、Visible、Enabled 属性与命令按钮的意义相同。Name:对象名。AutoSize和WordWrap :这两个属性决定标签大小是否随显示的文本内容变化,以及变化时是垂直还是水平扩展。Ca
25、ption:标签上显示的文字内容。可以使用“&”来为标签创建快捷键。标签本身并不能拥有输入焦点。当用户按快捷键时,会把焦点传递给Tab键次序中下一个可拥有焦点的控件。 与文本框的Text属性不同,标签控件Caption属性的值不能由用户直接修改,但可以由程序修改。 BorderStyle:TrueFalse。当此属性为True时,标签有边框。默认值为False,即无边框。标签可以用来对其它没有标题的控件(如文本框)进行说明,也可用来显示一些程序运行过程中的提示信息。标签对象显示的内容不能由用户直接修改,但由程序代码修改。常用属性标签(Label)对象标签控件支持:Move方法、Click事件、
26、DblClick事件与Change事件。当标签Caption属性值变化时,引发Change事件。因为标签控件主要的作用是描述其他控件,显示的是形态文本。一般情况下,不必编写其事件过程。Label对象的常用事件和方法打开【例2.5】标签控件的简单应用 P421. 字母的大小写问题,关键字2. 语句:程序以语句为单位,一般情况下,一条语句占一行。3. 续行:如果语句太长,可以分为连续的多行书写,这时,未完的行要以空格与下划线(称为“续行符”)结尾。注意分行时要避开关键字、对象名、过程名。如:lblMyFirst.Caption= lblMyFirst.Caption _+123134. 一行中写多
27、条语句:要在一行中写多条语句,可在多条语句之间插入冒号作为分隔。如: txtFirst.Text=“Hello” : frmOpen.Top=1000 : frmOpen.Left=1200 5. 注释:可在程序中加入以单引号开头的解释性的文字,单引号为“注释符”,这些文字为注释内容。注释内容在程序执行时被忽略。注意:在续行符后不能写注释。如: 这是1999年3月11日编写的txtMy.Text = 您好! 在文本框中向用户问好6. 行号与标号7. 英文符号与中文符号8. 程序行的缩进,与源程序的美观Visual Basic 语法规则Visual Basic开发程序的主要步骤进入VB集成开发环
28、境添加对象,编写代码保存打开源程序*.vbp、*.frm*.frx、*.bas文件解释性试运行编译可执行文件*.exe文件完成未完成或出错1 预备工作2 建立界面3 设置属性4 编写代码、进行调试5 编译工程中的模块与文件为编制一个应用程序而创建的所有源文件统称为一个“工程”(Project)。一个工程有一个工程文件(vbp,vbw),另外还有多个模块文件。(1)窗体模块窗体模块包含窗体及其控件的定义、属性设置,以及代码窗口中的程序行。窗体文件的扩展名为 .frm ,如果设置了对象的ICO或Picture属性,会生成同名的.frx文件。(2)标准模块标准模块包含数据类型、常数、变量、外部过程和
29、公共过程的公共的或模块级的定义。标准模块文件以 .bas为文件扩展名。 还可能用到其他类型的模块。(1)保存工程时先提示保存各模块文件,最后提示保存工程文件。(2)打开工程时,直接打开工程文件即可。(3)应该将一个工程中的所有文件保存在同一个文件夹中,便于管理。(4)不能在VB集成环境之外移动工程中的模块文件或对其进行重命名。这样会导致工程无法打开。保存和打开工程生成可执行文件(1)通过“文件”菜单中的“生成”命令可执行文件.exe。可指定可执行文件名和保存位置。(2)可执行文件可脱离源程序与VB环境单独运行。(3)可执行文件需要一些中间文件的支持才能运行。第3章 数据类型、常量与变量1 数值
30、型类型名中文名字节 表示范围精度Integer整型2-3276832767精确Long长整型4-2147483648 2147483647精确Single单精度浮点型 4-3.402823E 1038 3.402823 10386-7位有效数字Double双精度浮点型8-1.7976931348623210308 1.79769313486232 10308 15位有效数字Currency货币型8-922337203685477.5808 922337203685477.580715位整数,4位小数Byte字节型10255精确基本数据类型2 String(字符串型)字符串是指连续的字符序列。字
31、符串数据类型是专门用来存放文字信息的。字符串型又分为“定长字符串型”和“变长字符串型”两大类。字符串类型所占的内存空间大小 与字符串长度有关。3 Boolean(逻辑型、布尔型)Boolean类型的数据只可能有两个值:True(逻辑“真”)和False(逻辑“假”),用来表示“是”与“否”、“开”与”关”、“对”与”错”这类只有两种取值的情况。一个逻辑型数据却要占2个字节的存储空间。4 Date(日期时间型)Date类型又称为日期型,这种类型的数据可以存放日期信息、时间信息或者同时存放日期与时间信息。Date类型数据用8个字节来表示日期和时间(公元100年1月1日9999年12月31日) 。O
32、bject(对象型)和Variant(变体类型),将分别在后面节中讲解。1 字节型、整型、长整型: 十进制:1、20、500、-101 、230594 八进制:&O11、&O123错误:&O81 十六进制:&H11、&HFF 错误:&HFR2 精度浮点型: 普通记法:1.2、-1.4 科学记法:1.2E10、-1.23E-3错误:1.2E1.4、E4、12E3 逻辑型,只有两个取值:True、False4 日期型,使用“#”号作界定符: #1/1/2005#、#April 1, 2005#、#1:00:00PM#5 字符串型,使用双引号“ ”: Visual Basic 、 你好!特殊的字符串
33、: 表示一个双引号, 表示空字符串。字符串常量中的双引号必须成对出现。各种数据类型的直接常量变量:在程序执行过程中存储临时数据的命名内存单元。变量名:程序是通过变量名来保存和访问相应内容单元中的值的。在VB中变量名有如下规则:(1) 以字母开始,可以包括字母、数字和下划线;(2) 不能包含标点符号;(3) 不能多于255个字符;(4) 不能与保留关键字重复(如:End、Private、Sub) ;(5) 在同一作用域中,变量名不能重复。变量的数据类型:数据类型决定变量占用内存的大小、数据处理的方式、表示值的范围。定义变量:Dim|Static|Private|Public 变量名 As 数据类
34、型名变量赋值:通过以下形式的语句为变量赋值。变量名= 表达式赋值语句的作用是把一个表达式的值赋予一个变量,即保存到变量所占的内存空间。被赋值之后变量旧值被覆盖,变为新值。被赋的新值的类型和大小应与变量的数值类型相一致,否则会出错。另外,在过程、函数调用过程时,可以通过参数传递的方式为被调用过程中的变量赋值。引用变量的值:将变量名写到表达式中、过程函数实参表中,实际上就是对变量的值进行引用。如下式中,是将变量b和c的值求和后赋给变量a。a 的值变为新值,b和c的值被引用,并未改变。a=b+c变量1、 过程级变量 也称为“局部变量”,在过程中定义,作用域为所在的过程。定义过程级变量的方法有两种:(
35、1) Dim 变量名 AS 数据类型名动态局部变量(2) Static 变量名 AS 数据类型名静态局部变量如: Dim a As Integer 使用Dim关键字定义的局部变量只在定义它的过程执行时存在,过程执行完变量即消失。下一执行该过程时,会重新生成变量,重新初始化。 使用Static关键字定义的局部变量称为“静态变量”,它在整个程序的运行过程都存在,但是只能被定义它的过程所用。每次执行不重新进行初始化。可以在一个过程的多次执行之间保持其值。变量的作用域 变量的作用域决定了一个变量在什么代码范围内可以被访问。定义变量时使用的关键字以及定义变量的位置决定了变量的作用域。2、模块级变量 在模
36、块顶部的“通用声明段”中定义,在该模块中的所有过程中可用。 定义的方法(两种方法等价) :(1) Dim 变量名 As 类型名(2) Private 变量名 As 类型名如:Private d As Date Private S1 As String (定义变长字符串变量) Private S2 As String *4 (定义定义长字符串变量) 一个定长字符串变量所占的内存空间是一定的,当其中的字符信息没达到这个长度时,所剩的空间用户“空格“填充。如果给定长字符串变量赋一个超过其长度的字符串,会被截掉多余部分,不会出现“溢出”错误。3、 应用程序级变量 也称为“全局变量”或“公共变量” ,在
37、模块顶部的“通用声明段”中使用Public关键字定义。全局变量在程序(即同一个工程中)的所有模块中皆可用。Public 变量名 As 类型名如:Public p As Boolean注:不能在窗体模块中定义全局定长字符串变量。 访问另一个模块中定义的全局变量,应在变量名前加模块名修饰。如 Form2.int1 = 2 在没有重名的情况下,访问标准模块中的全局变量,不必加模块名。一条语句定义多个变量Public|Private|Dim|Static变量1 As 类型1,变量2 As 类型2 每个变量都要指明类型,否则被定义为变体类型。例如,下面语句定义了三个模块级变量,其中a和b是变体类型,c是
38、整型: Private a, b, c As Integer 下面的语句定义的三个变量都是整型全局变量: Public a As Integer, b As Integer, c As Integer 变量被定义之后,在第一次赋值之前,并不是没有值的,而是具有默认值。(1)数值型变量的默认值为0;(2)逻辑型变量的默认值为False;(3)日期时间型变量的默认值为#0:00:00#;(4)变长字符串变量的默认值为空字符串;(5)定长字符串变量的默认值是全部由空格组成的字符串,空格个数等于定长字符串的字符个数;(6)对象型变量的默认值为Nothing;(7)变体类型变量的默认值为Empty。变量
39、的默认值强制变量定义默认情况下,所有未出现过程的标识符,都被VB当成变体类型的变量。这样,使得程序不容易调试,可以在模块声明段中加上:Option Explicit使得所有的变量必须定义才能使用。(1)变量的值除非被赋以新值,否则其值不会自动变化;(2)使用如下语句为变量赋值: Set 变量名新值赋以新值之后,旧值自动消失。(3)对于数值类型变量,如果被赋的新值超出其可表示的范围,会出现“溢出”错误;(4)将变量名写在表达式中,或给其他变量或属性赋值,或用作过程或函数的参数,表示使用变量的值;变量的赋值与取值打开【例3.1】使用过程级变量 P61 打开【例3.2】使用模块级变量 P61打开【例
40、3.3】为模块级变量赋初值 P621不允许同名的情况一般情况下,在同一作用域内不能定义重名的变量。(1)同一个过程中不能定义两个或更多的同名过程级变量,既使类型不相同也不能同名。(2)同一个模块中不能定义同名的模块级变量。(3)同一个模块中不能定义同名的全局变量。(4)同一个模块中的模块级变量和全局变量不能同名。2允许同名的情况(1)不同的过程中可以定义同名的过程级变量。(2)不同的模块中可以定义同名的模块级变量。(3)过程中可以定义与模块级变量同名的过程级变量。(4)过程中可以定义与全局变量同名的过程级变量。(5)模块中可以定义与其他模块定义的全局变量同名的模块级变量。(6)不同的模块中可以
41、定义同名的全局变量。变量重名问题3变量同名时的情况(1)不同作用域的变量同名时,作用域小的变量会屏蔽作用域大的变量,即过程级变量屏蔽模块级和全局变量,模块级变量屏蔽全局变量。例如,在例3.2中,按钮事件过程中的变量i屏蔽模块级变量i,过程中被访问的i实际上是过程级变量。(3)如果不同模块中全局变量同名,访问其他模块中定义的全局变量时应添加模块名进行限定(形式为“模块名.变量名”)。访问本模块或标准模块中定义的全局变量时不必进行限定。如果本模块与标准模块中的全局变量同名,访问标准模块中的全局变量时也应加模块名进行限定。(4)当全局变量与过程级变量同名时,在过程中直接使用这个变量名时,指的是过程级
42、变量。如果使用定义全局变量的模块名来限定变量名,则可访问该全局变量。(5)如果本模块中的模块级变量与其他模块中的全局变量同名,可以在变量名前加模块名来访问全局变量。对象型变量占用4个字节共32位的内存空间,保存的是某一个对象的引用(即内存中的地址),程序对对象型变量的操作等于对它所引用对象的操作。对对象型变量赋值要用Set语句。对象型变量在被定义但未被赋值时的值是一个特殊值:Nothing。例: Dim objFirst As Object (定义)Set objFirst= cmdOKobjFirst.Caption =OK : objFirst.Move 120,234,345Set ob
43、jFirst=txtEdit : objFirst.Text=HelloObject类型的变量可以引用任何一种类型的对象。如果在使用中,一个变量只引用一种特定类型的对象时,就可以将该变量定义为此特定类的对象型变量。定义特定类型对象型变量,要使用对象的类型名,如已学习过的:Form、Textbox、CommandButton、Line、Shape等。例:Dim objSecond As CommandButtonSet objSecond=cmdOK : objSecond.Caption=Hello!注:对象型变量没有默认值,定义之后未赋值之前不能使用。特定类型对象型变量只能引用同一类型的对象
44、。例:Dim objThird As FormSet objThird =cmdOK (错误!)对象型数据类型(Object)变体类型变量可以存贮几乎所有系统定义类型的数据(除定长字符串和用户自定义类型)。把其它类型的数据赋给变体变量,变体变量的类型会随之变化,适应新的值。变体变量在存放数值时,占16字节的内存;存放字符串时,占用22字节的内存(加字符串长度)。例:Dim vntFirst As Variant (定义)vntFirst=“17” (为字符型“17”)vntFirst=vntFirst-15 (为数值型,值为 2) 变体变量类型是默认类型,在定义变量时可以省略“As Varia
45、nt”。变体变量也可以引用对象,赋值时须使用Set语句。例:Dim vntSecond(定义)vntFirst=1234(为数值型1234)Set vntFirst=cmdOK (对象型,对cmdOK的引用)Variant变量有三个的特殊的取值:Empty、Null。1 Empty:一个变体变量可以在下列两种情况下具有Empty值:(1)尚未赋值时;(2)被赋予Empty值之后。把Empty值赋给一个数值型变量时被理解为0,赋给一个字符串时被理解为空字符“”。2 Null:主要用于对数据库的操作,表示数据未知或数据不确定。Null值有如下特点:(1)如表达式的任何一部分是Null,则整个表达式
46、的值也为Null;(2)把Null值作为参数传递给一个函数,则函数的返回值为Null。可给一个变体变量赋值 Null。(3)Null与其本身不相等。变体类型(Variant)VB允许不同类型的变量之间相互赋值,也允许把不同类型的值赋予某种类型的变量,VB会自动将所赋予的值转换为被赋值的变量的类型。1 数值型变量的赋值 数据型变量之间可以相互赋值。浮点数转换为整型数时,小数部分“四舍五入”为整数(其中0.5要向最近的偶数靠拢)。2 字符串变量 如果字符串变量中存贮的是数值信息,则可以将其赋予数值型变量。包括非数值字符的字符串(如有字母、标点符号)不能赋值给数值型变量,否则出现“类型不匹配”错误。
47、3 逻辑型变量 逻辑变量的值赋给数值型变量,False转换为0,True转换为-1。数值型变量的值赋给逻辑变量,0转换为False,其它值转换为True。4 日期时间型变量日期时间型变量赋给数值型变量时,日期部分转换为数值的整数部分,值为此日期距1899年12月30日的天数;时间部分转换为小数部分,从零时到该时间占一整天的比例,12:00:00转为0.5。例:dtm3=#3/18/1999 6:00:00# : sng2=dtm sng2的值为“36237.25”5 所有的类型值均可以转换为字符串值。日期时间型变量转换为字符串时,按照日期的短格式字符串。可以使用类型转换函数进行显式转换。转换规
48、则与上述默认转换相同。类型转换(1)同一个过程中不能定义同名的变量;(2)不同的过程中可以定义同名的变量;(3)同一模块中不能定义同名的模块级变量;(4)可以有与模块级变量、全局变量同名的过程级变量,在该过程中只能访问过程级变量,即过程级变量会屏蔽同名的模块级变量或全局变量。(5)在同一模块中不能定义同名的模块级与全局变量。(6)不同的窗体模块中可以定义同名的全局变量,访问时须加模块名限定。(7)多个标准模块中不能有重名的全局变量。(8)在窗体模块中,窗体的属性、控件、过程和模块级变量是同一层次的,故它们之间不能重名。(9)过程中的局部变量比过程低一级,所以,与控件同名的局部变量会屏蔽控件,如
49、要访问该控件,要用窗体名来限定。(10)在窗体模块中,要用窗体名来限时,窗体名都可以用关键字“Me”来代替。在窗体模块中,如果没有重名,对窗体属性的修改、方法的调用可以省去窗体名或“Me”的限定。如:在frmFirst模块中如无变量、控件与窗体重名,frmFirst.Top=0 等价于 Top=0定义变量要尽量避免重名;能定义小范围的变量就不要定义大范围的变量。变量的重名问题符号常量是指使用一个名称代表在程序运行过程中其值一直保持不变的量。符号常量的作用有:(1) 便于记忆与识别,可使用一个具有描述性的名字替代一个抽象的值;(2) 便于修改,如果要改变常量所代表的值,只需在定义常量的地方修改即
50、可。常量的定义方法:(1) 过程级常量:在过程中定义Const 常量名 As 类型名=表达式(2) 模块级常量:在模块的声明段中Private Const 常量名 As 类型名=表达式(3) 全局常量:在标准模块的声明段中Public Const 常量名 As 类型名=表达式符号常量的命名规则与变量相同,一般使用con前缀或大写字母加以区别。在程序运行过程中,不能再为符号常量赋值。例如,定义全局常量PI: Public Const PI As Double = 3.1415926在过程中可以引用符号常量的值: s = PI *r *r注意:不能在窗体模块和类模块中定义全局常量 。符号常量第4章