《Vb简单的程序设计PPT课件》由会员分享,可在线阅读,更多相关《Vb简单的程序设计PPT课件(365页珍藏版)》请在金锄头文库上搜索。
1、第一章第一章 Visual BasicVisual Basic程序设计概述程序设计概述1.了解了解VB的运行环境及启动、退出。的运行环境及启动、退出。2.了解了解VB功能及特点。功能及特点。3.熟习熟习VB的集成开发环境。的集成开发环境。4.初步建立事件驱动面向对象程序设计的概念。初步建立事件驱动面向对象程序设计的概念。本章要求:本章要求:1.1中文中文VisualBasic6.0简介简介一、一、VisualBasic的发展的发展VisualBasic是是Microsoft公司开发的公司开发的Windows应用程序应用程序开发工具,开发工具,Visual“可视化的可视化的”,是一种开发图形户界
2、是一种开发图形户界面(面(GUI)的方法。的方法。1991年推出年推出VB1.01992、1993、1995、1997、1998,2000相继推出:相继推出:2.0,3.0,4.0,5.0,6.0,VB.Net(7.0)版本版本5.0,6.0包含三种版本(学习版、专业版和企业版)包含三种版本(学习版、专业版和企业版)英英文文Visual的的意意思思是是“视视觉觉的的”,“可可视视的的Baisc”这这个个名名字字可可能能抽抽象象了了点点,但但实实际际上上它它却却是是最最直直观观的的编编程程方方法法,之之所所以以叫叫做做“可可视视”,你你只只要要看看到到VB的的界界面面就就会会明明白白,实实际际上
3、上你你无无需需编编程程,就就可可以以完完成许多步骤。成许多步骤。在在VB中中引引入入了了控控件件的的概概念念,在在Windows中中控控件件的的身身影影无无处处不不在在,如如按按钮钮、文文本本框框等等,VB把把这这些些控控件件模模式式化化,并并且且每每个个控控件件都都有有若若干干属属性性用用来来控控制制控控件的外观,工作件的外观,工作方法,方法,能够响应用户操作(能够响应用户操作(事件事件)。这这样样你你就就可可以以象象在在画画板板上上一一样样,随随意意点点几几下下鼠鼠标标,一一个个按按钮钮就就完完成成了了,这这些些在在以以前前的的编编程程语语言言下下是要经过相当复杂的工作的。是要经过相当复杂
4、的工作的。何为可视何为可视二、二、VisualBasic的特点的特点1.具有面向对象的可视化设计工具具有面向对象的可视化设计工具2.事件驱动的编程机制事件驱动的编程机制3.结构化的程序设计语言结构化的程序设计语言4.提供了易学易用的应用程序集成开发环境提供了易学易用的应用程序集成开发环境5.支持多种数据库系统的访问支持多种数据库系统的访问6.支持支持DDE、DLL和和OLE7.ActiveX技术技术8.VB6.0在开发环境上、网络功能等的增强在开发环境上、网络功能等的增强三、三、VisualBasic6.0的新特性的新特性1.数据访问的新特性2.Internet功能的增强3.控件、语言和向导方
5、面的新增特性4.高度可移植化的代码5.创建ActiveX控件更加轻松方便6.在线帮助更加完善。1.2安装和运行安装和运行VisualBasic6.0一、运行环境一、运行环境1、硬件:、硬件:486DX/66MHz或更高的处理器(推荐或更高的处理器(推荐Pentium或更或更高的处理器高的处理器),一个,一个CD-ROM驱动器,驱动器,VGA或分辨率更或分辨率更高的监视器。高的监视器。=16MBRAM,鼠标或其它定点设备。鼠标或其它定点设备。2、软件:、软件:Windows95或更高版本,或或更高版本,或WindowsNT3.51或更高或更高版本。版本。二、安二、安装装在在CD-ROM驱动器中插
6、入驱动器中插入VisualBasic6.0系统系统CD盘。盘。安装程序在安装程序在CD盘的根目录下,运行安装程序盘的根目录下,运行安装程序Setup.exe,即即可进入可进入“安装程序向导安装程序向导”。如果您的计算机能够在系统中。如果您的计算机能够在系统中运行运行AutoPlay,则在插入则在插入CD盘时,安装程序将被自动加盘时,安装程序将被自动加载。选取载。选取“安装安装VisualBasic6.0”。同样进入同样进入“安装程序向安装程序向导导”三、启动三、启动VisualBasic步骤:步骤:1.单击任务条上的单击任务条上的“启动启动”。2.选择选择“程序程序”,接着选取,接着选取“Mi
7、crosoftVisualBasic6.0中文版中文版”。3.双击双击VisualBasic6.0的的快捷键图标。快捷键图标。4.使用使用“Windows资源管理器资源管理器”寻找寻找VisualBasic可执行文件。可执行文件。1.3VisualBasic6.0的集成开发环境的集成开发环境菜单栏工具栏代码窗口工具箱窗 体 窗口立即窗口监视窗口工程窗口属性窗口布局窗口1.主窗口主窗口应用程序窗口应用程序窗口,由标题栏、菜单栏和工具栏组成由标题栏、菜单栏和工具栏组成VB的三种工作模式的三种工作模式(标题栏总显示当前模式)(标题栏总显示当前模式)(1)设计模式:)设计模式:创建应用程序的大多数工作
8、都是在设计创建应用程序的大多数工作都是在设计时完成的。在设计时,可以设计窗体、绘制控件、编写代码时完成的。在设计时,可以设计窗体、绘制控件、编写代码并使用并使用“属性属性”窗口来设置或查看属性设置值。窗口来设置或查看属性设置值。(2)运行模式:)运行模式:代码正在运行的时期,用户可与应用程代码正在运行的时期,用户可与应用程序交流。可查看代码,但不能改动它。序交流。可查看代码,但不能改动它。(3)中中断断模模式式:程程序序在在运运行行的的中中途途被被停停止止执执行行时时。在在中中断断模模式式下下,用用户户可可查查看看各各变变量量及及不不是是属属性性的的当当前前值值,从从而而了了解解程程序序执执行
9、行是是否否正正常常。还还可可以以修修改改程程序序代代码码,检检查查、调调试试、重置、单步执行或继续执行程序。重置、单步执行或继续执行程序。2.窗体(Form)设计窗口窗体设计窗口是屏幕中央的主窗口,它可以作窗体设计窗口是屏幕中央的主窗口,它可以作为自定义窗口用来设计应用程序的界面。用户可以为自定义窗口用来设计应用程序的界面。用户可以在窗体中添加控件、图形和图片来创建所希望的外在窗体中添加控件、图形和图片来创建所希望的外观。每个窗口必须有一个的窗体名字,建立窗体时观。每个窗口必须有一个的窗体名字,建立窗体时缺省名为缺省名为Form1,Form2,.。应注意窗体名即应注意窗体名即Name属性和窗体
10、文件名的区别属性和窗体文件名的区别窗体设计窗口窗体名窗体文件名3.代码(code)窗口在设计模式中,通过双击窗体或窗体上任何对象或通过在设计模式中,通过双击窗体或窗体上任何对象或通过“工程资源管理器工程资源管理器”窗口中的窗口中的“查看代码查看代码”按钮来打开代码编辑按钮来打开代码编辑器窗口。代码编辑器是输入应用程序代码的编辑器。器窗口。代码编辑器是输入应用程序代码的编辑器。4.属性(properties)窗口属性是指对象的特征,如大小、标题或颜色等属性是指对象的特征,如大小、标题或颜色等数据。在数据。在VisualBasic6.0设计模式中,属性窗口列出设计模式中,属性窗口列出了当前选定窗体
11、或控件的属性的值,用户可以对这了当前选定窗体或控件的属性的值,用户可以对这些属性值进行设置。些属性值进行设置。工程是指用于创建一个应用程序的文件的集合。工程是指用于创建一个应用程序的文件的集合。工程资源管理器列出了当前工程中的窗体和模块工程资源管理器列出了当前工程中的窗体和模块5.工程资源管理器工程资源管理器( (projectproject expror expror) )窗口窗口工具箱提供一组工具,工具箱提供一组工具,用于设计时在窗体中放置用于设计时在窗体中放置控件生成应用程序的用户控件生成应用程序的用户接口。系统启动后缺省的接口。系统启动后缺省的General工具箱就会出现在工具箱就会出
12、现在屏幕左边,上面共有屏幕左边,上面共有21个个常用常用“部件部件”6.工具箱工具箱( (ToolBoxToolBox) )窗口窗口窗体布局窗口显示在屏幕右下角。用户可使用窗体布局窗口显示在屏幕右下角。用户可使用表示屏幕的小图像来布置应用程序中各窗体的位置。表示屏幕的小图像来布置应用程序中各窗体的位置。这个窗口在多窗体应用程序中很有用,因为这可以这个窗口在多窗体应用程序中很有用,因为这可以指定每个窗体相对于主窗体的位置。指定每个窗体相对于主窗体的位置。 7 7窗体布局窗口窗体布局窗口1.4VisualBasic6.0帮助系统的使用帮助系统的使用一、一、MSDN的安装的安装二、使用二、使用MSD
13、NLibrary查阅器查阅器三、上下文帮助三、上下文帮助在在VisualBasic界界面面的的任任何何上上下下文文相相关关部部分分上上按按F1键键,就就可显示有关该部分的信息。上下文相关部分是:可显示有关该部分的信息。上下文相关部分是:VisualBasic中中的的每每个个窗窗口口(“属属性性”窗窗口口、“代代码码”窗窗口等)口等)工具箱中的控件工具箱中的控件窗体或文档对象内的对象窗体或文档对象内的对象“属性属性”窗口中的属性窗口中的属性VisualBasic关关键键词词(语语句句、声声明明、函函数数、属属性性、方方法法、事件和特殊对象)事件和特殊对象)错误信息错误信息四、运行系统所提供的样例
14、四、运行系统所提供的样例第二章第二章VB基本控件及简单程序设计基本控件及简单程序设计 1.1.了了解程序设计方法的发展;解程序设计方法的发展; 2.2.理解面向对象程序设计概念;理解面向对象程序设计概念; 3.3.理解对象、属性、事件、和方法等基本概念;理解对象、属性、事件、和方法等基本概念; 4.4.掌握建立简单的应用程序的方法和步骤;掌握建立简单的应用程序的方法和步骤; 5.5.熟悉一些基本控件和属性的设置;熟悉一些基本控件和属性的设置;6.掌握工程的管理及环境的设置;掌握工程的管理及环境的设置;本章要求:本章要求:2.1 2.1 程序设计方法概述程序设计方法概述1.初期的程序设计高运行效
15、率、少占用内存为目标2.结构化程序设计程序的可读性、可维护性为目标程序=算法+数据结构+计算机语言+面向过程的程序设计方法3.面向对象的程序设计降低程序的复杂性、提高软件的开法效率和改善工作界面为目标程序=对象+消息+面向对象的程序设计面向对象的程序设计具有如下的优点:1符合人们习惯的思维方法,便于分解大型的复杂多变的问题。由于对象对应于现实世界中的实体,因而可以很自然地按照现实世界中处理实体的方法来处理对象,软件开发者可以很方便地与问题提出者进行沟通和交流。2易于软件的维护和功能的增减。对象的封装性及对象之间的松散组合,都给软件的修改和维护带来了方便。3可重用性好。重复使用一个类(类是对象的
16、定义,对象是类的实例化),可以比较方便地构造出软件系统,加上继承的方式,极大地提高了软件开发的效率。4与可视化技术相结合,改善了工作界面。随着基于图形界面操作系统的流行,面向对象的程序设计方法也将深入人心。它与可视化技术相结合,使人机界面进入GUI时代。2.2 2.2 VBVB中的一些基本概念中的一些基本概念 一、对象与类一、对象与类1.对象对象是基本的运行时的实体,如窗体、各种控件等,它既包是基本的运行时的实体,如窗体、各种控件等,它既包括作用于对象的操作(方法)和对象的响应(事件)。括作用于对象的操作(方法)和对象的响应(事件)。将数据和处理这些数据的过程封装在一起将数据和处理这些数据的过
17、程封装在一起.2.类类类是一个抽象的整体概念类是一个抽象的整体概念,对象是类的实例化。,对象是类的实例化。类与对象是面向对象程序设计语言的基础。类与对象是面向对象程序设计语言的基础。以以“汽车汽车”为例,说明类与对象的关系。为例,说明类与对象的关系。汽车是一个笼统的名称,是整体概念,我们把汽车看汽车是一个笼统的名称,是整体概念,我们把汽车看成一个成一个“类类”,一辆辆具体的汽车(比如你的汽车)就是,一辆辆具体的汽车(比如你的汽车)就是这个类的实例,也就是这个类的对象。这个类的实例,也就是这个类的对象。工工具具箱箱的的各各种种控控件件并并不不是是对对象象,而而是是代代表表了了各各个个不不同同的的
18、类类。通通过过类类的的实实例例化化,可可以以得得到到真真正正的的对对象象。当当在在窗窗体体上上画画一一个个控控件件时时,就就将将类类转转换换为为对对象象,即即创创建建了了一一个个控控件件对对象象,也也简简称为控件。称为控件。VB中的类与对象3、对、对象的建立和命名象的建立和命名(1)对象的建立)对象的建立方法一:方法一:单击工具箱控件对象单击工具箱控件对象在窗体上按住在窗体上按住左键拖拉到所需要的大小后释放。左键拖拉到所需要的大小后释放。方法二:方法二:双击工具箱控件对象,则立即在窗体出现一双击工具箱控件对象,则立即在窗体出现一个默认大小的对象框。个默认大小的对象框。(2)编辑对象)编辑对象先
19、选中对象(单击对象),先选中对象(单击对象),放大、缩小放大、缩小删除对象删除对象复制对象复制对象(3)、对象的命名)、对象的命名每一个对象都有有自己的名字每一个对象都有有自己的名字。每个窗体、控件对象在每个窗体、控件对象在建立时建立时VB系统给出了一个默认名。用户可通过属性窗口设系统给出了一个默认名。用户可通过属性窗口设置(名称)来给对象命名。置(名称)来给对象命名。命名的原则:命名的原则:1)必须由字母或汉字开头、随后可以是字母、汉字、)必须由字母或汉字开头、随后可以是字母、汉字、数字、下划线(最好不用)串组成。数字、下划线(最好不用)串组成。2)长度)长度=255个字符。个字符。本教材采
20、用智能化命规则:本教材采用智能化命规则:用前用前3个小定字母组成前缀(指明对象的类型)和表示个小定字母组成前缀(指明对象的类型)和表示该该对象作用的缩写字母组成对象作用的缩写字母组成。附表附表2_1二、属二、属性(性(Property)对象中的数据,所有对象都有自的属性。对象中的数据,所有对象都有自的属性。它们是用来描述和它们是用来描述和反映对象特征的参数。例如:控件名称(反映对象特征的参数。例如:控件名称(Name)、标题标题(Caption)、颜色(颜色(Color)、字体(字体(FontName)等属性决定了对等属性决定了对象展现给用户的界面具有什么样的外观及功能。象展现给用户的界面具有
21、什么样的外观及功能。对象属性设置的方法:对象属性设置的方法:方法一:方法一:在设计模式下,通过属性窗口直接设置对象的属在设计模式下,通过属性窗口直接设置对象的属性。性。方法二:方法二:在程序的代码中通过赋值实现,其格式为:在程序的代码中通过赋值实现,其格式为:对象对象.属性属性=属性值属性值例如:例如:cmdDisp.Caption=“显示显示”三、事件(三、事件(Event)及事件过程(及事件过程(EventProcedure)事件事件可被对象识别的动作。可被对象识别的动作。事件过程事件过程是指附在该是指附在该对象上的程序代码,是事件触对象上的程序代码,是事件触发后处理的程序。事件过程的形式
22、如下:发后处理的程序。事件过程的形式如下:Sub对象名对象名_事件过程名事件过程名(参数列表)(参数列表).(事件过程代码)事件过程代码)EndSub例如:例如:SubcmdHide_Click()CmdHide.Visible=FalseEndSub四、方四、方法(法(Method)在对象上可操作的过程,是在对象上可操作的过程,是VB系统提供的一种特殊的过系统提供的一种特殊的过程和函数程和函数方法。方法是面向对象的,所以对象的方法调方法。方法是面向对象的,所以对象的方法调用一般要指明对象。用一般要指明对象。对象方法对象方法调用形式:调用形式: 对象对象.方法方法参数列表参数列表如省略对象,表
23、示在当对象,一般指窗体。如省略对象,表示在当对象,一般指窗体。例如:例如:Form1.printVB程序设计程序设计五、五、VB应用程序的工作方式应用程序的工作方式VB应用程序采用的是以事件驱动应用程序的工作方式。应用程序采用的是以事件驱动应用程序的工作方式。下面是事件驱动应用程序中的典型工作方式:下面是事件驱动应用程序中的典型工作方式:1、启动应用程序,装载和显示窗体。、启动应用程序,装载和显示窗体。2、窗窗体体(或或窗窗体体上上的的控控件件)接接收收事事件件。事事件件可可由由用用户户引引发发(例例如如通通过过键键盘盘或或鼠鼠标标操操作作),可可由由系系统统引引发发(例例如如定定时时器器事事
24、件件),也也可可由由代代码码间间接接引引发发(例例如如当当代代码码装装载载窗窗体体时时的的Load事件)。事件)。3、如如果果在在相相应应的的事事件件过过程程中中已已编编写写了了相相应应的的程程序序代代码码,就执行该代码。就执行该代码。4、应用程序等待下一次事件。、应用程序等待下一次事件。2.3 2.3 窗体的常用属性、方法和事件窗体的常用属性、方法和事件 窗体属性决定了窗体的外观与操作。窗体外观窗体属性决定了窗体的外观与操作。窗体外观如下图如下图一一.属性属性(一)基本属性(一)基本属性1.Name名称属性(任何对象都具有的)名称属性(任何对象都具有的)创建的对象名称创建的对象名称,有默认的
25、名有默认的名.在程序中,控件名是作在程序中,控件名是作为对象的标识而引用,不会显示在窗体上。为对象的标识而引用,不会显示在窗体上。2.Height、width、top和和left属性属性单位为单位为twip:1twip=1/20点点=1/1440英寸英寸=1/567cm注意:注意:这四这四个属性决定窗体个属性决定窗体(或控件)的大(或控件)的大小,在容器中的小,在容器中的位置。如右图。位置。如右图。3Caption标题属性:决定出现在窗体的标题栏上的文决定出现在窗体的标题栏上的文本内容,也是当窗体被最小化后出现在窗体图标下的文本。本内容,也是当窗体被最小化后出现在窗体图标下的文本。如图如图2-
26、2中窗体的中窗体的Caption属性值是属性值是“VB窗体窗体”4字体字体Font属性组属性组FontName属性是字符型,决定对象上正文的字体(缺省为宋体)。属性是字符型,决定对象上正文的字体(缺省为宋体)。FontSize属性是整型,决定对象上正文的字体大小。属性是整型,决定对象上正文的字体大小。FontBold属性是逻辑型,决定对象上正文是否是粗体。属性是逻辑型,决定对象上正文是否是粗体。FontItalic属性是逻辑型,决定对象上正文是否是斜体。属性是逻辑型,决定对象上正文是否是斜体。FontStrikeThru属性是逻辑型,决定对象上正文是否加一删除线。属性是逻辑型,决定对象上正文是
27、否加一删除线。FontUnderLine属性是逻辑型,决定对象上正文是否带下划线。属性是逻辑型,决定对象上正文是否带下划线。5.Enabled属性(逻辑值)决定控件是否可操作。True:允许用户进行操作,并对操作出响应(缺省值)。False:呈暗淡色,禁止用户进行操作。6.Visible属性(逻辑值)决定控件是否可见True:运行时控件可见(缺省值)。False:运行时控件隐藏,用户看不到,但控件本身是存在的。7BackColor属性和属性和ForeColor属性属性BackColor属性用于返回或设置对象的背景颜色,属性用于返回或设置对象的背景颜色,ForeColor属性用于返回或设置在对象
28、里显示图片和属性用于返回或设置在对象里显示图片和文本的前景颜色。它们是十六进制长整型数据文本的前景颜色。它们是十六进制长整型数据在程序代码中可用在程序代码中可用Windows运行环境的红运行环境的红-绿绿-蓝蓝(RGB)颜色方案,使用调色板或在代码中使用颜色方案,使用调色板或在代码中使用RGB或或QBColor函数指定标准函数指定标准RGB颜色。颜色。例例如如,将将窗窗体体Form1的的背背景景色色设设置置为为红红色色,则则可可使使用用下下面面三种情况:三种情况: Form1.BackColor = RGB(255, 0, 0) Form1.BackColor = &HFF& Form1.Ba
29、ckColor=vbRed(二)窗体的其它常用属性(二)窗体的其它常用属性1MaxButton最大化按钮和最大化按钮和MinButton最小化按钮:最小化按钮:当值为当值为Ture,有最大或最小化按钮,有最大或最小化按钮,False则无。则无。2Icon控制图标属性:控制图标属性:返回或设置窗体左上角显示或最返回或设置窗体左上角显示或最小化时显示的图标。小化时显示的图标。注意:此属性必须在注意:此属性必须在ControlBox属性设置为属性设置为Ture才有效才有效3ControlBox控制菜单框属性:控制菜单框属性:设置设置Ture为有,如设置为为有,如设置为False则无控件菜单,同时窗体
30、也无最大化按钮和最小化按钮,则无控件菜单,同时窗体也无最大化按钮和最小化按钮,即使即使MaxButton属性和属性和MinButton属性设置为属性设置为Ture。4Picture图片属性:图片属性:设置窗体中要显示的图片。加载图片设置窗体中要显示的图片。加载图片操作同操作同Icon控制图标属性。控制图标属性。5.BorderStyle:边框风格边框风格,通过改变通过改变 BorderStyle 属性,属性,可以控制窗体如何调整大小。可以控制窗体如何调整大小。0-None:无边框;无边框;1-FixedSingle:单线边框,不可以改变窗口大小;单线边框,不可以改变窗口大小;2-Sizable
31、:双线边框,可以改变窗口大小;双线边框,可以改变窗口大小;3-FixedDouble:双线框架,不可以改变窗口大小。双线框架,不可以改变窗口大小。4-FixedToolWindow:窗体外观与工具条相似。有关闭按钮窗体外观与工具条相似。有关闭按钮,不可以改变窗口大小。不可以改变窗口大小。5-SizableToolWindow:窗体外观与工具条相似。有关闭按钮窗体外观与工具条相似。有关闭按钮,可以改变窗口大小。,可以改变窗口大小。6.WindowsState属性0-Normal:正常窗口状态,有窗口边界;1:最小化状态,以图标方式运行;2:最大化状态,无边框,充满整个屏幕。7.AutoRedra
32、w属性该属性决定窗体被隐藏或被另一窗口覆盖之后重新显示,是否重新还原该窗体被隐藏或覆盖以前的画面。即是否重画如Circle、Line、Pset和Print等方法的输出。当为True时,重新还原该窗体以前的画面。当为False时,则不重画AutoRedraw属性。二、事件最常用的事件1Click/DblClick:单击/双击窗体触发。2Load:窗体被装入时触发的事件。该事件通常用来在启动应用程序时对属性和变量进行初始化。3、Unload事件卸载窗体时触发该事件。4、Resize事件无论是因为用户交互,还是通过代码调整窗体的大小,都会触发一个Resize事件。三、常三、常用方法用方法窗窗体体常常
33、用用的的方方法法有有:打打印印输输出出Print、移移动动Move、清清除除Cls、显显示示Show、隐藏隐藏Hide等方法。等方法。方法是面向对象故使用的形式方法是面向对象故使用的形式:对象对象.方法方法1.Print方法方法形式形式:对象对象.PrintSpc(n)|Tab(n)表达式列表表达式列表;|,作用作用:在对象上输出信息在对象上输出信息对象:对象:窗体、图形框或打印机窗体、图形框或打印机(Pinter),省略对象在窗体上输出。省略对象在窗体上输出。Spc(n)函数:插入函数:插入n个空格,允许重复使用。个空格,允许重复使用。Tab(n)函数:左端开始右移动函数:左端开始右移动n列
34、,允许重复使用。列,允许重复使用。;(分号分号):光标定位上一个显示的字符后。光标定位上一个显示的字符后。,(逗号逗号):光标定位在下一个打印区的开始位置处。每个打印区光标定位在下一个打印区的开始位置处。每个打印区占占14列。列。无;,无;,换行。换行。开始打印的位置是由对象的开始打印的位置是由对象的CurrentX和和CurrentY属性决定,缺属性决定,缺省为打印对象的左上角省为打印对象的左上角0,0。例例2.3在窗体在窗体Form1的单击事件中写入如下代码:的单击事件中写入如下代码:PrivateSubForm_Click()a=10:b=3.14:c=100Printa=;a,b=;b
35、Printa=;a,b=;bPrinta=;a,b=;bPrint空一行空一行Print;a=;a,b=;bPrinta=;a,Tab(18);b=;bPrinta=;a,Spc(18);b=;bPrintPrinta=;a,b=;bPrintTab(18);“a=”;a,“b=”;b从从第第18列列开开始始打打印印输输出出PrintSpc(18);a=;a,b=;bEndSub2.Cls方法方法形式形式:对象对象.Cls作用作用:清除运行时在窗体或图形框中显示的文本或图形。清除运行时在窗体或图形框中显示的文本或图形。注意注意:不清除在设计时的文本和图形。清屏后坐标当前回到不清除在设计时的文本
36、和图形。清屏后坐标当前回到原点。原点。3.Move方法方法形式形式:对象对象.Move左边距离左边距离,上边距离,上边距离,宽度,宽度,高度,高度作用作用:移动窗体或控件,并可改变其大小。移动窗体或控件,并可改变其大小。对象对象:可以是窗体及除时钟、菜单外的所有控件,省略代表可以是窗体及除时钟、菜单外的所有控件,省略代表窗体。窗体。左边距离,上边距离,宽度,高度:数值表达式,以左边距离,上边距离,宽度,高度:数值表达式,以twip为为单位。如果是窗体对象,则单位。如果是窗体对象,则“左边距左边距”和和“上边距上边距”是以屏是以屏幕左边界和上边界为准。其它则是以窗体的左边和上边界为幕左边界和上边
37、界为准。其它则是以窗体的左边和上边界为准。准。例例2.4使使用用Move方方法法移移动动一一个个窗窗体体。双双击击窗窗体体,窗窗体体移移动动并定位在屏幕的左上角,同时窗体的长宽也缩小一倍。并定位在屏幕的左上角,同时窗体的长宽也缩小一倍。为为了了实实现现这这一一功功能能,可可以以在在窗窗体体Forml的的“代代码码”窗窗口口中中输入下列代码:输入下列代码:Private Sub Form_DblClick()Form1.Move 0,0,Form1.Width/2,Form1.Height/2End Sub4Show(显示显示)方法方法Show方方法法用用于于在在屏屏幕幕上上显显示示一一个个窗窗
38、体体,调调用用Show方方法法与与设置窗体设置窗体Visible属性为属性为True具有相同的效果。具有相同的效果。其调用格式如下:其调用格式如下:窗体名窗体名.ShowvbModal|vbModeless说说 明明 ( 1) 它它 有有 两两 种种 可可 能能 值值 : vbModal( 缺缺 省省 ) 或或vbModeless,Show方方法法的的可可选选参参数数表表示示从从当当前前窗窗口口或或对对话话框框切切换换到到其其他他窗窗口口或或对对话话框框之之前前用用户户必必须须采采取取的的动动作作。当当参参数数为为vbModal时时,要要求求用用户户必必须须对对当当前前的的窗窗口口或或对对话话
39、框框做做出出响响应应,才才能能切切换换到到其其他他窗窗口口。(2)如如果果要要显显示示的的窗窗体体事事先先未装入,该方法会自动装入该窗体再显示。未装入,该方法会自动装入该窗体再显示。5Hide(隐藏隐藏)方法方法Hide方方法法用用于于使使指指定定的的窗窗体体不不显显示示,但但不不从从内内存存中中删删除除窗窗体体。其调用格式为:其调用格式为:窗体名窗体名.Hide例例2.5实现将指定的窗体在屏幕上进行显示或隐藏的切换。实现将指定的窗体在屏幕上进行显示或隐藏的切换。为为了了实实现现这这一一功功能能,可可以以在在窗窗体体Forml的的“代代码码”窗窗口口中中输入下列代码:输入下列代码:Privat
40、e Sub Form_Click() Form1.Hide 隐藏窗体隐藏窗体 MsgBox 单击确定按钮,使窗体重现屏幕单击确定按钮,使窗体重现屏幕 显示信息显示信息 Forml.Show 重现窗体重现窗体End Sub说说明明:当当一一个个窗窗体体从从屏屏幕幕上上隐隐去去时时,其其Visible属属性性被被设设置置成成False,并并且且该该窗窗体体上上的的控控件件也也变变得得不不可可访访问问,但但对对运运行行程程序序间间的的数数据据引引用用无无影影响响。若若要要隐隐去去的的窗窗体体没没有有装装入入,则则Hide方法会装入该窗体但不显示。方法会装入该窗体但不显示。一.命令按钮CommandB
41、utton接受用户输入的命令.输入命令可以有三种方式:(1)鼠标单击;(2)按Tab键焦点跳转到该按钮,再按回车键;(3)快捷键(Alt+有下划线的字母)(一)属性1基本属性Name、Height、Width、Top、Left、Enabled、Visible、Font等与窗体的使用相同。2常用属性(1)Caption:标题属性命令按钮显示的内容,可在某字母前加“&“设置快捷键。例如:&Ok,显示Ok2.4命令按钮、标签、文本框命令按钮、标签、文本框(2)Default:确认属性(逻辑值),设置为True时,按Enter键相当于用鼠标器单击了该按钮。注意:在一个窗体只能的一个按钮的Default
42、设置为Ture(3)Cancel:取消功能属性(逻辑值),当设置为Ture时,程序运行时按Esc键与单击此命令按钮的效果相同。注意:在一个窗体只能的一个按钮的Cancel属性设置为Ture(4)Value:检查该按钮是否按下.该属性在设计时无效.(5)Picture:按钮可显示图片文件(.bmp和.Ico),只有当Style属性值设为1时有效(6)Style:确定显示的形式.0只能显示文字,1文字、图形均可。(7)ToolTipText:设置工具提示,和Picture结合使用。(二).事件单击事件Click二、二、 标签标签 LabelLabel用于显示文本用于显示文本(输出输出)信息,不能作
43、为输入信息的界面。信息,不能作为输入信息的界面。1基本属性基本属性Name、Height、Width、Top、Left、Enabled、Visible、Font、ForeColor、BackColor等与窗体的使用相同。等与窗体的使用相同。2常用属性常用属性(1)Caption属性属性Caption属属性性用用来来改改变变Label控控件件中中显显示示的的文文本本。Caption属属性性允允许许文文本本的的长长度度最最多多为为1024字字节节。缺缺省省情情况况下下,当当文文本本超超过过控控件件宽宽度度时时,文文本本会会自自动动换换行行,而而当当文文本本超超过过控控件件高高度时,超出部分将被裁剪
44、掉。度时,超出部分将被裁剪掉。(2)Alignment属性属性设置设置Caption属性中文本的对齐方式,共有三种可选值:属性中文本的对齐方式,共有三种可选值:0左对齐左对齐(LeftJustify);1右对齐右对齐(RightJustify);2居中对齐居中对齐(CenterJustify)。(3)BackStyle属性属性该该属属性性用用于于确确定定标标签签的的背背景景是是否否透透明明。有有两两种种情情况况可可选选:值值为为0时时,表表示示背背景景透透明明,标标签签后后的的背背景景和和图图形形可可见见;值值为为1时,表示不透明,标签后的背景和图形不可见。时,表示不透明,标签后的背景和图形不
45、可见。(4)AutoSize属性属性AutoSize属属性性确确定定标标签签是是否否会会随随标标题题内内容容的的多多少少自自动动变变化化。如如果果值值为为True,则则随随Caption内内容容的的大大小小自自动动调调整整控控件件本本身身的的大大小小,且且不不换换行行;如如果果值值为为False,表表示示标标签签的的尺尺寸寸不不能能自自动调整,超出尺寸范围的内容不予显示。动调整,超出尺寸范围的内容不予显示。例例2.6在在窗窗体体上上,放放置置5个个标标签签,其其名名称称使使用用默默认认值值Label1Label5,它它们们的的高高度度与与宽宽度度相相同同,在在属属性性窗窗口口,按按下下表表设设
46、置它们的属性置它们的属性默认控件名默认控件名Name标题标题Caption有关属性设置有关属性设置Label1左对齐左对齐Alignment=0,BorderStyle=1Label2水平居中水平居中Alignment=1,BorderStyle=1Label3自动自动AutoSize=True,WordWarp=False,BorderStyle=1Label4背景白背景白BackColor=&H00FFFFFF&,BorderStyle=0Label5前景红前景红ForeColor=&H000000FF&,BorderStyle=0(5)WordWrap属性属性设置后各标签的显示如下图设置
47、后各标签的显示如下图3、事件、事件标签可响应单击(标签可响应单击(Click)和双击(和双击(DblClick)事件,但一事件,但一般情况不对它进行编程般情况不对它进行编程三、三、文本框文本框 TextBoxTextBox是是一个文本编辑区域,可在该区域输入,编辑和显示正文内一个文本编辑区域,可在该区域输入,编辑和显示正文内容。容。(一)(一)属性属性1基本属性基本属性Name、Height、Width、Top、Left、Enabled、Visible、Font,ForeColor、BackColor等与标签控件相同。等与标签控件相同。2常用属性常用属性(1).Text文本文本属性属性在文本框
48、中显示的正文内容存放在在文本框中显示的正文内容存放在Text属性中。当程序运属性中。当程序运行时,用户通过键盘输入正文内容,保存在行时,用户通过键盘输入正文内容,保存在Text属性中。属性中。文本框没有文本框没有Caption属性属性(2)Maxlength:设置正文的最多字符个数设置正文的最多字符个数,0任意长度值任意长度值。(3)MultiLine:是否为多行是否为多行,默认一行默认一行.False(4)ScrollBars:当当MultiLine为为True时时,该属性才有效该属性才有效,滚动条滚动条的形式。的形式。0-None:无滚动条、无滚动条、1-Horizontal:水平滚动条水
49、平滚动条、2-Vertical垂直滚动条垂直滚动条、3-Both水平和垂直滚动条水平和垂直滚动条。(5)Locked:是否可被编辑属性,是否可被编辑属性,False,表示为可编辑。表示为可编辑。(6)PassWordChar属性属性设置设置PasswordChar属性为了掩盖文本框中输入的字符。属性为了掩盖文本框中输入的字符。该属性的设置只有在该属性的设置只有在MultiLine设为设为False才有效才有效(7)SelStart、SelLength和和SelText属性属性这三个属性是文本框中对文本的编辑属性。这三个属性是文本框中对文本的编辑属性。SelStart:确确定定在在文文本本框框选
50、选中中文文本本的的起起始始位位置置。第第一一字字符符的的位位置置为为0。若若没没有有选选择择文文本本,则则用用于于返返回回或或设设置置文文本本的的插插入入点点位位置置,如如果果SelStart的的值值大大于于文文本本的的长长度度,则则SelStart取当前文本的长度:取当前文本的长度:SelLength:设置或返回文本框中选定的文本字符串长度设置或返回文本框中选定的文本字符串长度(字符个数)。(字符个数)。SelText:设置或返回当前选定文本中的文本字符串。设置或返回当前选定文本中的文本字符串。(二)常用事件(二)常用事件Change:当改变文本框的当改变文本框的Text属性时会引发该事件。
51、当用输入一个属性时会引发该事件。当用输入一个字符,就会触发一次字符,就会触发一次Change事件。事件。KeyPress(KeyAsciiAsInteger):当用户按下并释放键盘上一个当用户按下并释放键盘上一个ANSI键时,就会触发一键时,就会触发一次该事件,并返回一个次该事件,并返回一个KeyAscii参数(字符的参数(字符的Ascii值)到该值)到该事件过程中。事件过程中。例如:输入例如:输入“A”,则则KeyAscii的值是的值是65。可用函数。可用函数Chr$(KeyAscii)可得到字符可得到字符“A”。LostFocus:当控件失去焦点时发生。当控件失去焦点时发生。GotFocu
52、s:当控件获得焦点时发生。当控件获得焦点时发生。(三)(三)常用方法常用方法文本框最有用的方法是:文本框最有用的方法是:SetFocus,使用形式:使用形式:对象对象.SetFocus功能:功能:是把光标移到指定的文本框对象中。是把光标移到指定的文本框对象中。例题:例题:2.5简单应用程序的建立简单应用程序的建立一.工程的组成工程文件(.Vbp)包含了一个应用程序的所有文件(详见Pg.42表1.2.10)窗体文件(.frm):控件及属性、事件过程和自定义过程窗体的二进制数据文件(.frx),自动产生同名.frx文件。标准模块文件(.bas)类模块的文件(.cls)资源文件(.res)Activ
53、eX控件的文件(.ocx)一个VB应用程序中各主要文件的结构关系如下图:二、创建应用程序的步骤: 分析问题,确定程序要完成什么任务,按下面的步骤创建应用程序。 (1)新建工程。创建一个应用程序首先要打开一个新的工程。(2)创建应用程序界面。(3)设置属性值。(4)对象事件过程的编程。(5)保存文件。(6)程序运行与调试。再次保存修改后的程序三、一个简单的三、一个简单的VB程序的创建程序的创建(实例)(实例)例例2.7设设计计一一简简单单应应用用程程序序,在在窗窗体体上上放放置置1个个文文本本框框、2个命令按钮,用户界面如图个命令按钮,用户界面如图2-9所示。所示。第三章第三章数据类型、常量、变
54、量及表达式数据类型、常量、变量及表达式本章内容及要求:本章内容及要求:1 熟悉熟悉VBVB程序中代码和语句书写规则;程序中代码和语句书写规则;2 掌握掌握VBVB的数据类型;的数据类型;3掌握掌握VB的的运算符和表达式的使用;运算符和表达式的使用;4 掌握常用内部函数的使用;掌握常用内部函数的使用;本章重点:本章重点: 变量和常量的定义及使用变量和常量的定义及使用、运算符和表达式的运算符和表达式的使用及常用内部函数的使用。使用及常用内部函数的使用。本章难点:本章难点:数据类型、内部函数。数据类型、内部函数。3.1VB语言字符集及编码规则语言字符集及编码规则一、一、VB的字符集的字符集l字母:大
55、写英文字母AZ;小写英文字母az。l数字:0一9;l 专用字符:共27个,二、编码规则与约定二、编码规则与约定(一)、编码规则(一)、编码规则1VB代码中不区分字母的大小写。2在同一行上可以书写多条语句,但语句间要用冒号“:”分隔。3若一个语句行不能写下全部语句,或在特别需要时,可以换行。换行时需在本行后加入续行符,1个空格加下划线“_”。4一行最多允许255个字符。5注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。6在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。(二)、(二)、约定约定1为了提高程序的可读性,对于VB中的关键字其首字母大写,其余字母小写
56、2.注释有利于程序的维护和调试Rem开始或单撇。例如:ThisisaVBREMThisisaVB在6.0中新增了“块注释/取消块注释”3通常不使用行号4对象名命名约定:每个对象的名字由3个小写字母组成的前缀(指明对象的类型)和表示该对象作用的缩写字母组成。3.2 数据类型数据类型一一.标准数据类型标准数据类型表3.2二、自定义类型二、自定义类型在模块级别中使用,用于定义包含一个或多个元素的用在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。户自定义的数据类型。使用形式:使用形式:Type自定义类型名自定义类型名元素名元素名(下标下标)As类型名类型名元素名元素名(下标下标)A
57、s类型名类型名.EndType说明说明TypeStudentXhAsStingXmAsStringXbAsStringNlAsIntegerScoreAsSingleEndType例如:对于一个学生的“学号”、“姓名”、“性别”、“年龄”、“入学成绩”等数据,为了处理数据的方便,常常需要把这些数据定义成一个新的数据类型(如Student类型)。3.3 常量和变量3.3.1常常量量在程序运行过程中,其值不能被改变的量称为常量。在VB中有三类常量:普通常量符号常量系统常量。一、普通常量1整型常量整型常量(1)整型(Integer):表示-32768至32767之间的整数例如:1011020(2)长
58、整型(Long):表示-2,147,483,648至2,147,483,647之间的整数例如:长整型常数的书写:23&通常我们说的整型常量指的是十进制整数,但VB中可以使用八进制和十六进制形式的整型常数,因此整型常数有如下三种形式:1)十进制整数。如125,0,-89。202)八进制整数。以&或&O(字母O)开头的整数是八进制整数,如&O25表示八进制整数25,即(25)8,等于十进制数21。3)十六进制。以&H开头的整数是十六进制整数,如&H25表示十六进制整数25,即(25)16,等于十进制数37。VB中的颜色数据常常用十六进制整数表示。2、实数、实数1)单精度实型(Single):有效数
59、为7位表示-3.37E+38至3.37E+38之间的实数2)双精度实型(Double):有效数为15位常量的表示:常量的表示:1)十进制小数形式。它是由正负号(+,-)、数字(09)和小数点(.)或类型符号(!、#)组成,即n.n,n!或n#,其中n是09的数字。例如0.123、.123、123.0、123!、123#等都是十进制小数形式。2)指数形式。nEm或n.nEm,nDm或n.nDm例:1.25E+3和1.25D+3相当于1250.0或者1.25103。3、字符串常量字符串常量在VB中字符串常量是用双引号“”括起的一串字符,例如ABC,abcdefg,123,0,VB程序设计等。说明:
60、(1)字符串中的字符可以是所有西文字符和汉字、标点符号等;(2)表示空字符串,而表示有一个空格的字符串;(3)若字符串中有双引号,例如ABDXYZ,则用连续两个双引号表示,即:ABDXYZ“4、逻辑(逻辑(Boolean)数据类型数据类型只有两个值True,或False。将逻辑数据转换成整型时:True为-1,False为0;其它数据转换成逻辑数据时:非0为True,0为False。5、日期常量、日期常量日期(Date)型数据按8字节的浮点数来存储,表示日期范围从公元100年1月1日9999年12月31日,而时间范围从0:00:0023:59:59。一种在字面上可被认作日期和时间的字符,只要用
61、号码符“#”括起来,都可以作为日期型数值常量。例:#09/02/99#、#January4,1989#,#2002-5-414:30:00PM#都是合法的日期型常量。说明:当以数值表示日期数据时,整数部分代表日期,而小数部分代表时间;例如1表示1899年12月31日。大于1的整数表示该日期以后的日期,0和小于0的整数表示该日期以前的日期。二、符号常量二、符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。VB中使用关键字Const声明符号常量。其格式如下:Const常量名常量名As类型类型|类型符号类型符号=常数表
62、达式常数表达式例如:ConstPI#=3.1415926535等价于:ConstPIAsDouble=3.1415926535三、系统常量三、系统常量VB系统提供了应用程序和控件的系统定义常数。它们存放于系统的对象库中,在“对象浏览器”中的VisualBasic(VB)和VisualBasicforapplications(VBA)对象库中列举了VisualBasic的常数例如,要将文本框Text1的前景颜色设置为红色,可以使用下面的语句:Text1.ForeColor=vbRed这里的vbRed就是系统常量。这比直接使用16进制数来设置要直观得多。又如,窗口状态属性WindowsState可
63、取0,1,2三个值,对应三种不同状态(参见第二章表2-2所示)。在程序中使用语句Myform.WindowsState=vbMaxmized,将窗口极大化,显然要比使用语句Myform.WindowsState=2易于阅读和理解。一.变量和常量的命名规则1.以字母或汉字开头以字母或汉字开头,后可跟字母、数字或下划线组成,后可跟字母、数字或下划线组成,长度小于等于长度小于等于40个字符;个字符;2.不能使用不能使用VB中的关键字;中的关键字;3.VB中不区分变量名的大小写中不区分变量名的大小写.4.为了增加程序的可读性,可在变量名前加一个缩写的前为了增加程序的可读性,可在变量名前加一个缩写的前缀
64、来表明该变量的数据类型。缀来表明该变量的数据类型。例如:例如:strAbc,(字符串变量)字符串变量)iCount,(整型变量)整型变量)dblx,(双精度变量)双精度变量)sYz(单精度变量)单精度变量)3.3.2变变量量二二.变量声明变量声明1.用Dim语句显式声明变量形式:Dim变量名AS类型Dim变量名类型符例 DimiCountAsinteger,sumAssingle等价于DimiCount%,sum!2.隐式声明VisualBasic允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。V
65、isualBasic根据程序中赋予变量的值来自动调整变量的类型。例如:下下面面是是一一个个很很简简单单的的程程序序,其其使使用用的的变变量量a, a, b, b, SumSum都都没有事先定义。没有事先定义。Private Sub Form_Click()Sum = 0a = 10: b = 20Sum = a + bPrint Sum=; SumEnd Sub3强制显式声明强制显式声明OptionExplicit语句语句良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。VisualBasic中可以强制显式声明,可以在窗体模块、标准模块和类模块的
66、通用声明段中加入语句:OptionExplicit3.4运算符和表达式运算符和表达式一一.运运算符算符1.算术运算符算术运算符(均是双目运算,(均是双目运算,ia=3)例:例:5+10mod109/3+22结果是:结果是:102.字符串运算符与字符串表达式字符串运算符有:、+。功能是字符串连接例如:ABCD+EFGHI结果为:ABCDEFGHI“VB”&“程序设计教程”结果为:VB程序设计教程说明:当连接符两旁的操作量都为字符串时,上述两个连接符等价。它们区别是:+(连接运算):两个操作数均应为字符串类型;&(连接运算):两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数
67、字字符,然后进行连接操作。例:例:100 + 123 100 + 123 结果为结果为 223223100 + 123 100 + 123 结果为结果为 100123100123 AbcAbc + 123 + 123 出错出错 100 & 123 100 & 123 结果为结果为 100123100123 100 & 123 100 & 123 结果为结果为 100123100123 AbcAbc & 123 & 123 结果为结果为 Abc123Abc123 Abc Abc & 123 & 123 结果为结果为 Abc123Abc123注意:使用运算符“&”时,变量与运算符“&”之间应加一个
68、空格。这是因为符号“&”还是长整型的类型定义符,如果变量与符号“&”接在一起,VB系统先把它作为类型定义符处理,因而就会出现语法错误。3.4.3关系运算符与关系表达式关系运算符都是双目运算,是用来比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True,若关系不成立,结果为False。VB中的关系运算符如下表所示。运算符含义优先级实例结果小于所有关系运算优先级相同。低于算术运算的加“+”,减“-”运算,高于逻辑非“Not”运算。15+1020False=小于或等于10大于1020False=大于或等于This=ThatTrue=等于This=ThatFalse不等于T
69、hisThatTrueLike字符串匹配ThisLike*isTrueIs对象比较关系运算的规则如下:关系运算的规则如下:(1)当两个操作式均为数值型,按数值大小比较。(2)字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止.。例:ABCDEABRA结果为False(3)数值型与可转换为数值型的数据比较,如:29189,按数值比较,结果为False。(4)数值型与不能转换成数值型的字符型比较,如:77sdcd,不能比较,系统出错。(5)“Like”运算符是VB6.0新增加的。其使用格式为:str1Likestr23.4.4逻辑运算符与逻辑表达式Not逻辑非为单目运算符
70、(要求一个操作数),其它为双逻辑非为单目运算符(要求一个操作数),其它为双目运算符。目运算符。条件表达式条件表达式1And条件表达式条件表达式2条件表达式均为条件表达式均为T结果为结果为T条件表达式条件表达式1Or条件表达式条件表达式2条件表达式有一个条件表达式有一个T结果为结果为T说明:说明:(1)逻辑运算符的优先级不相同,Not(逻辑非)最高,但它低于关系运算,Imp(逻辑蕴含)最低。(2)VB中常用的逻辑运算符是Not、And和Or。它们用于将多个关系表达式进行逻辑判断。例如,数学上表示某个数在某个区域时用表达式: 10X=10AndX=字符运算符字符运算符关系运算符关系运算符逻辑运算逻
71、辑运算说明:说明:1当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符,在各类运算中再按照相应的优先次序进行。2可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。.表达式的书写中需注意的问题表达式的书写中需注意的问题(1)运算符不能相邻。例a+-b是错误的。(2)乘号不能省略。例x乘以y应写成:x*y(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准并排书写,不能出现上下标(5)要注意各种运算符的优先级别,为保持运算顺序,在写表达式时需要适当添
72、加括号(),若用到库函数必须按库函要求书写。如:(b-sqr(b*b-4*a*c)/(2*a)(a+b)/(a-b)VB提供了上百种内部函数(库函数),要求掌握这些常用函数的功能及使用。调用方法:函数名(参数列表)有参函数函数名无参函数说明:(1)使用库函数要注意参数的个数及其参数的数据类型(2)要注意函数的定义域(自变量或参数的取值范围)例如:sqr(x)要求:x=0(3)要注意函数的值域。如:exp(23773)的值就超出实数在计算机中的表示范围。3.5常用内部函数常用内部函数1.数学函数常用的数学函数见表常用的数学函数见表3-8所示所示Abs(N)Cos(N)Sin(N)Exp(N)Lo
73、g(N)Sqr(N)Rnd(N)Sgn(N)说明:说明:(1)在三角函数中的自变量是以弧度为单位。在三角函数中的自变量是以弧度为单位。如:如:sin300sin(3.14159/180*30)(2)Rnd函数返回函数返回01(包括(包括0和不包括和不包括1)之间的双精度随机)之间的双精度随机数。数。若要产生若要产生1-100的随机整数:的随机整数:Int(Rnd*100)+1提问:怎样产生提问:怎样产生N,M区间的随机数?区间的随机数?2.转换函数常用的转换函数见表3-9所示说明:(1)要区别两个取整函数int()和fix()Fix(N)为截断取整,即去掉小数后的数。Int(N)不大于N的最大
74、整数。N0与int(N)相同,当NMax则Max=A,否则Max不变(4)让记录数据个数的变量增加1,即N=N+1(5)判断N是否小于10,若成立则转到第(3)步执行,否则转到第(6)步。(6)打印输出max1)输入A、B、C。2)A与B中大的一个放入MAX中。3)把C与MAX中大的一个放入MAX中。4)输出MAX,MAX即为最大数。4.1.2算法的特性算法的特性1有穷性有穷性2确定性确定性3有有0个或多个输入个或多个输入4有一个或多个输出有一个或多个输出5有效性有效性4.1.3算法的表示算法的表示一、自然语言与伪代码表示算法自然语言:就是指人们日常使用的语言,可以是汉语、英语或其它语言。伪代
75、码:是用介于自然语言和计算机语言之间的文字和符号(包括数学符号)来描述算法。例如:例例如:例4.1可用如下的伪代码表示可用如下的伪代码表示Begin(算法开始)输入A,B,CIFAB则AMax否则BMaxIFCMax则CMaxPrintMaxEnd(算法结束)二二用用传统传统流程图表示算法流程图表示算法处理框起止框I/O框判断框流程线连接点1、传统流程图中的基本符号、传统流程图中的基本符号2、三种基本结构的表示、三种基本结构的表示(1)顺序结构)顺序结构条件语句1语句2YN语句1语句2(2)选择结构)选择结构条件(a)条件语句组(3)循环结构)循环结构a)当型当型循环循环b)直到循环直到循环Y
76、NYN(b)语句组三种基本结构的特点:三种基本结构的特点:(1)只有一个入口)只有一个入口(2)只有一个出口)只有一个出口(3)不存在死语句)不存在死语句(4)不存在死循环)不存在死循环例:例:例例4.2输入输入10个数,打印输出其中的最大的数的流程图个数,打印输出其中的最大的数的流程图从从10个数中选出最大的数的流程图个数中选出最大的数的流程图NMaxMax=A输入A开始再输入给AN=N+1打印Max结束YNNY4.1.4用用NS流程图表示算法流程图表示算法将将全部算法写在一个矩形框内,在矩形内还可包含其全部算法写在一个矩形框内,在矩形内还可包含其它从属于它的框它从属于它的框三种三种基本结构
77、的基本结构的NS图表示:图表示:语句A语句B语句A语句B条件YN1、顺序结构、顺序结构2、选择结构、选择结构语句组(3)循环结构)循环结构a)当型当型循环循环b)直到循环直到循环当条件成立语句组直到当条件成立例:例:画出从画出从10个数中选出最大的数的个数中选出最大的数的NS流程图流程图(a)(b)传统流程图NMaxMax=A输入A开始再输入给AN=N+1打印Max结束YNNY输入A当N=MaxYNPrivateSubForm_Click()Dima%,max%,i%max=aFori=1To10a=Val(InputBox(A=?)IfamaxThenmax=aNextiPrintMax=;
78、maxEndSub最后需要说明的是:上面介绍的算法表示是给人看的,即是为帮助程序开发人员阅读、编写程序而设计的一种辅助工具,程序则必须符一计算机语言的语法规则。下面是例4.2的计算机程序,即为用计算机语言表示算用计算机语言表示算法:法:4.1.6结构化程序设计方法(补充)结构化程序设计方法(补充)(一)、用计算机解决问题的过程(一)、用计算机解决问题的过程提出、分提出、分析问题析问题确定算确定算法模型法模型设计设计算法算法编写编写程序程序调试调试程序程序分析输分析输出结果出结果正确正确合理合理结束结束不正确不正确(二)、结构化程序设计思想(二)、结构化程序设计思想自顶自顶向下、逐步细化、模块化
79、向下、逐步细化、模块化自顶自顶向下:向下:先从全局、整体设计先从全局、整体设计逐步细化:逐步细化:将一个问题分解成几个较小的问题解决将一个问题分解成几个较小的问题解决模块化:模块化:将一个大任务分解成若干个较小的部分,将一个大任务分解成若干个较小的部分,每每个部分承担一定功能,称为个部分承担一定功能,称为“功能模功能模块块”例:给例:给100个整数,打印输出其中的素数个整数,打印输出其中的素数S1NS流程图流程图输入输入100个数存入个数存入X1,x2,x100打印打印x1.x100中中不等于不等于0的数的数让让x1,x2,x100中的中的非素变为非素变为0S3S2输入输入xi当当i=100i
80、=i+1i=1S1细化细化xi0当当i=100i=i+1i=1YN打印打印xiS3细化细化S1NS流程图流程图输入输入100个数存入个数存入X1,x2,x100打印打印x1.x100中中不等于不等于0的数的数让让x1,x100中的中的非素变为非素变为0S3S2S2细化细化判断判断xi是否是素数,是否是素数,若不是则将若不是则将xi=0当当i=100i=i+1i=1S21r=0rxi/2S21细化细化输入输入100个数存入个数存入X1,x2,x100打印打印x1.x100中中不等于不等于0的数的数让让x1,x100中中的非素变为的非素变为0细化后的流程图细化后的流程图输入输入xi当当i=100i
81、=i+1i=1当当ixi/2i=i+1xi0当当i=100i=1YN打印打印xii=i+14.2顺序结构顺序结构4.2.1 4.2.1 赋值语句赋值语句 形式形式: : 变量名表达式变量名表达式对象对象.属性表达式属性表达式功能:功能:将表达式的值赋值给变量名或指定对象的属性。将表达式的值赋值给变量名或指定对象的属性。一般用于给变量赋值或对控件设定属性值一般用于给变量赋值或对控件设定属性值.例:例:sRate!=0.1Text1.Text欢迎使用欢迎使用VisualBasic6.0”说明:说明:1执行过程:先求表达式的值,然后将值赋值给左边的变量。执行过程:先求表达式的值,然后将值赋值给左边的
82、变量。2右边的表达式可以是变量、常量、函数调用等特殊的表达右边的表达式可以是变量、常量、函数调用等特殊的表达式。式。3不要将不要将“”理解为数学上的等号:理解为数学上的等号:A=A+1是表示将是表示将A单元的值加后以放回到单元的值加后以放回到A单元。单元。执行过程如右图执行过程如右图4赋值符号“=”左边一定只能是变量名或对象的属性引用,不能是常量、符号常量、表达式。下面的赋值语句都是错的:5=X左边是常量。Abs(X)=20左边是函数调用,即是表达式。5.赋值符号“=”两边的数据类型一般要求应一致。4.2.2数据的输出数据的输出Print方法方法Print方法的一般格式:对象名对象名.Prin
83、t,|;说明:说明:对象名.可以是窗体名、图片框名,也可是立即窗口“Debug”。若省略对象,则表示在当前窗体上输出。在2.3节窗体对象的方法中对Print方法做了详细的介绍。用Print方法在图片框和立即窗口对象中输出与在窗体对象中输出完全相同。缺省值标题题提示4.2.3用户交互函数和过程用户交互函数和过程1.InputBox函数变量名=InputBox$(,)其中:提示提示信息,标题标题区显示,缺省输入区缺省值有$返回字符类型,否则为数值类型.例如,要在屏幕上显示如下的对话框:例如:例如:有下列语句如下:DimstrNameAsString*40,strS1AsString*40strS1
84、=“请输入你的姓名”+Chr(13)+Chr(10)+“然后单击确定”strName=InputBox$(strS1,“输入框”,100,100)当键盘输入“王晓明”后,变量strName获得键盘输入的值.缺省值标题题提示2.MsgBox函数和函数和MsgBox过程过程函数形式函数形式:变量变量%=MsgBox(提示提示,按钮按钮图标图标+缺省按钮缺省按钮+模式模式,标题,标题)过程形式过程形式:MsgBox提示提示,按钮按钮图标图标+缺省按钮缺省按钮+模式模式,标题标题图标标题提示信息命令按钮说明:说明:“标题标题”和和“提示提示”与与InputBox函数中对应的参数相函数中对应的参数相同;
85、同;“按钮图标按钮图标+缺省按钮缺省按钮+模式模式”是整型表达式,决是整型表达式,决定信息框按钮数目、出现在信息框上的图标类型及操作模定信息框按钮数目、出现在信息框上的图标类型及操作模式式(见表见表4.1)若程序中需要返回值,则使用函数,否则可调用过若程序中需要返回值,则使用函数,否则可调用过程。程。按钮及图标值如下按钮及图标值如下:根据用户所选按钮,函数返根据用户所选按钮,函数返回回1717的整数值,其含义的整数值,其含义如下表如下表: :(表(表4.2)4.2)4.2.4注释语句其语法格式为:Rem或说明:1.指要包括的任何注释文本。在Rem关键字和注释内容之间要加一个空格。可以用一个英文
86、单引号“”来代替Rem关键字。2.如果在其他语句行后面使用Rem关键字,必需用冒号(:)与语句隔开。若用英文单引号“”,则在其他语句行后面不必加冒号(:)。例如:ConstPI=3.1415925符号常量PIS=PI*r*r:Rem计算圆的面积4.3选择结构选择结构1.IfThen语句语句(单分支结构单分支结构)IfThen语句块语句块EndIf或或IfThen例例:已知两个数已知两个数x和和y,比较它们的比较它们的大小,大小,使得使得x大于大于y.IfxyThent=x:x=y:y=tEndIf或或IfxyThent=x:x=y:y=t2.IfThenElse语句(双分支结构)IfThenE
87、lseEndIfIfThenElse例如:输出例如:输出x,y两个中值较大的一个值。两个中值较大的一个值。IF XY Then Print XElse Print YEnd If也可以写成如下的单行形式:也可以写成如下的单行形式: IF XY Then Print X Else Print Y双分支选择结构执行过程例例4.1设计一个求解一元二次方程的程序设计一个求解一元二次方程的程序3.IfThenElseIf语句语句(多分支结构多分支结构)形式形式:IfThenElseIfThenElse语句块语句块n+1EndIf例:输入一学生成绩,评定其等级。方法是:例:输入一学生成绩,评定其等级。方法
88、是:90100分为分为“优秀优秀”,8089分为分为“良好良好”,7079分为分为“中等中等”,6069分为分为“及格及格”,60分以为分以为“不合格不合格”执行过程使用IF语句实现的程序段如下:Ifx=90thenPrint优秀ElseIfx=80ThenPrint良好ElseIfx=70ThenPrint中等ElseIfx=60ThenPrint及格ElsePrint不及格EndIf4.3.2SelectCase语句(情况语句)语句(情况语句)形式:形式:SelectCase变量或表达式变量或表达式Case表达式列表表达式列表1语句块语句块1Case表达式列表表达式列表2语句块语句块2Ca
89、seElse语句块语句块n+1EndSelect:与:与同类型的下面四种形式之一:同类型的下面四种形式之一:表达式表达式例例:A+5一组枚举表达式一组枚举表达式(用逗号分隔用逗号分隔)2,4,6,8表达式表达式1To表达式表达式260to100Is关系运算符表达式关系运算符表达式Is60数值型或字符串表达式例如:将例例如:将例4.3使用使用selectcase.语句来实现的程序段如下:语句来实现的程序段如下:Select Case x Case 90 to 100 Print 优秀优秀 Case 80 to 89 Print 良好良好 Case 70 to 79 Print 中等中等 Case
90、 60 to 69 Print 及格及格 Case Else Print 不及格不及格End Select补补充例题:充例题:设计一个由计算机来当小学低年级学生算术老师的设计一个由计算机来当小学低年级学生算术老师的VB应用程序,要求给出一系列的两个应用程序,要求给出一系列的两个110数的四则运算的算术数的四则运算的算术题,学生输入该题的答案,计算机根据学生的答案判断正确与题,学生输入该题的答案,计算机根据学生的答案判断正确与否,并给出成绩,单击结束命令按钮,退出应用程序。否,并给出成绩,单击结束命令按钮,退出应用程序。分析分析:产生产生110操作数,可通过操作数,可通过Int(10*Rnd+1
91、)实现实现4.3.3选择结构的嵌套选择结构的嵌套在IF语句的Then分支和Else分支中可以完整地嵌套另一IF语句或SelectCase语句,同样SelectCase语句每一个Case分支中都可嵌套另一IF语句或另一SelectCase语句。下面是两种正确的嵌套形式:(1)IFThen.ThenThenElse.EndIf.Else.IFThen.Else.EndIf.EndIF(2)IFThen.SelectCaseCaseIFThenElse.EndIfCase.EndSelect.EndIF注注意意:只只要要在在一一个个分分支支内内嵌嵌套套,不不出出现现交交叉叉,满满足足结结构构规规则则
92、,其其嵌嵌套套的的形形式式将将有有很很多多种种,嵌嵌套套层层次次也也可可以以任任意意多多。对对于于多多层层IF嵌嵌套套结结构构中中,要要特特别别注注意意IF与与Else的的配配对对关关系系,一一个个Else必必须须与与IF配配结结,配配对对的的原原则则是是:在在写写含含有有多多层层嵌嵌套套的程序时,建议使用缩进对齐方式,这样容易阅读和维护。的程序时,建议使用缩进对齐方式,这样容易阅读和维护。例例4.4 设计一个用户身份验证程序,运行界面如下图所示。4.4 4.4 循循环结构构1.For循环语句循环语句(一般用于循环次数已知一般用于循环次数已知)形式形式For循环变量初值循环变量初值to终值终值
93、Step步长步长语句块语句块ExitFor语句块语句块Next循环变量循环变量循环体0初值终值=1时,可省略终值=0死循环步长步长循环次数循环次数例例:ForI=2To13Step3PrintI,NextIPrint“I=“,I循环执行次数循环执行次数输出输出I的值分别为的值分别为:25811出了循环输出为出了循环输出为:I=14例4.5编程计算:S=1+2+3+100DimS%,I%S=0累加前变量S为0ForI=1to100S=S+INextIPrintS=,S当N=100N=N+1打印SS=0,N=1S=S+N例4-5的算法流程图形式形式1:(当型循环):(当型循环)DoWhile|Un
94、til语句块语句块ExitDo语句块语句块Loop4.4.2DoLoop循环语句循环语句形式形式2:(直到循环)直到循环)Do语句块语句块ExitDo语句块语句块LoopWhile|Until条件语句块语句块TFExitDo条件语句块语句块TFExitDoDoUntilLoop执行过程执行过程DoLoopUntil执行过程执行过程说明:说明:(1)当当使使用用While构构成成循循环环时时,当当条条件件为为“真真”,则反复执行循环体,当条件为,则反复执行循环体,当条件为“假假”,则退出循环。,则退出循环。(2)当当使使用用Until构构成成循循环环时时,当当条条件件为为“假假”,则则反反复复执
95、执行行循循环环体体,直直到到条条件件成成立立,即即为为“真真”时时,则则退退出循环。出循环。(3)在在循循环环体体内内一一般般应应有有一一个个专专门门用用来来改改变变条条件件表表达达式式中中变变量量的的语语句句,以以使使随随着着循循环环的的执执行行,条条件件趋趋于于不不成成立立(或或成成立),最后达到退出循环。立),最后达到退出循环。(4)语句)语句ExitDo的作用是退出它所在的循环结构,它只的作用是退出它所在的循环结构,它只能用在能用在DO/Loop结构中,并且常常是同选择结构一起出现在结构中,并且常常是同选择结构一起出现在循环结构中,用来实现当满足某一条件时提前退出循环。循环结构中,用来
96、实现当满足某一条件时提前退出循环。4.4.3WhileWend语句语句使用格式如下:WhileWend说明:该语句的功能与DoWhile.Loop实现的循环完全相同。例:用doLoop语句改写前面的例题4.5例例4.7求两个整数的最大公约数、最小公倍数Dimn%,m%,nm%,r%m=Val(InputBox(m=)n=Val(InputBox(n=)nm=n*mIfmnThent=m:m=n:n=tr=mmodnDoWhile(r0)m=nn=rr=mmodnLoopPrint最大公约数=,nPrint最小公倍数=,nm/n算法使用转碾除法,流程图如右,实现的程序代码如下:4.4.4循环的嵌
97、套循环的嵌套多重循环结构多重循环结构如果在一个循环内完整地包含另一个循环结构,则称如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。嵌套一层称为二重循环,嵌套二层称为三重循环。上上面面介介绍绍的的几几种种循循环环控控制制结结构构可可以以相相互互嵌嵌套套,下下面面是是几种常见的二重嵌套形式:几种常见的二重嵌套形式:(1)ForI=.ForJ=.NextJ.NextI(2)ForI=.DoWhile/Until.Loop.NextI(3)DoWhile.F
98、orJ=.NextJ.Loop(4)DoWhile/Until.DoWhile/Until.Loop.Loop例如例如:打印九九乘法表打印九九乘法表.Fori=1To9Forj=1To9se=i&j&=&i*jPicture1.PrintTab(j-1)*9+1);se;NextjPicture1.PrintNexti对于循环的嵌套,要注意以下事项:对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环不能从循环
99、体外转向循环体内,也不能从外循环转向内循环.正正确确错错误误Forii=1To10Forjj=1To20NextiiNextjjForii=1To10Forii=1To20NextiiNextiiForii=1To10Forjj=1To20NextjjNextiiForii=1To10NextiiForii=1To10Nextii4.4.5几种循环语句比较几种循环语句比较4.4.6循环结构与选择结构的嵌套循环结构与选择结构的嵌套在循环结构中可以完整嵌套选择结构即整个选择结构都属于循环体。在选择结构中嵌套循环结构时,则要求整个循环结构必须完整地嵌套在一个分支内,一个循环结构不允许出现在两个或两个
100、以上的分支内。(1)ForI=IFThenEndIFNextI(6)IFThenForI=EndIFNextI(5)SelectCaseForI=CaseCaseNextIEndSelect(3)ForI=IFThenNextIEndIF(2)IFThenForI=NextIEndIF(4)ForI=SelectCaseCaseCaseEndSelectNextI4.5 4.5 其它控制语句其它控制语句 4.5.1Goto语句语句形式形式:GoTo标号标号|行号行号作用是无条件地转移到标号或行号指定的那行语句作用是无条件地转移到标号或行号指定的那行语句.标号是一个字符序列标号是一个字符序列,行
101、号是一个数字序列。行号是一个数字序列。例例3.8求求100以内的素数以内的素数判别某数判别某数m是否为素数最简单的方法是是否为素数最简单的方法是:对于对于m从从i=2,3,m-1判别判别m能否被能否被i整除,只要有整除,只要有一个能整除一个能整除,m不是素数,否则不是素数,否则m是素数。是素数。Form=2To100Fori=2Tom-1If(mModi)=0ThenGoToNotNextMNextiPrintmNotNextM:Nextm4.5.2Exit语句语句Exit语句用于退出Do.Loop、For.Next、Function或Sub代码块。 对应的使用格式为:ExitDo、ExitF
102、or、ExitFunction、ExitSub。分别表示退出DO循环、For循环、函数过程、子过程。例如:下面的例子是使用Exit语句退出For.Next循环、Do.Loop循环及子过程。PrivateSubForm_Click()DimI%,Num%Do建立无穷循环。ForI=1To100循环100次。Num=Int(Rnd*100)生成一个099的随机数。SelectCaseNumCase10:ExitFor退出For.Next循环。Case50:ExitDo退出Do.Loop循环。Case64:ExitSub退出子过程。EndSelectNextILoopEndSub4.5.3End语句
103、语句形式:End功能:结束一个程序的运行。在VisualBasic中还有多种形式的End语句,用于结束一个程序块或过程。其形式有:EndIfEndSelectEndTypeEndWithEndSubEndFunction等它们与对应的语句配对使用。4.5.4暂停语句暂停语句Stop语句用来暂停程序的执行,相当于在事件代码中设置断点。语法格式为:Stop说明:1.Stop语句的主要作用是把解释程序置为中断(Break)模式,以便对程序进行检查和调试。可以在程序的任何地方放置Stop语句,当执行Stop语句时,系统将自动打开立即窗口。2.与End语句不同。4.5.5With.EndWith语句语句
104、形式:形式:With对象名对象名语句块语句块EndWith说明:With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在With控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用 With 语句来给同一个对象的几个属性赋值。例例如如,需需要要对对同同一一对对象象设设置置几几个个属属性性。途途径径之之一一是是使使用用多多条条语句。语句。Private Sub Form_Load()Command1.Caption = 退出退出(E&xit)Command1.Top = 500Comma
105、nd1.Left = 4500Command1.Enabled = TrueEnd Sub使用使用With.EndWith语句,上面程序的代码如下。语句,上面程序的代码如下。Private Sub Form_Load()With Command1.Caption = OK.Top = 500.Left = 4500.Enabled = TrueEnd WithEnd Sub 4.6应用程序举例应用程序举例4.6.1素数与哥德巴赫猜想素数与哥德巴赫猜想例例4.9判断一个给定的整数是否为素数。算算法法思思路路:素素数数指指除除了了能能被被1和和自自身身外外,不不能能被被其其他他整整数数整整除除的的
106、自自然然数数。判判断断整整数数N是是不不是是素素数数的的基基本本方方法法是是:将将N分分别别除除以以2,3,N-1,若若都都不不能能整整除除,则则N为为素素数数。因因为为N=Sqr(N)*Sqr(N),所所以以,当当N能能被被大大于于等等于于Sqr(N)的的整整数数整整除除时时,一一定定存存在在一一个个小小于于等等于于Sqr(N)的的整整数数,使使N能能被被它它整整除除,因因此此只只要要判判断断N能能否否被被2,3,Sqr(N)整除即可。整除即可。算法流程图如下:DimN%,I%,K%N=Val(InputBox(N=?)K=Int(Sqr(N)ForI=2ToKIfNModI=0ThenEx
107、itForNextIIfIKThenPrintN;是素数是素数ElsePrintN;不是素数不是素数EndIf例例4.10编一程序验证哥德巴赫猜想:一个大于等于编一程序验证哥德巴赫猜想:一个大于等于6的偶数的偶数可以表示为两个素数之和。例如:可以表示为两个素数之和。例如:6=3+38=3+510=3+7算算法法设设计计:设设N为为大大于于等等于于6的的任任一一偶偶数数,将将其其分分解解为为N1和和N2两两个个数数,使使用用N1+N2=N,分分别别判判断断N1和和N2是是否否为为素素数数,若若都都是是,则则为为一一组组解解。若若N1不不是是素素数数,就就不不必必再再检检查查N2是是否否素素数数。
108、先先从从N1=3开开始始,直直到到N1=N/2为为止止。算算法法流流程程图图如如图图4-29所所示示。将将程程序序代代码码写写到到窗窗体的单击事件中。体的单击事件中。实现上面算法的程序代码如下:PrivateSubForm_Click()DimN%,N1%,N2%,I%,K1%,K2%N=Val(InputBox(输入大于6的偶数)ForN1=3ToN2Step2K1=Int(Sqr(N1)ForI=2ToK1判断N1是否是素数IfN1ModI=0ThenExitForNextIIfIK1Then如果N1为素数,将N分解为N1+N2N2=N-N1K2=Int(Sqr(N2)ForI=2ToK2
109、判断N2是否是素数IfN2ModI=0ThenExitForNextIIfIK2Then如果N2也为素数,则打印输出PrintN&=&N1&+&N2EndIfEndIfNextN1EndSub4.6.2字符串处理字符串处理例例4.11统计文本框中英文单词的个数。算法设计算法设计(1)从文本(字符串)的左边开始,取出一个字符;设逻辑量WT表示所取字符是否是单词内的字符,初值设为False。(2)若所取字符不是“空格”、“逗号”、“分号”或“感叹号”等单词的分隔符,再判断WT是否为True,若WT不为True,则表示新单词的开始,让单词数Nw=Nw+1;让WT=True。(3)若所取字符是“空格”
110、、“逗号”、“分号”或“感叹号”等单词的分隔符,则表示字符不是单词内字符,让WT=False。(4)再依次取下一个字符,重复(2)(3)步直到文本结束。例例4.12字符的加密和解密字符的加密和解密加密算法是:加密算法是:将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式:c=chr(Asc(c)+k)例如:设序数k为5,这时AF,a f,BG当加序数后的字母超过Z或z则c=Chr(Asc(c)+k-26)例如:Youaregood Dtzfwjltti解密算法:解密算法:解密为加密的逆过程将每个字母C减(或加)一序数K,即c=chr(Asc(c)-k),例如:序数k为5,这时
111、Z U,z u,Y T当加序数后的字母小于A或a则c=Chr(Asc(c)-k+26)迭代法在数学上也称“递推法”,凡是由一给定的初值,通过某一算法(公式)可求得新值,再由新值按照同样的算法又可求得另一个新值,这样经过有限次即可求得其解。4.6.3迭代法迭代法例例4.13用迭代法求某个数的平方根。已知求平方根的迭代公式为:算法思想如下:算法思想如下:设平方根的解为x,可假定一个初值x0=a/2(估计值),根据迭代公式得到一个新的值x1,这个新值x1比初值x0更接近要求的值x;再以新值作为初值,即:x1x0,重新按原来的方法求x1,重复这一过程直到|x1-x0|(某一给定的精度)。此时可将x1作
112、为问题的解。程序代码见教材Pg.103第五章第五章 数数 组组5.1概述数组的概念:数组的概念:数组并不是一种数据类型,而数组并不是一种数据类型,而是是一组相同类型数据一组相同类型数据的集合。用一个统一的名字的集合。用一个统一的名字(数组名)数组名)代表逻辑上相关的一批数据,每个元代表逻辑上相关的一批数据,每个元素用素用下标变量下标变量来区分;下标变量代表元素在数组来区分;下标变量代表元素在数组中的位置。中的位置。其表示形式:A(1),A(10)X(1,1),X1(1,10),X(2,10)Y(0,0,0),Y(1,2,5)VisualBasic中中的的数数组组,按按不不同同的的方方式式可可分
113、分为为以以下几类:下几类:按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。按数组的维数可分为:一维数组、二维数组、多维数组。对象数组:菜单对象数组、控件数组。5.2一维数组一维数组5.2.1一维数组的声明一维数组的声明形式:Dim数组名数组名(to)As或:或:Dim数组名数组名(to)例:Dima(1to10)AsInteger声明了a数组有10个元素与上面声明等价形式:Dima%(1to10)1是下标的下界10是下标的上界数组元数的数据类型说明:1数组名的命名规则与变量的命名相同。2数组的元素
114、个数:上界-下界+1。3缺省为0,若希望下标从1开始,可在模块的通用部分使用OptionBase语句将设为1。其使用格式是:OptionBase0|1后面的参数只能取0或1例如:OptionBase1将数组声明中缺省下标设为14和不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。5如果省略As子句,则数组的类型为变体类型。6数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序,如图5-1所示:5.2.2一维数组元素的引用一维数组元素的引用使用形式:使用形式:数组名数组名(下标下标)其中:下标可以是整型变量、常量或表达式。例如:设有下面的数组B
115、(10)AsInteger则下面的语句都是正确的。A(1)=A(2)+B(1)+5取数组元素运算A(i)=B(i)下标使用变量B(i+1)=A(i+2)下标使用表达式5.2.3 5.2.3 一维数组的基本操作一维数组的基本操作 1.可通过循环给数组元素的初值可通过循环给数组元素的初值 Fori=1To10A数组的每个元素值为1A(i)=1Nexti2.数组的输入数组的输入Fori=1To4Forj=1To5sc(i,j)=InputBox(输入输入sc(&i&,&j&)的值的值)NextjNextI3. 3. 数组的输出数组的输出输出如下图所示的下三角数据输出如下图所示的下三角数据Dimsc(
116、5,5)AsInteger,i%,j%Fori=1To5Forj=1Toisc(i,j)=i*5+jPrintsc(i,j);NextjPrint换行换行NextI4.求数组中最大元素及所在下标求数组中最大元素及所在下标DimMaxAsInteger,iMaxAsIntegerMax=A(1):iMax=1Fori=2To10IfA(i)MaxThenMax=A(i)iMax=iEndIfNextI5.将数组元素倒置将数组元素倒置Fori=1To102t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNextI例例5.15.2.4一维数组的应用一维数组的应用一、分类统计一、分类统计
117、例例5.2在在例例5.1中中如如果果还还要要统统计计09,1019,2020,.8089,9099分数段及分数段及100分的学生人。分的学生人。则可另用数组则可另用数组bn来存各分数段的人数,并用来存各分数段的人数,并用bn(0)存存09分的人数,分的人数,bn(1)存存1019分的人数,分的人数,bn(9)存存9099分分的人数,的人数,bn(10)存存100分的人数。分的人数。二、二、排序问题排序问题1选择法排序选择法排序算法思想:算法思想:1)对对有有n个个数数的的序序列列(存存放放在在数数组组a(n)中中),从从中中选选出出最最小小(升升序序)或或最最大大(降降序序)的的数数,与第与第
118、1个数交换位置;个数交换位置;2)除除第第1个个数数外外,其其余余n-1个个数数中中选选最最小小或或最最大大的的数数,与与第第2个数交换位置;个数交换位置;3)依依次次类类推推,选选择择了了n-1次次后后,这个数列已按升序排列。这个数列已按升序排列。1选择法排序选择法排序算法思想:算法思想:1)对对有有n个个数数的的序序列列(存存放放在在数数组组a(n)中中),从从中中选选出出最最小小(升升序序)或或最最大大(降降序序)的的数数,与与第第1个个数数交交换换位置;位置;2)除除第第1个个数数外外,其其余余n-1个个数数中中选选最最小小或或最最大大的的数数,与第与第2个数交换位置;个数交换位置;3
119、)依依次次类类推推,选选择择了了n-1次次后后,这这个个数数列列已已按按升升序序排排列。列。For i = 1 To n - 1For i = 1 To n - 1 p = ip = i For j = i + 1 To n For j = i + 1 To n If a(p) a(j) Then p = j If a(p) a(j) Then p = j Next j Next j temp = a(i) temp = a(i) a(i) = a(p) a(i) = a(p) a(p) = temp a(p) = tempNext iNext i选择法排序(升序)的选择法排序(升序)的VB程
120、序程序:2冒泡法排序(递增)冒泡法排序(递增)算法思想:算法思想:(将相邻两个数比较,小的调到前头将相邻两个数比较,小的调到前头)1)有有n个个数数(存存放放在在数数组组a(n)中中),第第一一趟趟将将每每相相邻邻两两个个数数比比较较,小小的的调调到到前前头头,经经n-1次次两两两两相相邻邻比比较较后后,最最大大的的数数已已“沉沉底底”,放放在在最最后后一一个位置,小数上升个位置,小数上升“浮起浮起”;2)第第二二趟趟对对余余下下的的n-1个个数数(最最大大的的数数已已“沉沉底底”)按按上上法法比比较较,经经n-2次次两两两两相相邻邻比比较较后后得得次次大的数;大的数;3)依依次次类类推推,n
121、个个数数共共进进行行n-1趟趟比比较较,在在第第j趟中要进行趟中要进行n-j次两两比较。次两两比较。For i = 1 To n - 1For i = 1 To n - 1 For j = 1 To n-i For j = 1 To n-i If a(j) a(j+1) Then If a(j) a(j+1) Then temp=a(j) temp=a(j) a(j)=a(j+1) a(j)=a(j+1) a(j+1)=temp a(j+1)=temp End if End if Next j Next jNext iNext i冒泡法排序(升序)的冒泡法排序(升序)的VB程序程序:例例5.3
122、用随机函数产生50个10,100)的随机整数,并按照由小到大的顺序打印出来。程序界面如下:5.3二维数组及多维数组二维数组及多维数组5.3.1二维数组的声明二维数组的声明声明格式如下:声明格式如下:Dim数组名数组名(to,to)As其中的参数与一维数组完全相同。例如:例如:Dim a(2,3) As Single 二二维维数数组组在在内内存存的的存存放放顺顺序序是是“先先行行后后列列”。例例如如数数组组a的各元素在内存中的存放顺序是:的各元素在内存中的存放顺序是:a(0,0)a(0,1)a(0,2)a(0,3)a(1,0)a(1,1)a(1,2)a(1,3)a(2,0)(2,1)a(2,2)
123、a(2,3)5.3.2二维数组的引用二维数组的引用引用形式:引用形式:数组名数组名(下标下标1,下标,下标2)例如:例如: a(1,2)=10 a(i+2,j)a(2,3)*2 在程序中常常通过二重循环来操作使用二维数组元素。在程序中常常通过二重循环来操作使用二维数组元素。5.3.3二维数组的基本操作二维数组的基本操作1.二维数组数据的输入2.2.求最大元素及其所在的行和列3.3.计算两矩阵相乘4.4.矩阵的转置例例5.4设某一个班共有设某一个班共有60个学生,期末考试个学生,期末考试5门课程,请编一程序评定学生的奖学金,要门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学
124、号和各门求打印输出一、二等奖学金学生的学号和各门课成绩。(奖学金评定标准是:总成绩超过全课成绩。(奖学金评定标准是:总成绩超过全班总平成绩班总平成绩20%发给一个奖学金,超过全班总发给一个奖学金,超过全班总平成绩平成绩10%发给二个奖学金。)发给二个奖学金。)5.3.5多维数组的声明和引用多维数组的声明和引用定义多维数组的格式如下:定义多维数组的格式如下:Dim数数组组名名(to,to,)As例如:例如: Dim a(5,5,5) As Integer 声明声明a是三维数组是三维数组Dimb(2,6,10,5)AsInteger声明声明b是四维数组是四维数组5.4动态数组动态数组动动态态数数组
125、组:在在声声明明时时未未给给出出数数组组的的大大小小。定定长长数数组组是是在在程程序序编编译译时时分分配配存存储储空空间间,而而动动态态数数组组是是在在程程序序执执行行时时分分配配存存储储空间。空间。5.4.1动态数组的建立及使用动态数组的建立及使用建立动态数组包括声明和大小说明两步:建立动态数组包括声明和大小说明两步:1在使用在使用Dim、Private或或Public语句声明括号内为空的数组。语句声明括号内为空的数组。格式:格式:Dim|Private|Public数组名()数组名()As数据类型数据类型例:例:Dima()AsInteger2在过程中用在过程中用ReDim语句指明该数组的
126、大小。语句指明该数组的大小。格式:格式:ReDimPreserve数组名(下标数组名(下标1,下标,下标2)Preserve参数:保留数组中原来的数据例:例:RedimA(10)RedimPreserveA(20)说明:说明:(1)ReDim语语句句是是一一个个可可执执行行语语句句,只只能能出出现现在在过过程程中中,并并且可以多次使用,改变数组的维数和大小。且可以多次使用,改变数组的维数和大小。(2)定长数组声时中的下标只能是常量,而动态数组)定长数组声时中的下标只能是常量,而动态数组ReDim语句中的下标是常量,也可以是有了确定值的变量。语句中的下标是常量,也可以是有了确定值的变量。例:例:
127、PrivateSubForm_Click()DimNAsIntegerN=Val(InputBox(“输入输入N=?”)Dima(N)AsInteger.Endsub(3)在过程中可以多次使用)在过程中可以多次使用ReDim来改变数组的大小,来改变数组的大小,也可也可改变数组的维数。改变数组的维数。例:例:ReDimx(10)ReDimx(20)x(20)=30Printx(20)ReDimx(20,5)x(20,5)=10Printx(20,5)(4)每次使用每次使用ReDim语句都会使原来数组中值丢失,可语句都会使原来数组中值丢失,可以在以在ReDim后加后加Preserve参数来保留数组
128、中的数据。但此时参数来保留数组中的数据。但此时只能改变最后一维的大小。只能改变最后一维的大小。例例5.55.4.2与数组操作有关的几个函数与数组操作有关的几个函数1.Aarry函数函数2.Aarry函数可方便地对数组整体赋值,但它只能给声明函数可方便地对数组整体赋值,但它只能给声明Variant的变量或仅由括号括起的动态数组赋值。赋值后的数的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。组大小由赋值的个数决定。例如,要将例如,要将1,2,3,4,5,6,7这些值赋值给数组这些值赋值给数组a,可使用下面可使用下面的方法赋值。的方法赋值。Dim a()A=array(1,2,
129、3,4,5,6,7)Dim a A=array(1,2,3,4,5,6,7)2求数组的上界求数组的上界Ubound()函数、函数、下界下界Lbound()函数函数Ubound()函数和Lbound()函数分别用来确定数组某一维的上界和下界值。使用形式如下:UBound(,)LBound(,)其中:必需的。数组变量的名称,遵循标准变量命名约定。:可选的;一般是整型常量或变量。指定返回哪一维的上界。1表示第一维,2表示第二维,如此等等。如果省略默认是1。3Split函数函数使用格式:使用格式:Split(,)说明:说明:使用使用Split函数可从一个字符串中,以某个指定符号为分隔函数可从一个字符串
130、中,以某个指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维符,分离若干个子字符串,建立一个下标从零开始的一维数数组组。补充例:补充例:使用文件框,通过编程实现大量数据的输入使用文件框,通过编程实现大量数据的输入输入一系列的数据,存放在数组中。对输入的数据允许输入一系列的数据,存放在数组中。对输入的数据允许修改和自动识别非数字数据。修改和自动识别非数字数据。分析:分析:利用文本框实现大量数字串的输入和编辑的功能;利用文本框实现大量数字串的输入和编辑的功能;通过编程将输入的数字串以逗号为分界符分离出各项数据;通过编程将输入的数字串以逗号为分界符分离出各项数据;对非数字输入的判断能力
131、。对非数字输入的判断能力。5.5 5.5 控件数组控件数组 5.5.1控件数组的概念控件数组的概念一组相同类型的控件组成。一组相同类型的控件组成。它们共用一个控件名,具有它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。控件数组共享同样的事件过程,通过返回的下标控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。值区分控件数组中的各个元素。例:例:PrivateSubcmdName_Click(IndexAsInteger)IfIndex=3then处理第四个命令按钮的操作处理第四个命令
132、按钮的操作EndIfEndSub5.5.2控件数组的建立控件数组的建立一、在设计时建立控件数组的步骤:一、在设计时建立控件数组的步骤:1窗窗体体上上画画出出控控件件,进进行行属属性性设设置置,这这是是建建立立的的第第一一个个元元素;素;2选选中中该该控控件件,进进行行“Copy”操操作作若若干干次次和和“Paste”操作若干次建立了所需个数的控件数组元素。操作若干次建立了所需个数的控件数组元素。3进行事件过程的编程。进行事件过程的编程。二、运行时添加控件数组的步骤如下二、运行时添加控件数组的步骤如下:1在在窗窗体体上上画画出出某某控控件件,设设置置该该控控件件的的Index值值为为0,表表示示
133、该该控控件件为为数数组组,这这是是建建立立的的第第一一个个元元素素,并并可可对对一一些些取取值值相相同同的的属属性性进进行行设设置置,如如所所有有文文本本框框的的字字体体都都取取一一样样大小。大小。2在在编编程程时时通通过过Load方方法法添添加加其其余余的的若若干干个个元元素素,也也可可以通过以通过Unload方法删除某个添加的元素。方法删除某个添加的元素。Load方法和方法和Unload方法的使用格式:方法的使用格式:Load控件数组名控件数组名()Unload控件数组名控件数组名()其中,其中,为整型数据。表示控件数组的某个元素。为整型数据。表示控件数组的某个元素。3通过通过Left和和
134、Top属性确定每个新添加的控件数组元素在属性确定每个新添加的控件数组元素在窗体的位置,并将窗体的位置,并将Visible属性设置为属性设置为True。通过例通过例5.6来说明数组控件的使用:来说明数组控件的使用:例例5.6为例为例5.4的学生成绩处理设计如下图成绩输入界面的学生成绩处理设计如下图成绩输入界面第六章 过 程 6.1过程概述在VB5.0/6.0中,除了系统提供的内部函数过程和事件过程外,用户可自定义过程下列四种过程:“Sub”保留字开始的为子过程“Function”保留字开始的为函数过程“Property”保留字开始的为属性过程“Event”保留字开始的事件过程在在VB中,的中,的
135、Sub子过程分为:事件过程和通用过程子过程分为:事件过程和通用过程6.2.1事件过程事件过程(1)窗体事件的语法)窗体事件的语法Private Sub Form_事件名事件名(参数列表参数列表)语句组语句组End Sub(2)控件事件的语法控件事件的语法PrivateSub控件名控件名_事件名事件名(参数列表参数列表)语句组语句组 End Sub6.2Sub过程过程子过程的定义形式如下:子过程的定义形式如下:Public|PrivateStatic Sub 子过程名子过程名(形参表形参表) 语句组语句组 Exit Sub 语句组语句组End Sub6.2.2通用过程(通用过程(Sub过程)的定
136、义过程)的定义说明:说明:(1)子过程名:命名规则与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。(2)形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。(3)过程可以无形式参数,但括号不能省。(4)参数的定义形式:ByValByRef变量名变量名( )As 类型类型,,ByVal表示当该过程被调用时,参数是按值传递的;缺省或ByRef表示当该过程被调用时,参数是按地址传递的。例例6.1编一个交换两个整型变量值的子过程。PrivateSubSwap(XAsInteger
137、,YAsInteger)DimtempAsIntegerTemp=X:X=Y:Y=TempEndSub6.2.3子过程的建立子过程的建立通过“工具”菜单中的“添加过程”命令,出现“添加过程”对话框(见图6.1),选择过程类型(子过程、函数、属性、事件)及作用范围(公有的Public、私有的Private),单击确定后得到一个过程或函数定义的结构框架(模板),如:Public Sub Sort( )End Sub6.2.4过程的调用过程的调用1子过程的调用子过程的调用子过程名子过程名参数列表参数列表或或Call子过程名子过程名(参数列表参数列表)2函数过程的调用函数过程的调用变量名变量名=函数过
138、程名函数过程名(参数列表参数列表)说明:说明:(1)参数列表参数列表称为实参或实元,它必须与形参保持个数相称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。同,位置与类型一一对应。(2)调用时把实参值传递给对应的形参。其中值传递(形调用时把实参值传递给对应的形参。其中值传递(形参前有参前有ByVal说明)时实参的值不随形参的值变化而改变。而说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。地址传递时实参的值随形参值的改变而改变。(3)当参数是数组时,形参与实参在参数声明时应省略当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。其维数,
139、但括号不能省。(4)调用子过程的形式有两种,用调用子过程的形式有两种,用Call关键字时,实参关键字时,实参必须加圆括号括起,反之则实参之间用必须加圆括号括起,反之则实参之间用“,”分隔。分隔。例:调用上面定义的例:调用上面定义的Sawp子过程的形式:子过程的形式: Swap a,b Call Swap(a,b)PrivateSubCmdOK()CallSwap(a,b)Swapa,bEndSubPrivateSubSwap(x%,y%)Dimtemp%Temp=XX=YY=TempEndSub过程调用的执行过程:过程调用的执行过程:6.3Function过程VisualBasic函数分为内部
140、函数和外部函数,外部函数是用户根据需要用Function关键字定义的函数过程,与子过程不同的是函数过程将返回一个值。6.3.1函数过程(函数过程(Function过程)的定义过程)的定义Public|PrivateStaticFunction函数名()As函数体函数名=返回值ExitFunction函数名=返回值EndFunction函数体说明:说明:(1)函数名:命名规则与变量名规则相同。但不能与系统的内部函数或其它通用子过程同名,也不能与已定义的全局变量和本模块中模块级变量同名。(2)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在函数过程中至少要对函数
141、名赋值一次。(3)AS类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。(4)ExitFunction:表示退出函数过程,常常是与选择结构(If或SelectCase语句)联用,即当满足一定条件时,退出函数过程。(5)形参数列表:形参的定义与子过程完全相同。例例6.26.3.2函数的调用函数的调用调用形式如下:调用形式如下:函数名(实参列表)函数名(实参列表)说明:说明:在调用时实参和形参的数据类型、顺序、个数必须匹配。函数调用只能出现在表达式中,其功能是求得函数的返回值。例例6.36.4过程之间参数的传递过程之间参数的传递VisualBasic中不同模块(过程)之间
142、数据的传递有两种方式:通过过程调用实参与形参的结合实现;使用全局变量来实现各过程中共享数据。6.4.1 6.4.1 形式参数与形式参数与实际参数参数1、形式参数、形式参数是指在定义通用过程时,出现在Sub或Function语句中的变量名后面园括号内的数,是用来接收传送给子过程的数据,形参表中的各个变量之间用逗号分隔。2、实际参数实际参数是指在调用Sub或Function过程时,写入子过程名或函数名后括号内的参数,其作用是将它们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。实参可由常量、表达式、有效的变量名、数组名(后加左、右括号,如A())组成,实参表中各参数用逗号
143、分隔。6.4.2参数传递(虚实结合)参数传递(虚实结合)参数传递指主调过程的实参(调用时已有确定值和内存地址的参数)传递给被调过程的形参,参数的传递有两种方式:按值传递、按地址传递。形参前加“ByVal”关键字的是按值传递,缺省或加“ByRef”关键字的为按地址传递。传址与传值传址与传值传址:传址:形参得到的是实参的地址,当形参值的改变同形参得到的是实参的地址,当形参值的改变同时也改变实参的值。时也改变实参的值。传值:传值:形参得到的是实参的值,形参值的改变不会影形参得到的是实参的值,形参值的改变不会影响实参的值。响实参的值。SubSwap2(x%,y%)DimTemp%Temp=x:x=y:
144、y=TempEndSubSubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub例例6.4PrivateSubCmdOK_Click()a%=10:b%=20:Swap1a,b传传值值PrintA1=;a,B1=;ba=10:b=20:Swap2a,b传地址传地址PrintA2=;a,B2=;bEndSub程序调用执行过程:值传递的执行过程如下图:值传递的执行过程如下图:通过地址传递数据的执行过程通过地址传递数据的执行过程6.5数组作过程的参数数组作过程的参数VisualBasic允许把数组作为实参传送到过程中。数组作参数是通过传地址方式
145、传送。在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点:还应注意以下几点:1为了把一个数组的全部元素传送给一个过程,应将数组名分别写入形参表中,并略去数组的上下界,但括号不能省略。PrivateSubSort(a()Assingle)EndSub其中形参“a()”即为数组。2被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。3当用数组作形参时,对应的实参必须也是数组,且类型一致。4实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。例如:定义了实参数组b(1to8),给它们赋了值,调用Sort()函数过程的形式如下:Sortb()或或CallSort(
146、b()实参数组后面的括号可以省略,但为便于阅读,建议一般不要省略为好。调用时形参数组a和实参数组b虚实结合,共用一段内存单元,如图6-7所示。因此在Sort()过程中改变数组a的各元素值,也就相当于改变了实参数组b中对应的元素的值,当调用结束时,形参数组a成为无定义。b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)a(1) a(2)a(3)a(4)a(5)a(6)a(7)a(8)参数为数组时虚实结合示意图例例6.7改写上章例5.3的排序程序,分别将排序用子过程Sort(),产生N个随机整数用子过程GetData(),输入N个数组元素用PrData()子过程来完成。补补充充例例题
147、题:编编写写判判断断一一个个整整数数是是不不是是素素数数写写函函数数过过程程。如果给定的整数是素数,则返回逻辑值如果给定的整数是素数,则返回逻辑值True,否则返回否则返回False Private Function Prime(n As Integer) As Boolean Dim k%,Yes As Boolean Yes=True For k=2 to n2 IF n mod k =0 then Yes=False : Exit For Next k Prime=Yes 给函数名赋值,作为函的返回值给函数名赋值,作为函的返回值End Function如何调用该函数呢?如何调用该函数呢?
148、使用该函数,编一验证哥德巴赫猜想。使用该函数,编一验证哥德巴赫猜想。Private Sub Form_Click() Dim n%,n1%,n2% n=Val(InputBox(输入大于输入大于6的正整数的正整数) For n1=3 to n2 step 2 让让n1从从3开始分解开始分解 n2=n-n1 求得求得n2 如果如果n1和和n2都是素数,则打印输出都是素数,则打印输出 If prime(n1) And prime(n2) then Print n & = & n1 & + & n2 Exit For 结束循环结束循环 End if Next n1End SubFor i = 1 T
149、o n - 1For i = 1 To n - 1 p = i p = i For j = i + 1 To n For j = i + 1 To n If a(p) a(j) Then p = j If a(p) a(j) Then p = j Next j Next j temp = a(i) temp = a(i) a(i) = a(p) a(i) = a(p) a(p) = temp a(p) = tempNext iNext i选择法排序(升序)的选择法排序(升序)的VB程序程序:如何写一个排序的如何写一个排序的VB过程?过程?补充例题补充例题2:排序子过程:排序子过程Private
150、 Sub Sort( a( ) As single)Private Sub Sort( a( ) As single) Dim i%,j%,p%,n%,temp! Dim i%,j%,p%,n%,temp! n= n=UboundUbound(a)(a) For i = 1 To n - 1 For i = 1 To n - 1 p = ip = i For j = i + 1 To n For j = i + 1 To n If a(p) a(j) Then p = j If a(p) a(j) Then p = j Next j Next j temp = a(i) temp = a(i)
151、 a(i) = a(p) a(i) = a(p) a(p) = temp a(p) = temp Next I Next IEnd SubEnd Sub6.6过程的嵌套和递归调用过程的嵌套和递归调用6.6.1过程的嵌套过程的嵌套在程序中调用一子过程,而在子过程中又调用另外的子过程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过程如下图:6.6.2过程的递归调用过程的递归调用用自身的结构来描述自身,称递归。例如,对阶乘的定义:VisualBasic允许在一个Sub子过程和Function过程的定义内部调用自己,即递归Sub子过程和递归Function函数。例例6.8编求阶乘fac(n)=n!
152、的递归函数PrivateFunctionfac(nAsInteger)AsIntegerIfn=1Thenfac=1Elsefac=n*fac(n-1)EndIfEndFunctionPrivateSubForm_Click()Print“fac(4)=”;fac(4)EndSub程序的递归过程:说明:说明:递归处理一般用栈来实现,分递推和回归两个过程,如上图所示。递推过程:每调用一次自身,把当前参数(形参、局部变量、返回地址等)压入栈,直到递归结束条件成立。回归过程:然后从栈中弹出当前参数,直到栈空。递归算法设计简单,解决同一问题,使用递归算法消耗的机时和占据的内存空间要比使用非递归算法大。
153、使用递归算法必须要满足以下的递归条件:使用递归算法必须要满足以下的递归条件:(1)存在递归结束条件及结束时的值;(2)能用递归形式表示,且递归向终止条件发展。*6.7过程的可选参数与不定数量参数过程的可选参数与不定数量参数6.7.1可选参数可选参数(Optional)概念:概念:当然用户在自定义子过程或函数时也可以定义可选参数。要指定某个形参为可选参数,这就是在形参变量前加入Optional关键字即可。如果一个过程某个形参为可选参数,则在调用此过程时可以不提供对应于这个形参的实参,若一个过程有多个形参,当它的一个形参被设定为可选参数,则这个参数之后面的其它参数也必是可选的,并且要用Option
154、al关键字来声明。例例6.9可选参数的使用PrivateSubNadres(xAsString,OptionalyAsString)Text1.text=xText2.text=yEndSubPrivateSubCommand1_Click()DimstrNameAsStringDimstrAddressAsStringstrName=张玉strAddress=杭州市学院路85号提供了两个参数。CallNadres(strName,strAddress)EndSub说明:说明:1、检测可选参数是否被省略使用VB的内部函数IsMissing(可选参数名)来测试过程被调用时,某个参数是否被省略。如
155、果可选参数被省略了,则返回True,未省略,返回False。注意:若可选参数是其它类型,则IsMissing()总是返回False,不能起到检测的作用。例:PrivateSubNadres(xAsString,OptionalyAsVariant)Text1.Text=xIfNotIsMissing(y)ThenText2.Text=yEndIfEndSub2指定可选参数的缺省值指定可选参数的缺省值也可以给可选参数指定缺省值。在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值。Sub Nadres(x As String, Optional y AsString=杭州市学院路85号)T
156、ext1.text=xText2.text=yEndSubPrivateSubCommand1_Click()DimstrNameAsStringstrName=张玉未提供第二个参数。CallNadres(strName)EndSub6.7.2使用不定数量的参数使用不定数量的参数一般说来,过程调用中的参数个数应等于过程说明的参数个数。可用ParamArray关键字指明,过程将接受任意个数的参数。其其定义形式如下:定义形式如下:Sub过程名过程名(ParamArray数组名数组名()Function函数名函数名(ParamArray数组名数组名()As数据类型数据类型例例6.106.8应用举例应
157、用举例6.8.1查找问题查找问题例例6.11使用顺序查找法,在一组数中查找某给定的数x算法设计:设一组数据存放在数组a(1)-a(n)中,待查找的数据放在x中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a(p)比较,如果x不等于a(p),则使p=p+1,不断重复这个过程;一旦x等于a(p)则退出循环;另外,如果p大于数组长度,循环也应该停止,则可由以下语句来实现它。ForP=1tonIFa(p)=xthenExitForNextP下下面面编编写写一一查查找找函函数数Find(),若若找找到到x则则返返回回下下标标值值,找找不到返回不到返回0Pr
158、ivateFunctionFind(a()AsSingle,xAsSingle)AsIntegerDimn%,p%,m%m=Lbound(a)n=Ubound(a)ForP=mtonIFa(p)=xthenExitForNextPIfpnthenp=0Find=pEndFunction例例6.12使用折半查找法,在一批有序数列中查找给定的数x。分分析析:设n个有序数(从小到大)存放在数组a(1)-a(n)中,要查找的数为x。用变量bot、top、mid分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下:(1)x=a(mid),则
159、已找到退出循环,否则进行下面的判断;( 2) xa(mid),x必定落在mid+1和top的范围之内,即bot=mid+1;(4)在确定了新的查找范围后,重复进行以上比较,直到找到或者bota(p)andp=np=p+1loopa(p)a(n)元素向后顺移一个位置以空出a(p)元素放入x.。(可由以下语句实现)fori=ntopstep-1a(i+1)=a(i)nextia(p)=x将其写成一插入函数将其写成一插入函数(教材教材Pg.154)在在第二章我们介绍了我们介绍了VBVB应用程序(通常称为应用程序(通常称为工程)的组织结构,它由工程)的组织结构,它由窗体模块、标准模块和类窗体模块、标准
160、模块和类模块模块组成。组成。VBVB程序代码就保存在窗体模块文件(程序代码就保存在窗体模块文件(. .FrmFrm)、)、标准模块文件(标准模块文件(. .BasBas)或类模块文件或类模块文件(. .ClsCls)中。它们形成了工程的一种模块层次结中。它们形成了工程的一种模块层次结构,如下图所示。构,如下图所示。第七章第七章过程和变量的作用域过程和变量的作用域7.1概述一个应用程序的组成结构7.1.1窗体模块窗体模块(文件扩展名为文件扩展名为.FRM)窗窗体体模模块块。窗窗体体模模块块可可以以包包含含处处理理事事件件的的过过程程、通通用用过过程程以以及及变变量量、常常数数、类类型型和和外外部
161、部过过程程的的窗窗体体级级声声明明。如如果果要要在在文文本本编编辑辑器器中中观观察察窗窗体体模模块块,则则还还会会看看到到窗窗体体及及其其控控件件的的描描述述,包包括括它它们们的的属属性性设设置置值值。写写入入窗窗体体模模块块的的代代码码是是该该窗窗体体所所属属的的具具体体应应用用程程序序专专用用的的;它它也也可可以以引引用用该该应应用程序内的其它窗体或对象。用程序内的其它窗体或对象。7.1.2标准模块标准模块(文件扩展名为文件扩展名为BAS)它它们们可可以以包包含含变变量量、常常数数、类类型型、外外部部过过程程和和全全局局过过程程的的全全局局(在在整整个个应应用用程程序序范范围围内内有有效效
162、的的)声声明明或或模模块块级级声声明明。写写入入标标准准模模块块的的代代码码不不必必绑绑在在特特定定的的应应用用程程序序上上,则则在在许许多多不不同同的的应应用用程程序序中可以重用标准模块。中可以重用标准模块。7.1.3类模块类模块(文件扩展名为文件扩展名为.CLS)在在VisualBasic中中类类模模块块是是面面向向对对象象编编程程的的基基础础。可可在在类类模模块块中中编编写写代代码码建建立立新新对对象象。这这些些新新对对象象可可以以包包含含自自定定义义的的属属性性和和方方法法。实实际际上上,窗窗体体正正是是这这样样一一种种类类模模块块,在在其其上上可可安安放放控控件件,可可显示窗体窗口。
163、显示窗体窗口。7.2过程的作用域过程的作用域Public|Private Sub 子过程名子过程名(形式参数列表形式参数列表).EndSub概念概念通通用用子子过过程程和和函函数数过过程程既既可可写写在在窗窗体体模模块块中中也也可可写写在在标标准准模模块块中中,在在定定义义时时可可选选用用关关键键字字PrivatePrivate(局局部部)和和PublicPublic(全局)全局),来决定它们能被调用的范围。,来决定它们能被调用的范围。1、窗体窗体/模块级过程:模块级过程:加加Private关键字的过程,只能被定义的窗体或模关键字的过程,只能被定义的窗体或模块中的块中的过程调用。过程调用。2、
164、全局级过程:全局级过程:加加Public关键字关键字(或缺省)(或缺省)的过程,可供该应用程序的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。的所有窗体和所有标准模块中的过程调用。按过程的作用范围来划分,过程可分为:按过程的作用范围来划分,过程可分为:模块级过程模块级过程全局级过程全局级过程用例7.1来说明过程的作用域总结归纳过程的定义及作用域如下表(教材总结归纳过程的定义及作用域如下表(教材Pg.163)几点说明:(教材Pg.164)7.3变量的作用域概述:概述:在VB中,由于可以在过程中和模块中声明变量,根据定义变量的位置和定义变量的语句不同,变量可以分为:局部变量(过程级变量
165、)窗体/模块级变量(私有的模块级变量,能被本模块的所有过程和函数使用)全局级变量(公有的模块级变量)。7.3.1过程级变量过程级变量局部变量局部变量局部变量:局部变量:在过程内用声明的变量,只能在本过在过程内用声明的变量,只能在本过程中使用。程中使用。在过程内部使用在过程内部使用Dim或者或者Static关键字来关键字来声明的变量,只在声明它们的过程中才能被访问声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互以在不同的过程中声明相同名字的局部变量而互不影响。不影响。例:例:P
166、rivateSubForm_Load()Dimn%n=10EndSubPrivateSubFrom_Click()Dimn%Print“n=“;nEndSub程序运行后单击窗体,其输出结果是什么?程序运行后单击窗体,其输出结果是什么?7.3.2窗体窗体/模块级变量模块级变量窗窗体体/模模块块级级变变量量:在在“通通用用声声明明”段段中中用用Dim语语句句或或用用Private语语句句声声明明的的变变量量,可可被被本本窗窗体体/模模块块的的任任何何过过程程访问。但其他模块却不能访问该变量。访问。但其他模块却不能访问该变量。例如:在例如:在“通用声明通用声明”段声明如下变量段声明如下变量Priva
167、tesAsStringDimaAsInteger,bAsSingle7.3.3全局变量全局变量全局变量也称公有的模块级变量,在窗体模块或标准模块的顶部的“通用”声明段用Public关键字声明,它的作用范围是整个应用程序,即可被本应用程序的任何过程或函数访问。例如:PublicaAsInteger,bAssingle3种种变量声明及使用规则如下表:变量声明及使用规则如下表:一、公用变量与局部变量同名一、公用变量与局部变量同名在不同过程中定义同名变量,它们互不影响,但若在一在不同过程中定义同名变量,它们互不影响,但若在一过程中定义使用了与全局变量同名的变量,则就应注意。过程中定义使用了与全局变量同
168、名的变量,则就应注意。7.3.4关于多个变量同名关于多个变量同名注意:在过程中,如果定义了与模块级变量(在通注意:在过程中,如果定义了与模块级变量(在通用部分使用用部分使用Private或或Dim声明的变量),则在该过程内声明的变量),则在该过程内不能引用同名的模块级变量。例如,上面的例子中,如不能引用同名的模块级变量。例如,上面的例子中,如果将定义全局变量的语句果将定义全局变量的语句PublicTempAsInteger改为改为PrivateTempAsInteger则在则在Command1的单击事件中就的单击事件中就不使用模块级的不使用模块级的Temp变量。变量。 Public Temp
169、As Integer 定义全局变量定义全局变量Private Sub Form_Load()Temp = 1 将全局变量将全局变量Temp 的值设置成的值设置成 1End SubPrivate Sub Command1_Click()Dim Temp As Integer 定义局部变量定义局部变量Temp = 2 将局部变量将局部变量Temp 的值设置成的值设置成 2 Print temp=; Temp Print temp=; Form1.TempEnd SubPrivate Sub Command2_Click() Print temp=; Temp End Sub二、全局变量同名二、全局
170、变量同名 如如果果不不同同模模块块中中的的全全局局变变量量使使用用同同一一名名字字,则则通通过过同同时时引引用用模模块块名名和和变变量量名名就就可可以以在在代代码码中中区区分分它它们们。例例如如,如如果果有有一一个个在在 Form1 和和 Module1 中中都都声声明明了了公公用用的的 Integer 变变量量 intX,则则把把它它们们作作为为 Module1.intX 和和Form1.intX 来来引引用用便便得得到到正正确确值值。也也就就是是说说如如果果不不同同模模块块中中的的全全局局变变量量使使用用同同一一名名字字,引引用用时时就就需需要要使使用用“模模块块名名.变变量量名名”的的形
171、形式式来来区分它们。区分它们。7.3.5静态变量静态变量除作用域之外,变量还有存活期,在这一期间变量能除作用域之外,变量还有存活期,在这一期间变量能够保持它们的值。够保持它们的值。在应用程序的存活期内一直保持在应用程序的存活期内一直保持模块级变量模块级变量和和全局变全局变量量的值。但是,对于的值。但是,对于Dim声明的局部变量声明的局部变量仅当过程执行期仅当过程执行期间存在,当一个过程执行完毕,它的局部变量的值就已经间存在,当一个过程执行完毕,它的局部变量的值就已经不存在,而且不存在,而且变量所占据的内存也被释放变量所占据的内存也被释放。当下一次执行。当下一次执行该过程时,它的所有局部变量将重
172、新初始化。该过程时,它的所有局部变量将重新初始化。概念概念局部变量的存活期由其定义的关键词来决定。局部变量的存活期由其定义的关键词来决定。局部变量声明:局部变量声明:Dim声明:声明:随过程的调用而分配存贮单元,变量的初随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。始化;过程体结束,变量的内容自动消失,存贮单元释放。Static声明声明,每次调用过程,变量保持上次调用结束时,每次调用过程,变量保持上次调用结束时的值。的值。声明形式:声明形式:Static变量名变量名AS类型类型StaticFunction函数过程名函数过程名(参数列表参数列表)As类型
173、类型StaticSub子过程名子过程名(参数列表参数列表)注意:过程名前加注意:过程名前加Static,表示该过程内的表示该过程内的局部变量都是静态变量。局部变量都是静态变量。例例7.2 有一个人编了下面一段程序,想用变量n记录单击窗体的次数。PrivateSubForm_Click()DimnAsIntegern=n+1Print已单击次数:;n&次EndSub分析程序运行后多次单击窗体的输出结果:要记录单击窗体次数,如何实现?并比较使用模块要记录单击窗体次数,如何实现?并比较使用模块变量和静态变量的差别。变量和静态变量的差别。例7.3教材P168PrivateSubForm_Click()
174、Dimi%,isum%Fori=1To5isum=sum(i)Printisum,NextiEndSubPrivateFunctionsum(nAsInteger)DimjAsIntegerj=j+nsum=jEndFunction12345StaticjAsInteger结果如何结果如何?补充例题:补充例题:7.4多重窗体与多模块程序设计一一个个稍稍微微复复杂杂的的应应用用程程序序,不不仅仅有有多多个个窗窗体体,还还可可能能有标准模块和类模块,如下图所示。有标准模块和类模块,如下图所示。本节介绍在多模块程序本节介绍在多模块程序中,关于启动对象的设置、中,关于启动对象的设置、窗体的加载与卸载、
175、窗体窗体的加载与卸载、窗体的加载与卸载时的事件、的加载与卸载时的事件、多模块间数据的传递等。多模块间数据的传递等。7.4.1设置启动对象设置启动对象在在程程序序运运行行时时,首首先先被被加加载载并并执执行行的的对对象象,称称为为程程序序的的启启动动对对象象。一一个个程程序序的的启启动动对对象象可可以以是是一一个个窗窗体体,也也可可以以是是标标准准模模块块中中名名为为Main的的自自定定义义Sub过过程程。缺缺省省情情况况下下,第一个创建的窗体被指定为启动对象。第一个创建的窗体被指定为启动对象。1、设置方法:从“工程”菜单中的最后一项“*属性”,在“*工程属性”对话框中进行设置。2、如果设置从主
176、过程Main()启动,则必须在标准模块中编写Main()过程代码。例:Pg170.7.4.2窗体的加载与卸载过程窗体的加载与卸载过程当一个窗体要显示在屏幕之前,必须先建立,当一个窗体要显示在屏幕之前,必须先建立,接着被装入内存(接着被装入内存(Load语句语句),最后显示(),最后显示(Show方法方法)在屏幕上。同样,当窗体要结束之前,会)在屏幕上。同样,当窗体要结束之前,会先从屏幕上隐藏(先从屏幕上隐藏(Hide方法方法),接着从内存中删),接着从内存中删除(除(Unload方法方法)在窗体的加载过程的各阶段所用一的语句或方法以在窗体的加载过程的各阶段所用一的语句或方法以及所触发的事件可用
177、下面的图来说明:及所触发的事件可用下面的图来说明:在窗体的卸载过程的各阶段所用一的语句或方法以及在窗体的卸载过程的各阶段所用一的语句或方法以及所触发的事件如下图:所触发的事件如下图:Unload语句QueryUnloadUnload1、窗体的加载与显示、窗体的加载与显示(1)Load语句:装入窗体到内存语句:装入窗体到内存Load窗体名称窗体名称说明:执行Load语句后,窗体并不显示出来,但可引用该窗体中的控件及各种属性。注意:这里的窗体名称是窗体的Name属性,而不是窗体的文件名,以下相同。(3)Show方法:显示一个窗体方法:显示一个窗体窗体名称窗体名称.Show模式模式0Modeless
178、(非模式):可以对其它窗体进行操作1Model,关闭才能对其它窗体进行操作。2、窗体的隐藏与卸载窗体的隐藏与卸载(1)Unload语句:从内存删除窗体语句:从内存删除窗体Unload说明:当窗体卸载之后,所有在运行时放到该窗体上的控件都不再是可访问的。在设计时放到该窗体上的控件将保持不变在卸载窗体时,只有显示的部件被卸载。与该窗体模块相关联的代码还保持在内存中。(2)Hide方法:隐藏,没有删除方法:隐藏,没有删除窗体名称窗体名称.Hide7.4.3与窗体加载与卸载过程的关的事件与窗体加载与卸载过程的关的事件1Initialize事件事件2Load事件事件3Paint事件事件4QueryUnL
179、oad事件事件5UnLoad事件事件6Activate事件与事件与Deactivate事件事件7Terminate事件事件例例7.4验证与窗体加载与卸载过程相关的事件被触发的先后顺序。第八章 常用控件与系统对象本章内容及要求:1.掌握常用控件单选钮(OptionButton)、检查框(CheckBox)、框架(Frame)、滚动条(ScrollBar)、列表框(ListBox)、组合框(ComboBox)、时钟(Timer)等的常用、属性、重要事件和方法的使用;2.了解一些常用的ActiveX控件(高级控件)的使用。3.了解一些常用系统对象的使用。本章重点:常用控件单选钮、检查框、框架、滚动条
180、、列表框(ListBox)、组合框(ComboBox)、时钟(Timer)等的常用属性、重要事件和方法的使用;本章难点:本章难点:ActiveX控件(高级控件)的使用。控件(高级控件)的使用。一些常用系统对象的使用。一些常用系统对象的使用。8.1单选钮、检查框及框架单选钮、检查框及框架8.1.1单选钮1用途单选钮(OptionButton)也称作选择按钮。一组单选钮控件可以提供一组彼此相互排斥的选项,任何时刻用户只能从中选择一个选项,实现一种“单项选择”的功能,被选中项目左侧圆圈中会出现一黑点。单选按钮2.重要属性(1)Caption:文本标题。设置单选钮的文本注释内容。(2)Alignmen
181、t属性:0:LeftJustify(缺省设置)控件钮在左边,标题显示在右边。1:RightJustify控件钮在右边,标题显示在左边。(3)Value属性True: True: 单选钮被单选钮被选定选定False: False: 单选钮未被单选钮未被选定(选定(缺省设置)缺省设置)(4)Style属性属性0-Standard:标准方式标准方式 1-Graphical:图形方式图形方式说说明:明:在Style属性设置为1时,可使用Picture属性(未选定时的图标或位图)、DoWnPicture属性(选定时的图标或位图)、DisabledPicture属性(禁止选择时的图标或位图)3方法方法Se
182、tFocus方方法法是是单单选选钮钮控控件件最最常常用用的的方方法法,可可以以在在代代码码中中通过该方法将通过该方法将Value属性设置为属性设置为True。与与命命令令按按钮钮相相同同,使使用用该该方方法法之之前前,必必须须要要保保证证单单选选钮钮处处于于可可见见和和可可用用状状态态(即即Visible与与Enabled属属性性值值均均为为True)。)。4事件事件Click事事件件是是单单选选钮钮控控件件最最基基本本的的事事件件,一一般般情情况况用用户户无无需需为为单单选选钮钮编编写写Click事事件件过过程程,因因为为当当用用户户单单击击单单选选钮钮时,它会自动改变状态。时,它会自动改变
183、状态。例例8.1单选钮示例(单选钮示例(Pg.185)。)。8.1.2检查框检查框1用途用途检检查查框框(CheckBox)也也称称作作复复选选框框、选选择择框框。一一组组检检查查框框控控件件可可以以提提供供多多个个选选项项,它它们们彼彼此此独独立立工工作作,所所以以用用户户可可以以同同时时选选择择任任意意多多个个选选项项,实实现现一一种种“不不定定项项选选择择”的的功功能能。选选择择某某一一选选项项后后,该该控控件件将将显显示示,而而清清除除此此选选项后,项后,消失。消失。2.重要属性Caption、Alignment、Style与单选钮相同检查框的检查框的Value属性与单选按钮不同,其值
184、为数值型数属性与单选按钮不同,其值为数值型数据,可取据,可取0,1,2 检查框检查框0-Unchecked:未被未被选定选定1-Checked:选定选定2-Grayed:灰色,禁止选择灰色,禁止选择 单选钮单选钮True: True: 单选钮被单选钮被选定选定False: False: 单选钮未被单选钮未被选定,选定,缺省设置缺省设置检查框检查框与与单选按钮单选按钮Value属性的比较属性的比较3方法方法检查框也可使用SetFocus方法来改变其Value属性值,其用法与要求同单选钮。每调用一次SetFocus方法就会触发一次Click事件。4事件事件Click事件是检查框控件最基本的事件。用
185、户一般无需为检查框编写Click事件过程,但其对Value属性值的改变遵循以下规则:单击未选中的检查框时,Value属性值变为0;单击已选中的检查框时,Value属性值变为1;单击变灰的检查框时,Value属性值变为0。8.1.3框架框架(Frame)Frame控件为控件提供可标识的分组。当需要在同一窗体控件为控件提供可标识的分组。当需要在同一窗体内建立几组互独立的单选钮时,就需要用框架将每一组单选钮内建立几组互独立的单选钮时,就需要用框架将每一组单选钮框框起来,把框框起来,把OptionButton控件分成几组,如下形式。控件分成几组,如下形式。框架设Caption为字体框架内控件的创建方法
186、:为了将控件分组,首先需要绘制为了将控件分组,首先需要绘制Frame控件,然后绘控件,然后绘制制Frame里面的控件。这样就可以把框架和里面的控件同里面的控件。这样就可以把框架和里面的控件同时移动。如果在时移动。如果在Frame外部绘制了一个控件并试图把它移外部绘制了一个控件并试图把它移到框架内部,那么控件将在到框架内部,那么控件将在Frame的上部,这时需分别移的上部,这时需分别移动动Frame和控件和控件方法1:单击工具箱上的工具,然后用出现的单击工具箱上的工具,然后用出现的“+”指针,指针,在框架中适当位置拖拉出适当大小的控件。在框架中适当位置拖拉出适当大小的控件。不能使用双击工具箱上工
187、具的自动方式。不能使用双击工具箱上工具的自动方式。方法2:将控件将控件“剪切剪切”(Ctrl+X)到剪贴板,然后选中到剪贴板,然后选中框架,使用框架,使用(Ctrl+V)命令粘贴到框架内。命令粘贴到框架内。重要属性1. Caption属性:框架标题:框架标题2 Enabled属性:缺省为缺省为TrueFalse:标题呈灰色,标题呈灰色,不允许对框架内的所有对象进行操作。3. Visible属性:True:框架及其控件可见。框架及其控件可见。False:框架及其控件被隐含起来。框架及其控件被隐含起来。事件:框架可以响应的事件框架可以响应的事件ClickClick、DblClickDblClick
188、一般不需要有关框架的事件过程。一般不需要有关框架的事件过程。例8.2单选钮、检查框及框架用法示例。Pg.1878.2滚动条(ScrollBar)1用用途途滚动条控件(ScrollBar)分为水平滚动条(HScrollbar)和垂直滚动条(VscrollBar)二种,通常附在窗体上协助观察数据或确定位置,也可用作数据输入工具,用来提供某一范围内的数值供用户选择。2. 属性(1)Value滑块所处位置所代表的值。(2)Max:最大值-32,76832,767(3)Min:最小值-32,76832,767(4)SmallChange最小变动值,单击箭头时移动的增量值。(5)LargeChange最大
189、变动值,单击空白处时移动的增量值。4事件事件(1)Change事件事件滚动条的Change事件在移动滚动框或通过代码改变其Value属性值时发生。单单击击滚滚动动条条两两端端的的箭箭头头或或空空白白处处将将引引发发Change事件。事件。(2)Scroll事件事件当滚动框被重新定位,或按水平方向或垂直方向滚动时,Scroll事件发生。拖动滑块时会触发拖动滑块时会触发Scroll事件事件Scroll事件与Change事件的区别在于:当滚动条控件滚动时Scroll事件一直发生,而Change事件只是在滚动结束之后才发生一次。例例8.3滚动条示例。设计滚动条示例。设计一个程序进行坐标设置一个程序进行
190、坐标设置教材教材Pg.190例例8.4滚动条示例。滚动条示例。设计一个用于设置字设计一个用于设置字体颜色的程序体颜色的程序.8.3列表框与组合框列表框与组合框一、用途一、用途列表框控件(列表框控件(ListBox)用于显示项目列表,用户可从中选择一个或多个项目。如果项目总数超过了可显示的项目数,VB会自动加上滚动条。列表框有两种风格:标准和复选列表框。通过它的Style属性来设置。如下图:组组合合框框控控件件(ComboBox)将文本框和列表框的功能结合在一起,用户可以在列表中选择某项(只只能能选选取取一一项项)。或在编辑区域中直接输入文本内容来选定项目。组合框共三三种种风风格格:下拉式组合框
191、、简单组合框和下拉式列表框(见下图)。二、主要属性1List、ListCount和ListIndex属性这这3个属性只能在程序代码中设置:个属性只能在程序代码中设置:List:字符型数组,存放列表框的项目数据,下标是从字符型数组,存放列表框的项目数据,下标是从0开始的。开始的。例如:例如:List(0)表示第一项(表示第一项(Listindex=0)的内容的内容ListIndex:为整型值,选中的项目的序号,为整型值,选中的项目的序号,没有项目选中没有项目选中时为时为-1。ListCount:为整型值,表示项目的数量,为整型值,表示项目的数量,ListCount-1是最是最后一项的下标。后一项
192、的下标。2Style属性属性该值用来指示控件的显示类型和行为。在运行时是只读的。对于列表框控件或组合框控件都有Style属性,但它们的含义是不同的,见表8.5和表8.6。例如:例如:在窗体上放置2个列表框,将其Style属性分别设置为0和1;放置3个组合框,将它们Style属性分别设置为0、1和2。3MultiSelect属性属性用用于于指指示示是是否否能能够够在在列列表表框框控控件件中中进进行行复复选选以以及及如如何何进进行行复选,复选,在运行时是只读的。在运行时是只读的。注意,组合框控件无此属性注意,组合框控件无此属性。设置值含义0(缺省值)不允许复选1简单复选。鼠标单击或按下空格键在列表
193、中选中或取消选中项。箭头键移动焦点2扩展复选。按下 SHIFT 并单击鼠标将在以前选中项的基础上扩展选择到当前选中项。按下 CTRL 并单击鼠标来在列表中选中或取消选中项表8.7MultiSelect属性设置值及含义4Selected属性属性该属性返回或设置列表框控件中的一个项目的选择状态。该属性是一个逻辑类型的数组,数组元素个数与列表框中的项目数相同,其下标的变化范围与List属性相同。例如:List1.Selected(0)=True表示列表框List1的第一个项目被选中,此时ListIndex的值设置为0。Selected属性在设计时是不可用的,即无法在属性窗口中设置属性值。5NewIn
194、dex属性属性返回最近加入列表框控件或组合框控件的项目的索引。如果在列表中已没有项目或删除了一个项目,该属性将返回-1。6TopIndex属性属性返回或设置一个值,该值指定哪个项被显示在列表框控件或组合框控件顶部的位置。该属性取值范围从0到ListCount-1,在设计时不可用。7Sorted属性属性返回一个逻辑值,当Sorted属性为True时列表框控件或组合框控件的项目自动按字母表顺序(升序)排序,为False时项目按加入的先后顺序排列显示。该属性只能在设计时设置,不能在程序代码中设置。8Text属性属性对于下拉式组合框与简单组合框,Text属性返回编辑区域中的文本。对于列表框控件或下拉列
195、表框,Text属性的返回值总与List(ListIndex)的值相同。3方法方法41AddItem方法方法用于将项目添加到列表框控件或组合框控件。语法格式:对象名对象名.AddItemitem,index其中:item:为字符串表达式,表示要加入的项目。Index:决定新增项目的位置,缺省,则添加在最后。2RemoveItem方法方法用于从列表框控件或组合框控件中删除一项。语法格式:对象名对象名.RemoveItemindex对index参数的规定同AddItem方法。3Clear方法用于清除列表框控件或组合框控件中的所有项目。用于清除列表框控件或组合框控件中的所有项目。语法格式:语法格式:对
196、象名.Clear例如,要删除列表框(例如,要删除列表框(List1)中所有项目,可使用:中所有项目,可使用:List1.Clear例如,要删除列表框(例如,要删除列表框(List1)中所有选中的项目,可中所有选中的项目,可使用下面的程序段:使用下面的程序段:i=0DoWhilei=List1.ListCount-1IfList1.Selected(i)=TrueThenList1.RemoveItemiEndIfi=i+14、事件、事件(1)Click事件当单击某一列表项目时,将触发列表框与组合框控件的Click事件。该事件发生时系统会自动改变列表框与组合框控件的ListIndex、Selec
197、ted、Text等属性,无需另行编写代码。(2)DblClick事件当双击某一列表项目时,将触发列表框与简单组合框控件的DblClick事件。(3)Change事件事件当用户通过键盘输入改变下拉式组合框或简单组合框控件的文本框部分的正文,或者通过代码改变了Text属性的设置时,将触发其Change事件。例例8.5列表框示例。列表框示例。设计一个畅销书设计一个畅销书排行榜程序。排行榜程序。用户界用户界面如右图。面如右图。例例8.6组合框示例。组合框示例。设计一个用于设设计一个用于设置字体属性的程序,置字体属性的程序,界面如右图所示。界面如右图所示。1用途时钟控件(时钟控件(Timer)又称计时器
198、、定时器控件,又称计时器、定时器控件,用于有规律地定时执行指定的工作,适合编写不用于有规律地定时执行指定的工作,适合编写不需要与用户进行交互就可直接执行的代码,如计需要与用户进行交互就可直接执行的代码,如计时、倒计时、动画等。在程序运行阶段,时钟控时、倒计时、动画等。在程序运行阶段,时钟控件不可见。件不可见。8.4时钟2属性(1)Interval属性取取值值范范围围在在0到到64767之之间间(包包括括这这两两个个数数值值),单单位位为为毫毫秒秒(0.001秒秒),表表示示计计时时间间隔隔。若若将将Interval属属性性设设置为置为0或负数,则计时器停止工作。或负数,则计时器停止工作。(2)
199、Enabled属性无无论论何何时时,只只要要时时钟钟控控件件的的Enabled属属性性被被设设置置为为True而而且且Interval属属性性值值大大于于0,则则计计时时器器开开始始工工作作(以以Interval属属性值为间隔,触发性值为间隔,触发Timer事件)。事件)。通通过过把把Enabled属属性性设设置置为为False可可使使时时钟钟控控件件无无效效,即即计时器停止工作。计时器停止工作。3方法方法VB没有为时钟控件提供有关的方法。4事件事件时钟控件只能响应时钟控件只能响应Timer事件事件,当Enabled属性值为True且Interval属性值大于0时,该事件以Interval属性
200、指定的时间间隔发生,需要定时执行的操作即放在该事件过程中完成。例例8.7时钟示例。时钟示例。设计一个计时报警程序,开始时窗体上显示当前时间,单击“开始”按钮10秒钟后程序结束。例例8.8设计一个霓虹灯程序设计一个霓虹灯程序,利用时钟控件模拟霓虹灯的效果。*8.5ActiveX控件概念:概念:在VB中除了使用工具箱上的标准控件外,还可以使用微软以及一些第三方厂商开发了许多扩展的高级控件,这些控件被称为ActiveX控件。使用ActiveX控件,首先应把需要使用的ActiveX控件添加到工具箱中。ActiveX控件文件的类型名为.ocx,一般情况下ActiveX 控件被安装和注册在 Windows
201、System 或System32目录下。执行“工程”菜单中的“部件”命令,打开“部件”对话框,该对话框中列出当前系统中所有注册过的ActiveX控件、可插入对象和ActiveX设计器。8.5.1UpDown控件控件UpDown控件位于MicrosoftWindowsCommonControls-26.0部件中,其添加到工具箱后的图标为。UpDown控件一般与其它控件配套使用,与之配套的控件称为伙伴控件。属性:1BuddyControl属性2BuddyProperty属性3Value属性4Increment属性5Min和Max属性6Wrap属性例8.9UpDown控件示例。8.5.2Slider
202、控件控件Slider控件位于MicrosoftWindowsCommonControls6.0部件中,其添加到工具箱后的图标为。Slider控件包含滑块和可选择性刻度标记,与滚动条控件类似,Slider控件具有与滚动条控件相类似的基本属性:如Min、Max、SmallChange、LargeChange和Value属性Slider控件的其它属性:(1)TextPosition属性:(2)TickFrequency属性:(3)TickStyle属性:Slider控件的常用事件为Scroll和Change,其触发条件与滚动条控件相同。例8.10Slider控件示例。8.5.3ProcessBar控
203、件控件ProcessBar控件位于MicrosoftWindowsCommonControls6.0部件中,其添加到工具箱后的图标为。ProcessBar控件常用于监视一个较长操作完成的进度,它通过从左到右用一些方块填充矩形的形式来表示操作处理的进程。ProcessBar控件的属性设置:例8.11ProgressBar控件示例8.5.4ImageList控件与控件与ImageCombo控件控件ImageList控件与控件与ImageCombo控件均位于控件均位于MicrosoftWindowsCommonControls6.0部件中,其添加到工具箱后部件中,其添加到工具箱后的图标分别为的图标分
204、别为和和。ImageList控件控件不能独立使用,它只是一个向其它控件提供不能独立使用,它只是一个向其它控件提供图象的资料中心,运行时不可见。图象的资料中心,运行时不可见。ImageCombo控件控件是支持图片的组合框,控件列表中的每是支持图片的组合框,控件列表中的每一项都可以有一幅图片指定给它。一项都可以有一幅图片指定给它。例8.12ImageList控件与ImageCombo控件示例。8.5.5SSTab控件控件Style:选项卡样式Tabs:选项卡总数TabsPerRow:每一行选项卡的数目Rows:选项卡总行数TabOrientation:选项卡的位置。ShowFocusRect:决定
205、选项卡上的焦点矩形是否可视。Tab:当前选项卡的序号。序号从0开始,如果Tab为1,则第二个选项卡为当前活动的选项卡。SSTab控件位于MicrosoftWindowsTabbedDialogControl6.0部件中,其添加到工具箱后的图标为属性:*8.6常用系统对象常用系统对象在VisualBasic系统中,提供许多的系统内部对象,用户在应用程序中,直接可以调用这些对象。系统对象没有用户界面。8.6.1App对象对象用途:用途:在应用程序中使用App对象可获得:应用程序的标题、版本信息、可执行文件和帮助文件的路径及名称等信息,以及检查应用程序是否已经运行等。最常用的属性最常用的属性属性类型
206、作用ExeNameString返回当前正运行的可执行文件的根名(不带扩展名)。如果是在开发环境下运行,则返回该工程名。PathString当从开发环境运行该应用程序时Path指定.VBP工程文件的路径,或应用程序的可执行文件运行时Path 指定.exe 文件的路径。PreInstanceBoolean检查系统是否已有一个实例,可用于限制应用程序只能执行一次。TitleString返回或设置应用程序的标题,TaskVisibleBoolean当前的运行程序是否显示在Windows系统的任务栏中例例8.13要限定某用应用程序(*.EXE)必须放在D盘根目录与应用程序同名的文件夹中才能运行。可在窗体
207、的Load事件中写入如下代码PrivateSubForm_Load()IfApp.EXEName=Mid(App.Path,4)And_Ucase(Mid(App.Path,1,2)=D:ThenExitsubElseEndEndIfEndSub8.6.2Clipboard对象对象Clipboard对对象象用用于于操操作作剪剪贴贴板板上上的的文文本本和和图图形形。它它使使用户能够复制、剪切和粘贴应用程序中的文本和图形。用户能够复制、剪切和粘贴应用程序中的文本和图形。所所有有Windows应应用用程程序序共共享享Clipboard对对象象,当当切切换换到到其其它它应应用用程程序序时时,剪剪贴贴板
208、板内内容容会会改改变变。因因此此Clipboard(剪贴板)对象提供了应用程序之间信息的传递。剪贴板)对象提供了应用程序之间信息的传递。Clipboard对对象象它它没没有有属属性性和和事事件件,仅仅提提供供6个个常常用用的的方方法。法。Clipboard对象的常用方法对象的常用方法:1Clear方法方法在复制信息到剪贴板之前,应使用Clear方法清除Clipboard对象中的内容,使用格式如下:Clipboard.Clear2SetText方法方法使用SetText方法将字符串数据按指定格式存入剪贴板中,使用格式如下:Clipboard.SetText ,其参含义见教材Pg.2113GetT
209、ext方法方法使用此方法从剪贴板中获得一字符串。其语法格式为:Clipboard.GetText()例如,要将剪贴板上的文字粘贴到文本框插入点所在处或替换选中的内容,则可使用如下语句:Text1.SelText=Clipboard.GetText()4SetData方法方法将图形数据保存到剪贴板上,要使用SetData方法,其使用语法格式为:Clipboard.SetData data,format其中,data参数是必需的。为要放到Clipboard对象中的图形数据。format参数是可选的。一个常数或数值,用来指定图片的格式,其取值见表8.15,如果省略format,则由系统自动决定图形格
210、式。5GetData方法方法用此方法从剪贴板中得到图形,其使用语法格式是:Clipboard.GetData(format)例例8.146GetFormat方法方法使用GetFormat方法,检查剪贴板中指定格式的数据存在否,它返回一个逻辑值。其语法格式:Clipboard.GetFormat ()例例8.15使用GetFormat方法确定剪贴板中是否有Bmp格式数据,如果有将其粘贴到图片框picture1中。PrivateSubForm_Click()IfClipboard.GetFormat(vbCFBitmap)ThenPicture1.picture=Clipboard.GetData
211、()EndifEndSub8.6.3Screen对象对象Screen对象对象代表了整个Windows桌面。通过Screen对象,还可以在程序运行期间修改屏幕的鼠标指针。属性作用ActiveControl返回拥有焦点的控件ActiveForm返回拥有焦点的窗体FontCount返回屏幕可用的字体数Fonts返回当前显示器或活动打印机可用的所有字体名。Fonts是字符串数组Height、WidthMouseIcon返回屏幕的高和宽(Twip为单位)返回或设置自定义的鼠标图标MousePointer设置或获取鼠标的形状Screen对象的常用属性对象的常用属性例例8.16打印输出计算机系统中显示器或活
212、动打印机可用的所有字体名,其程序如下:PrivateSubCommand1_Click()DimIAsIntegerForI=0ToScreen.FontCount-1PrintScreen.Fonts(I)NextIEndSub8.6.4Printer对象和对象和Printers集合对象集合对象在在VB中中,要要将将处处理理结结果果的的数数据据或或图图形形通通过过打打印印机机输输出出,就必须使用系统提供的就必须使用系统提供的Printer对象和对象和Printers集合对象集合对象1Printer对象对象2Printers集合对象集合对象8.6.5立即窗口立即窗口立即窗口是立即窗口是Visu
213、alBasic所提供的全域性所提供的全域性(G1obal)系系统对象之统对象之、称为、称为Debug对象,作为调试之用。此对象除对象,作为调试之用。此对象除了了Print方法外,不具备任何事件和属性。方法外,不具备任何事件和属性。在设计状态可以在立即窗口中进行一些简单的命令操作,例如可用“?”或Print(两者等价)输出一些表达式的值。在程序中,可以使用Debug.Print方法将要输出的信息输出到立即窗口中;而若要作为立即之用、只要进入“中断”模式便会出现此窗口。8.6.6其他系统对象其他系统对象除了上述对象外,系统还提供了Control对象、Controls集合对象、Form对象、Form
214、s集合对象。关于这些对象的使用,限于篇幅不再展开,读者可以通过系统MSDN帮助获得详细的帮助。先举例说明Control对象、Controls集合对象的使用,Controls集合对象包含窗体上的所有控件,如下程序段是在立即窗口中显示窗体上的所有控件名称:Dim x As ControlFor Each x In Form1.ControlsDebug.Print x.NameNext x第五章 文件本章内容及要求:本章内容及要求:1掌握文件系统控件(驱动器列表框掌握文件系统控件(驱动器列表框drvDrive、目目录列表框录列表框dirDirectory、文件列表框文件列表框filFile。2掌握
215、掌握VB中文件的概念、种类及其结构;中文件的概念、种类及其结构;3掌握顺序文件的操作:打开、读掌握顺序文件的操作:打开、读/写、关闭;写、关闭;4了解随机文件的操作:打开、读了解随机文件的操作:打开、读/写、关闭;写、关闭;5了解二进制文件的操作。了解二进制文件的操作。6了解使用了解使用FileSystemObject(FSO)对象模型对文对象模型对文件进行操作的一些基础知识件进行操作的一些基础知识本章重点:本章重点:1文件系统控件驱动器列表框文件系统控件驱动器列表框、目录列表框目录列表框、文件文件列表框的使用列表框的使用。2顺序文件的操作:打开、读顺序文件的操作:打开、读/写、关闭;写、关闭
216、;本章难点:本章难点:随机文件、二进制文件的操作,随机文件、二进制文件的操作,FileSystemObject(FSO)对象模型。对象模型。教学方法:教学方法:9.1文件的概念一、文件及其结构 文件:存储在外部介质上数据的集合。按名存取存储在外部介质上数据的集合。按名存取磁盘文件是由数据记录组成。记录是计算机处理数。记录是计算机处理数据的基本单位,它由一组具有共同属性相互关联的数据据的基本单位,它由一组具有共同属性相互关联的数据项组成。项组成。数据项二、文件分类二、文件分类根据访问文件的方式将文件分成根据访问文件的方式将文件分成3类:类:顺序文件顺序文件随机文件随机文件二进制文件。二进制文件。
217、1顺序文件顺序文件顺序文件(SequentialFile)是普通的文本文件。顺序文件中的记录按顺序一个接一个地排列。读写文件存取记录时,都必须按记录顺序逐个进行。一行一条记录(一项一行一条记录(一项数据),记录可长可短,以数据),记录可长可短,以“换行换行”字符为分隔符号。字符为分隔符号。2随机文件随机文件随机文件(RandomAccessFile)是可以按任意次序读写的文件,其中每个记录的长度必须相同。在这种文件结构中,每个记录都有其唯一的一个记录号,所以在读取数据时,只要知道记录号,便可以直接读取记录。随机文件的文件结构3二进制文件二进制文件二进制文件(Binaryfile)是字节的集合、
218、它直接把二进制码存放在文件中。除了没有数据类型或者记录长度的含义以外,它与随机访问很相似。二进制访问模式是以字节数来定位数据,在程序中可以按任何方式组织和访问数据,对文件中各字节数据直接进行存取。9.2文件系统控件VB提供了3种可直接浏览系统目录结构和文件的控件:驱动器列表框、目录列表框、文件列表框。驱动器列表框、目录列表框、文件列表框。驱动器列表框文件列表框目录列表框9.2.1驱动器列表框(驱动器列表框(DriveListBox)驱动器列表框(驱动器列表框(DriveListBox)控件,通常只显示控件,通常只显示当前驱动器名称,单击向下箭头,就会下拉出计算机拥当前驱动器名称,单击向下箭头,
219、就会下拉出计算机拥有的所有磁盘驱动器,供用户选择。有的所有磁盘驱动器,供用户选择。1重要属性重要属性Drive属属性性是驱动器列表框控件最重要和常用的属性,该该属属性性在在设计时不可用。设计时不可用。使用格式:使用格式:object.Drive=例如:例如:Drive1.drive=“D:”2重要事件重要事件Change事件事件在在程程序序运运行行时时,当当选选择择一一个个新新的的驱驱动动器器或或通通过过代代码码改改变变Drive属属性性的的设设置置时时都都会会触触发发驱驱动动器器列列表表框框的的change事事件件发发生。生。9.2.2目录列表框(目录列表框(DirListBox)目录列表框
220、(目录列表框(DirListBox)控件用来当前驱动器目录结构及控件用来当前驱动器目录结构及当前目录下的所有子文件夹(子当前目录下的所有子文件夹(子目录)。供用户选择其中一个目目录)。供用户选择其中一个目录为当前目录。录为当前目录。1常用属性常用属性Path属属性性是目录列表框控件的最常用的属性,用于返回或设置当前路径。该属性在设计时是不可用的。使用格式:Object.Path=其中:Object:对象表达式,其值是目录列表框的对象名。:用来表示路径名的字符串表达式。例如,Dir1.Path=C:Mydir。缺省值是当前路径。说明:说明:Path属性也可以直接设置限定的网络路径如,网络计算机名
221、网络计算机名共享目录名共享目录名pathList、ListCount和和 ListIndex等等属属性性,这这些些属属性性与与列列表表框(框(ListBox)控件基本相同。控件基本相同。目录列表框中的当前目录的目录列表框中的当前目录的ListIndex值为值为-1。紧邻其上的。紧邻其上的目录具有目录具有ListIndex值为值为-2,再,再上一个的上一个的ListIndex值为值为-3,如右,如右图所示。图所示。2重要事件重要事件Change事件事件与驱动器列表框一样,在程序运行时,每当改变当前目录,即目录列表框的Path属性发生变化时,都要触发其Change事件发生。文件列表框(文件列表框(
222、FileListBox)控件用来显示控件用来显示Path属性属性指定的目录中的文件定位并列举出来。该控件用来显示所指定的目录中的文件定位并列举出来。该控件用来显示所选择文件类型的文件列表。选择文件类型的文件列表。9.2.3文件列表框(文件列表框(FilelistBox)1常用属性常用属性(1)Path属性用于返回和设置文件列表框当前目录用于返回和设置文件列表框当前目录,设计时不可用。说明:当Path值的改变时,会引发一个PathChange事件。此条件也可改为:Len(file1.path)3(2)Filename属性属性用于返回或设置被选定文件的文件名,设计时不可用。说明:Filename属
223、性不包括路径名。例例如如:要从文件列表框(File1)中获得全路径的文件名Fname$,用下面的程序代码:If Right(file1.path,1) = Then Fname$=file1.path & file1.filenameElse Fname$=file1.path & & file1.filenameEnd If(3)Pattern属性属性用于返回或设置文件列表框所显示的文件类型。可在设计状态设置或在程序运行时设置。缺省时表示所有文件。设置形式为:Object.Pattern=value其中value是一个用来指定文件类型的字符串表达式,并可使用包含通配符(“*”和“?”)例如:
224、File1.Pattern=*.txtFile1.Pattern=*.txt;*.Doc“File1.Pattern=?.txt“注意:要指定显示多个文件类型,使用“;”为分隔符重新设置Pattern属性引发“PatternChange”事件。(4)文件属性:Archive:True,只显示文档文件;只显示文档文件;Normal:True,只显示正常标准文件;只显示正常标准文件;Hidden:True,只显示隐含文件;只显示隐含文件;System:True,只显示系统文件。只显示系统文件。ReadOnly:True,只显示只读文件。只显示只读文件。(5)MultiSelect属性属性文件列表框
225、MultiSelect属性与ListBox控件中MultiSelect属性使用完全相同。默认情况是0,即不允许选取多项。(6)List、ListCount和ListIndex属性文文件件列列表表框框中中的的List、ListCount和和ListIndex属属性性与与列列表表框框(ListBox)控控件件的的List、ListCount和和ListIndex属属性性的的含含义义和和使使用用方方法法相相同同,在在程程序序中中对对文文件件列列表表框框中中的的所所有有文件进行操作,就有用到这些属性。文件进行操作,就有用到这些属性。例如,下下段段程程序序是是将将文文件件列列表表框框(File1)中中的
226、的所所有有文文件件名显示在窗体上。名显示在窗体上。Fori=0ToFile1.ListCount-1PrintFile1.List(i)Nexti2.主要事件(1)PathChange事件当当路路径径被被代代码码中中FileName或或Path属属性性的的设设置置所所改改变变时时,此事件发生。此事件发生。说说明明:可可使使用用PathChange事事件件过过程程来来响响应应FileListBox控控件件中中路路径径的的改改变变。当当将将包包含含新新路路径径的的字字符符串串给给FileName属属性赋值时,性赋值时,FileListBox控件就调用控件就调用PathChange事件过程。事件过程
227、。(2)PatternChange事件当当文文件件的的列列表表样样式式,如如:*.*,被被代代码码中中对对FileName或或Path属性的设置所改变时,此事件发生。属性的设置所改变时,此事件发生。说明:说明:可使用可使用PatternChange事件过程来响应在事件过程来响应在FileListBox控件中样式的改变。控件中样式的改变。(3)Click、DblClick事件:例如:单击输出文件名。SubfilFile_Click()MsgBoxfilFile.FileNameEndSub例如:双击执行可执行程序Sub File1_DblClick( ) Dim Fname As StringI
228、f Right(file1.path,1) = Then Fname=file1.path & file1.filenameElse Fname=file1.path & & file1.filenameEnd If RetVal = Shell(Fname, 1) 执行程序执行程序End SubSubDrive1_Change()Dir1.Path=Drive1.DriveEndSubSubDir1_Change()filFile.Path=Dir1.PathEndSub说明:说明:要使驱动器、目录和文件列表框同步显示,那要使驱动器、目录和文件列表框同步显示,那么就需要编写代码才能使它们之间
229、彼此同步。么就需要编写代码才能使它们之间彼此同步。9.2.4文件系统控件的联动。文件系统控件的联动。打开文件打开文件读出或写入读出或写入关闭文件关闭文件9.3顺序文件顺序文件在程序中对文件的操作,通常按3个步骤进行:9.3.1顺序文件的打开与关闭顺序文件的打开与关闭1。打开顺序文件。打开顺序文件其使用格式如下:其使用格式如下:Open FileName For Input | Output | Append LockAsfilenumberLen=Buffersize各参数的意义各参数的意义(见教材Pg.230)例如:例如:OPEN“C:TEMPA.TXT”FORInputAS#1OPEN“C
230、:TEMPB.TXT”FOROutputAS#2OPEN“C:TEMPC.TXT”FORAppendAS#12、关闭文件、关闭文件Close语句使用格式如下: Close filenumberlist其中:filenumberlist:可选项,为文件号列表,如:#1,#2,#3,如果省略,则将关闭Open语句打开的所有活动文件。例如:Close#1,#2,#3Close9.3.2顺序文件的读写操作向向文文件件写写入入内内容容使使用用Print#语语句句或或Write#语语句句,在在程程序是数据输出。序是数据输出。1Print语句语句使用格式:PRINT#,说明:说明:文件号为以写方式打开文件的
231、文件号;输出列表为用分号或逗号分隔的变量、常量、空格和定位函数序列。2Write命令命令使用格式:Write#,Write语句采用紧凑格式。数据项之间插入“,”,并给字符数据加上双引号。例9.1Print与Write语句输出数据结果比较。PrivateSubForm_Click()DimStrAsString,AnumAsIntegerOpenD:Myfile.datForOutputAs1Str=ABCDEFGAnum=12345Print#1,Str,AnumWrite#1,Str,AnumClose#1EndSub例9.2编程把一个文本框中的内容,以文件形式存入磁盘。假定文本框的名称为M
232、ytxt,文件名为Myfile.dat。方法1:把整个文本框的内容一次性地写入文件。OpenMyfile.datForOutputAs#1Print#1,Mytxt.TextClose#1方法2:把整个文本框的内容一个字符一个字符地写入文件。OpenMyfile.datForOutputAs#1Fori=1Tolen(Mytxt.Text)Print#1,Mid(Mytxt.Text,i,1);NextiClose#12.顺序文件读操作从现存文件中读入数据,应以顺序Input方式打开该文件。然后使用Input#语句、LineInput#语句和Input()函数读入到程序变量中。使用格式如下:使
233、用格式如下:INPUT#文件号,变量列表把读出的每个数据项分别存放到所对应的变量。把读出的每个数据项分别存放到所对应的变量。LINEINPUT#文件号,字符串变量读一行到变量中,主要用来读取文本文件。读一行到变量中,主要用来读取文本文件。INPUT$(读取字符数,#文件号)读取指定的数量的字符,作为函数的返回值。读取指定的数量的字符,作为函数的返回值。3与读文件操作有关的几个函数(1)Lof函数LOF函数将返回某文件的字节数。例如,LOF(1)返回#1文件的长度,如果返回0值,则表示该文件是一个空文件。(2)Loc函数Loc函数将返回在一个打开文件中读写的记录号;对于二进制文件,它将返回最近读
234、写的一个字节的位置。(3)Eof函数Eof函数将返回一个表示文件指针是否到达文件末尾的标志。如果到了文件末尾,Eof函数返回TRUE(-1),否则返回FALSE(0)。例9.3编程将一文本文件的内容读到文本框假定文本框名称为假定文本框名称为txtTest,文件名为文件名为MYFILE.TXT。可可以通过下面三种方法来实现。以通过下面三种方法来实现。方法1:一行一行读一行一行读txtTest.TextOpenMYFILE.TXTForInputAs#1DoWhileNotEOF(1)LineInput#1,InputDatatxtTest.TexttxtTest.Text+InputData+v
235、bCrLfLoopClose#1回车换行方法2:一次性读一次性读txtTest.TextOpenMYFILE.TXTForInputAs#1txtTest.Text=Input(LOF(1),1)Close#1方法3:一个个字符读一个个字符读DimInputDataasString*1txtTest.TextOpenMYFILE.TXTForInputAs#1DoWhileNotEOF(1)Input#1,InputDatatxtTest.TexttxtTest.Text+InputDataLoopClose#1例例9.4利用文件系统控件、组合框、文本框,制作一个文件浏览器。要求:要求:组合框
236、限定文件列表框中显示文件的类型,如选定“*.Txt”文件。当在文件列表框选定欲显示的文件时,在文本框显示出该文件的内容。程序运行效果如图9.4随机文件9.4.1随机文件的打开与关闭1打开随机文件打开随机文件格式为:OPEN FileName FOR Random Access Lock AsfilenumberLen=reclength用OPEN命令以Random模式打开随机文件,同时指出记录的长度。文件打开后,可同时进行读写操作。例如:Open d:abc.dat For Random Access Read As #1 Len = 202关闭随机文件随机文件的关闭与关闭顺序文件相同。随机文
237、件的关闭与关闭顺序文件相同。9.4.2写随机文件Put#文件号,记录号,变量名将一个记录变量的内容写到指定的记录位置处。将一个记录变量的内容写到指定的记录位置处。忽略记录号,则表示在当前记录后的位置插入一忽略记录号,则表示在当前记录后的位置插入一条记录。条记录。9.4.3读随机文件Get#文件号,记录号,变量名忽略记录号,则读出当前记录后的那一条记录。忽略记录号,则读出当前记录后的那一条记录。例例9.5设计一个简单的学生成绩管理程序,使用随机文件存储学生信息。程序的运行界面下图所示,该程序的具有数据添加、修改、删除及学生信息顺序查询等功能。在标准模块在标准模块Module1中定义学生信息数据类
238、型及全局变量:中定义学生信息数据类型及全局变量:Type Student 定义学生信息记录类型定义学生信息记录类型 Id As String * 8 Name As String * 10 Class As String * 10 Subject As String * 20 Mark(1 To 3) As IntegerEnd Type 定义定义Student类型的变量存放当前记录内容类型的变量存放当前记录内容Public Stu As Student Public Filename As String 定义变量存放学生信息文件名定义变量存放学生信息文件名Public Rec_no As I
239、nteger 定义变量存放当前记录号定义变量存放当前记录号Public Rec_total As Integer 定义变量存放总记录数定义变量存放总记录数PublicRec_longAsInteger定义变量存放记录长度定义变量存放记录长度1打开文件Open文件名ForBinaryAs#文件号2.写操作Put#文件号,位置,变量名写入长度等于变量长度的数据。写入长度等于变量长度的数据。3.读操作GET#文件号,位置,变量名从指定位置开始读出长度等于变量长度的数据存入变从指定位置开始读出长度等于变量长度的数据存入变量中,数据读出后移动变量长度位置,如果忽略位置,则量中,数据读出后移动变量长度位置
240、,如果忽略位置,则表示从文件指针所指的位置开始读出数据,数据读出后移表示从文件指针所指的位置开始读出数据,数据读出后移动变量长度位置。动变量长度位置。9.5二进制文件例9.6编程序实现将编程序实现将D盘根目录中的文件盘根目录中的文件Abc.dat复制到复制到A盘,且文件名改为盘,且文件名改为Myfile.dat。Dim char As Byte 打开源文件打开源文件Open D:Abc.dat For Binary As # 1 打开目标文件打开目标文件Open A:Myfile.dat For Binary As # 2 Do While Not EOF(1) Get #1, , char
241、从源文件读出一个字节从源文件读出一个字节Put #2, , char 将一个字节写入目标文件将一个字节写入目标文件LoopClose#1, #29.6常用的文件操作语句和函数1.改变当前驱动器(ChDrive语句)格式:格式:ChDrivedrive功能:改变当前驱动器。功能:改变当前驱动器。说明:说明:如果如果drive为为“”,则当前驱动器将不会改变;如果,则当前驱动器将不会改变;如果drive中有多个字中有多个字符,则符,则ChDrive只会使用首字母。只会使用首字母。例如:例如:ChDriveD及及ChDriveD:和和ChDriveDasd都都是将当前驱动器设为是将当前驱动器设为D盘
242、。盘。9.6.1文件操作语句文件操作语句2.改变当前目录(ChDir语句)格式:格式:ChDirpath功能:改变当前目录。功能:改变当前目录。例如:例如:ChDirD:TMP说明:ChDir语句改变缺省目录位置,但不会改变缺省驱语句改变缺省目录位置,但不会改变缺省驱动器位置。例如,如果缺省的驱动器是动器位置。例如,如果缺省的驱动器是C,则上面的语则上面的语句将会改变驱动器句将会改变驱动器D上的缺省目录,但是上的缺省目录,但是C仍然是缺省仍然是缺省的驱动器:的驱动器:2.删除文件(Kill语句)格式:格式:Killpathname功能:删除文件。功能:删除文件。说明:说明:pathname中可
243、以使用统配符中可以使用统配符“*”和和“?”。例如:例如:Kill*.TXT Kill C:MydirAbc.dat4.建立(MkDir语句)和删除(RmDir语句)目录建立目录格式:格式:MkDirpath功能:创建一个新的目录。功能:创建一个新的目录。 例如:例如: MkDir D:MydirABC 删除目录格式:格式:RmDirpath功能:删除一个存在的目录。功能:删除一个存在的目录。说明:只能删除空目录。说明:只能删除空目录。例如:例如:RmDir D:MydirABC“说明:说明:RmDir只能删除空子目录,如果想要使用只能删除空子目录,如果想要使用RmDir来删来删除一个含有文件
244、的目录或文件夹,则会发生错误。除一个含有文件的目录或文件夹,则会发生错误。 5拷贝文件FileCopy语句格式:FileCopysource,destination功能:复制一个文件。功能:复制一个文件。例如:例如:FileCopy D:MydirTest.doc A:MyTest.doc说明:FileCopy语句不能复制一个已打开的文件。语句不能复制一个已打开的文件。6文件的更名Name语句格式:格式:NameoldpathnameAsnewpathname功能:重新命名一个文件或目录。功能:重新命名一个文件或目录。例:例: Name D:MydirTest.doc As A:MyTest.
245、doc说明:说明:(1)Name具有移动文件的功能。具有移动文件的功能。(2)不能使用统配符不能使用统配符“*”和和“?”,不能对一个已打开,不能对一个已打开的文件上使用的文件上使用Name语句。语句。7设置文件属性SetAttr语句。格式:SetAttrFileName,attributes其参数含义:FileName:必要参数。一个文件名的字符串表达式。必要参数。一个文件名的字符串表达式。Attributes:必必要要参参数数。常常数数或或数数值值表表达达式式,其其总总和和用用来来表表示文件的属性。示文件的属性。Attributes参数设置下表:参数设置下表:内部常数数值描述VbNorma
246、l0常规(缺省值)VbReadOnly1只读。VbHidden2隐藏。VbSystem4系统文件VbArchive32上次备份以后,文件已经改变1获得当前目录获得当前目录CurDir函数格式:格式:CurDir(drive)功能:功能:利用CurDir函数可以确定指定驱动器的当前目录。说明:说明:可选的Drive参数是一个字符串表达式,它指定一个存在的驱动器。如果没有指定驱动器,或Drive是零长度字符串(“”),则CurDir会返回当前驱动器的路径。例如:str=CurDir(“C:”)获得C盘当前目录路径,并赋值给变量Str9.6.2文件操作函数文件操作函数2获得文件属性获得文件属性Get
247、Attr函数。函数。3格式:格式:GetAttr(FileName)功功能能:返回代表一个文件、目录、或文件夹的属性的Integer数据。GetAttr返回的值及代表的含义下表内部常数数值描述VbNormal0常规vbReadOnly1只读VbHidden2隐藏VbSystem4系统文件VbDirectory16目录或文件夹VbArchive32上次备份以后,文件已经改变Vbalias64指定的文件名是别名3.FileDateTime函数函数格式:格式:FileDateTime(FileName)功功能能:返回一个Variant(Date),此值为一个文件被创建或最后修改后的日期和时间。4Fi
248、leLen函数函数格式:格式:FileLen(FileName)功能:功能:返回一个Long,代表一个文件的长度,单位是字节。5Shell函数和函数和Shell过程过程在VB中,可以调用在DOS下或Windows下运行的应用程序:函数调用形式:ID=Shell(FileName,WindowType)说说明明:执行一个可执行文件,返回一个Variant(Double),如果成功的话,代表这个程序的任务ID,它是一个唯一的数值,用来指明正在运行的程序。若不成功,则会返回0过程调用形式:ShellFileName,WindowType)FileName:是要执行的应用程序名字符串,包括盘符、路径,
249、它必须是可执行的文件。WindowType:为整型值,表示执行应用程序打开的窗口类型,其取值下表。内部常量值描述VbHide0窗口被隐藏,且焦点会移到隐式窗口VbNormalFocus1窗口具有焦点,且会还原到它原来的大小和位置VbMinimizedFocus2(缺省)窗口会以一个具有焦点的图标来显示(最小化)VbMaximizedFocus3窗口是一个具有焦点的最大化窗口VbNormalNoFocus4窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动VbMinimizedNoFocus6窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动例如:例如:调用执行Windows系
250、统中的记事本i=Shell(C:WINDOWSNOTEPAD.EXE)进入MS_DOS状态j=Shell(c:,1)也可按过程形式调用:也可按过程形式调用:ShellC:WINDOWSNOTEPAD.EXEShellc:,1注意,上面指定的执行文件,可能因不同计算机系统,文件的路径有所不同。*9.7文件系统对象文件系统对象说明:本节为选学内容,教师可根据学生及课时情况,进行选择讲解可让学习较好的学生自学。在VB6.0中新增了文件系统对象(FileSystemObject缩写为FSO)模型,它提供了一整套对文件系统进行管理和操作的方法和属性,包括:获得驱动器的信息,如驱动器列表、盘符、磁盘空间等
251、。获得驱动器的信息,如驱动器列表、盘符、磁盘空间等。获得文件夹的或文件的信息,如名称、创建、修改日期等。获得文件夹的或文件的信息,如名称、创建、修改日期等。检查指定的文件夹或文件是否存在及在什么位置。检查指定的文件夹或文件是否存在及在什么位置。文件夹或文件的删除、移动、复制等通常操作。文件夹或文件的删除、移动、复制等通常操作。对文本文件的读写操作。对文本文件的读写操作。9.7.1FileSystemObject对象对象FileSystemObject对象是FSO模型中的核心对象,在应用程序中使用FSO的编程主要步骤是:创建一个FileSystemObject对象。根据应用程序的需要,通过调用F
252、ileSystemObject对象中的方法来创建一个新的对象,如Drive对象、Folder对象等。通过读取新对象的属性值获得用户所需的信息或利用对象的方法进行所需的操作。1创建创建FileSystemObject对象对象有两种方法创建FileSystemObject对象:方法一、方法一、使用New关键字声明一个变量为FileSystemObject对象类型。其语法格式:DimAsNewFileSystemObject例如:DimfsoxAsNewFileSystemObject方法二、方法二、使用CreateObject方法创建一个FileSystemObject对象,其语法格式:Set=C
253、reateObject(Scripting.FileSystenObject)例如:DimfsoxAsObjectSetfsox=CreateObject(Scripting.FileSystenObject)2FileSystemObject对象的属性对象的属性FileSystemObject的属性只有一个的属性只有一个Drives,它是系统中所有Drive对象的对象集合,用户可以获取当前计算机系统中所有驱动器的信息。例如下面的代码可显示系统能够使用的驱动器名称:DimfsoxAsNewFileSystemObjectForEachIInfsox.DrivesPrinti.DriveLett
254、erNextI2FileSystemObject对象的方法对象的方法FileSystemObject对象有许多方法,在FSO模型中对文件的管理就是通过这些方法来完成的。FileSystemObject对象的方法见教材对象的方法见教材Pg.249表表9.79.7.2Drive对象对象通过Drive对象可以获得计算机上关于驱动器的信息。诸如驱动器有多少可用空间,其共享名称是什么,等等。要使用Drive对象,首先要声明一个驱动器类型的变量,接着使用FileSystemObject对象的GetDrive方法返回一个Drive对象,例如:DimdrvAsDriveSetdrv=fsox.GetDrive
255、(“C:”)Drive对象常用的属性见表9.7例9.7使用FileSystemObject对象,编写一个来显示当前计算机系统中一指定驱动器的信息的函数ShowdriveSize。9.7.3Folder对象对象要使用Folder对象,首先要声明一个文件夹类型的变量,接着使用FileSystemObject对象的GetFolder方法返回一个Folder对象,例如:DimfldasFolderSetfld=fsox.GetFolder(“C:Mydir”)Folder对象常用的属性见教材P251表9.8例9.8使用Folder对象和FileSystemObject对象来操作文件夹,并显示相关信息。
256、程序运行在立即窗口的输出结果下图9.7.4File对象对象要要使使用用File对对象象,首首先先要要声声明明一一个个文文件件类类型型的的变变量量,接接着着使使用用FileSystemObject对对象象的的GetFile方方法法来来返返回回一一个个File对对象,例如:象,例如:Dim fil As FileSet fil=fsox.GetFile(C:Lcstxtt1.txt)File对象常用的属性见表9.9例9.9要把“C:Mydirt1.txt”文件以同名复制到A盘新建的“A:temp”文件夹下,要考虑到软盘插入否和软盘容量够否。9.7.5TestStream对象对象FileSystem
257、Object对象模型还提供了TextStrema对象,用来读写顺序文件。1.声明和创建声明和创建TextStream对象对象声明TextStrem对象例子如下:DimtsAsTextStream可分别通过FileSystemObject对象、File对象来创建、打开TextStream对象。(1)通过FileSystemObject对象打开”C:Mydirt1.txt”:Setts=fsox.OpenTextFile(“C:t2.txt”,_ForReading,True)第3个参数表示当要打开的文件不存在,是否要创建一个新文件。2通过File对象打开”C:Mydirt1.txt”:Setfil=fsox.GetFile(“C:Mydirt1.txt”)Setts=fil.OpenAsTextStream(ForReading)上述两种方法均以读的方式打开文本文件。其中:ForReading表示从文件中读出信息。此外,还有ForWriting表示向文件写信息;ForAppending向文件添加信息。2常用属性常用属性3常用方法常用方法例9.10