首页 VB入门教程

VB入门教程

举报
开通vip

VB入门教程VB入门教程 计算机等级考试二级VB基础教程 1.1 Visual Basic 概述 1.Visual Basic是什么 Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言。 “Visual” 指的是开发图形用户界面 (GUI) 的方法——不需编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象add到屏幕上的一点即可。 “Basic”指的是 BASIC (Beginners All-Purpose Symbolic Instruction Co...

VB入门教程
VB入门教程 计算机等级考试二级VB基础教程 1.1 Visual Basic 概述 1.Visual Basic是什么 Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言。 “Visual” 指的是开发图形用户界面 (GUI) 的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ——不需编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象add到屏幕上的一点即可。 “Basic”指的是 BASIC (Beginners All-Purpose Symbolic Instruction Code) 语言,一种在计算技术发展历史上应用得最为广泛的语言。Visual Basic 在原有 BASIC 语言的基础上进一步发展,至今包含了数百条语句、函数及关键词,其中很多和 Windows GUI 有直接关系。专业人员可以用 Visual Basic 实现其它任何 Windows 编程语言的功能,而初学者只要掌握几个关键词就可以建立实用的应用程序。Visual Basic Scripting Edition (VBScript) 是广泛使用的脚本语言,它是 Visual Basic 语言的子集,可嵌入HTML语言中,用于网页设计,如ASP(Active Server Page)文件。 VB简单易学,通用性强,用途广泛。 2.VB的功能 VB可以用于可以开发多媒体、数据库、网络、图形等方面的应用程序。 数据访问特性允许对包括 Microsoft SQL Server 和其它企业数据库在内的大部分数据库格式建立数据库和前端应用程序,以及可调整的服务器端部件。 ActiveX(TM) 技术就可使用其它应用程序提供的功能,例如 Microsoft Word 字处 有了 理器,Microsoft Excel 电子数据 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 及其它 Windows 应用程序。 Internet 能力强大,很容易在应用程序内通过 Internet 或 intranet访问文档和应用程序,或者创建 Internet 服务器应用程序。 已完成的应用程序是使用Visual Basic 虚拟机真正 .exe 文件,可以自由发布。 3.VB的发展 VB是伴随Windows操作系统而发展的,在中国使用较广的版本有VB4.0、VB5.0、VB6.0。 VB4.0是为配合WIN95的问世于1995年推出的,既可用于编写WIN3.X平台的16位应用程序也可编写WIN95平台的32位应用程序;VB5.0主要用于编写WIN95平台的32位应用程序,较之VB4.0主要扩展了数据库、ActiveX和Internet方面的功能;VB6.0是与WIN98 配合于1998年推出的,进一步加强了数据库、Internet和创建控件方面的功能。 4.VB中的几个常用术语 工程(Project):是指用于创建一个应用程序的文件的集合。 对象(object):可控制的某个东西,VB中主要有两类对象:窗体和控件。 窗体(form):应用程序的用户界面,即windows。 控件(control):指的是各种按扭、标签、文本框等。 属性(property):是指对象的特性,如大小、标题或颜色。 ActiveX:ActiveX是基于component object model(com)的可视化控件结构的商标 名称.它是一种封装技术,提供封装COM组件并将其置入应用程序(如WEB浏览器)的一种方法. Components Object Model (COM): 是软件组件互相通讯的一种方式。它是一种二进制和网络标准,允许任意两个组件互相通讯,而不管它们是在什么计算机上运行(只要计算机是相连的),不管各计算机运行的是什么操作系统(只要该操作系统支持 COM),也不管该组件是用什么语言编写的。 5. VB的系统特性 (1)工程限制 1)代码限制: 可被加载到窗体、类或标准模块的代码总数限于 65,534 行。一行代码限于 1023 个字节。在一行中的实际文本之前最多只能有 256 个空格的前导,在一个逻辑行中最多只能有 25 个续行符 ( _)。 2)过程、类型和变量 对每个模块的过程数没有限制。每个过程可包含至多 64K 的代码。如果过程或模块超过这一限制,Visual Basic 便产生编译时间错误。如果遇到这种错误,可将特别大的过程分割成若干个较小的过程,或将模块级声明移到另一模块,来避免此类错误发生。 Visual Basic 用表来保存代码中的标识符名(变量、过程、常量等)。每个表限于 64K。 3)动态链接库声明表 每个窗体和代码模块使用一个描述动态链接库入口点的结构的表。每个结构约 40 个字节,表的大小限于 64K,形成每个模块大约有 1500 个声明。 4)工程名表 整个应用程序用一张包含所有名称的表。这些名称包括: 常量名 、 变量名 、 自定义 的类型定义名、 模块名、 DLL 过程声明名。对工程名表总大小没有限制,但是区分大小写的条目不得超过 32K。如果超过了 32K 的限制,可以在不同的模块中重新使用 private 标识符以限制区分大小写的条目数到达 32K。 5)输入表 在不同的模块中每引用一个标识符,便在输入表中创建一个条目。每一个这样的入口最小是 24 字节,但限于 64K,这样每个模块大约可以有 2000 个引用。 6)模块条目表 该表中每个模块最多达 125 个字节,但有 64K 的总限制,这样每个工程大约可以产生 400 个模块。VB 中的变量名不多于 255 个字符,而窗体、控件、模块和类名不多于 40 个字符。 (2)工程文件格式 VB 在创建和编译工程时要产生许多文件,分为:设计时文件、杂项开发文件和运行时文件。 设计时文件是工程的建造块,例如基本模块 (.bas) 和窗体模块 (.frm)。 杂项文件是由 Visual Basic 开发环境中的各种不同的进程和函数产生的,例如打包和展开向导从属文件 (.dep)。 1.2 VB 6.0 的集成开发环境简介 VB 集成开发环境 (IDE——Integrated Developing Environment ) 由以下元素组成: 1. 标题栏 用于显示正在开发或调试的工程名和系统的工作状态(设计态、运行态、中止态)。 2. 菜单栏 用于显示所使用的 Visual Basic 命令。VB6.0标准菜单包括: 3. 工具栏 在编程环境下用于快速访问常用命令。缺省情况下,启动 VB后显示“标准”工具栏,附加的编辑、窗体设计和调试的工具 栏可以从“视图”菜单上的“工具栏”命令中移进或移出。 4. 窗体设计器 用来设计应用程序的界面。启动VB后,窗体设计器中自动出现一个名为Form1的空白窗体,可以在该窗体中添加控件、图形和图片等来创建所希望的外观,窗体的外观设计好后,从菜单中选择“文件”?“保存窗体”?在保存对话框中给出合适的文件名(注意扩展名),并选择所需的保存位置?确定。需要再设计另一个窗体时,单击工具栏上的“添加窗体”按钮即可。 5. 控件(工具)箱 由一组控件按钮组成,用于设计时在窗体中放置控件。除了缺省的工具箱布局之外,还可以通过从上下文菜单中选定“添加选项卡”并在结果选项卡中添加控件来创建自定义布局。 6. 弹出式(上下文)菜单 在要使用的对象上单击鼠标右键即可打开快捷菜单,其上会出现与当前对象相关的经常执行的操作,以加快操作速度。 7. 工程管理器窗口 用于浏览工程中所包含的窗体和模块,还可以从中查看代码、查看对象。 8. 属性窗口 是VB中一个比较复杂的窗口,其中列出了对选定窗体和控件的属性设置值。VB中正是通过改变属性来改变对象的特征,如大小、标题或颜色。 9. 对象浏览器 列出工程中有效的对象,并提供在编码中漫游的快速方法。可以使用“对象浏览器”浏览在 VB中的对象和其它应用程序,查看对那些对象有效的方法和属性,并将代码过程粘贴进自己的应用程序。 10. 对象浏览器 右击窗体中的对象、从工程管理器中点“查看代码”按钮。 11. 窗体布局窗口 Form Layout window允许使用表示屏幕的小图象来布置应用程序中各窗体的位置。 12. 立即、本地和监视窗口这些附加窗口是为调试应用程序提供的,它们只在 IDE 之中运行应用程序时才有效。 1.3 面向对象程序设计的基本概念 1.基本术语 (1) 对象和对象类 对象是代码和数据的组合,可以作为一个单位来处理。对象可以是应用程序的一部分,比如可以是控件或窗体。整个应用程序也是一个对象。 VB中的每个对象都是用类定义的。用饼干模子和饼干之间的关系作比,就会明白对象和它的类之间的关系。饼干模子是类。它确定了每块饼干的特征,比如大小和形状。用类创建对象,对象就是饼干。类是面向对象程序设计的核心技术,可以理解成一种定义了对象行为和外观的模板;把对象看作是类的原原本本的复制品, 类具有继承性、封装性、多态性、抽象性。 (2) 属性 属性是对对象特性的描述,VB为每一类对象都规定了若干属性,设计中可以改变具体对象的属性值。比如窗体的背景颜色、高度与宽度。 (3) 事件(Event) 事件是发生在对象上的动作。事件的发生不是随意的,某些事件仅发生在某些对象上。 在VB中事件的调用形式是: Private Sub对象名_事件名 (事件内容) End Sub (4) 方法(Method) 方法指的是控制对象动作行为的方式。它是对象本身内含的函数或过程,它也是一个动作,是一个简单的不必知道细节的无法改变的事件,但不称作事件;同样,方法也不是随意的,一些对象有一些特定的方法。在VB里方法的调用形式是: 对象名.方法名 2. 属性、方法和事件之间的关系 VB 对象具有属性、方法和事件。属性是描述对象的数据;方法告诉对象应做的事情;事件是对象所产生的事情,事件发生时可以编写代码进行处理。 VB 的窗体和控件是具有自己的属性、方法和事件的对象。可以把属性看作一个对象的性质,把方法看作对象的动作,把事件看作对象的响应。 日常生活中的对象,如小孩玩的气球同样具有属性、方法和事件。气球的属性包括可以看到的一些性质,如它的直径和颜色。其它一些属性描述气球的状态(充气的或未充气的)或不可见的性质,如它的寿命。通过定义,所有气球都具有这些属性;这些属性也会因气球的不同而不同。 气球还具有本身所固有的方法和动作。如:充气方法(用氦气充满气球的动作),放气方法(排出气球中的气体)和上升方法(放手让气球飞走)。所有的气球都具备这些能力。 气球还有预定义的对某些外部事件的响应。例如,气球对刺破它的事件响应是放气,对放手事件的响应是升空。 在VB程序设计中,基本的设计机制就是:改变对象的属性、使用对象的方法、为对象事件编写事件过程。程序设计时要做的工作就是决定应更改哪些属性、调用哪些方法、对哪些事件作出响应,从而得到希望的外观和行为。 3.事件驱动模型 在传统的或“过程化”的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。 在事件驱动的应用程序中,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片段。事件可以由用户操作触发、也可以由来自操作系统或其它应用程序的消息触发、甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的代码的路径都是不同的。 因为事件的顺序是无法预测的,所以在代码中必须对执行时的“各种状态”作一定的假设。当作出某些假设时(例如,假设在运行来处理某一输入字段的过程之前,该输入字段必须包含确定的值),应该组织好应用程序的结构,以确保该假设始终有效(例如,在输入字段中有值之前禁止使用启动该处理过程的命令按钮)。 在执行中代码也可以触发事件。例如,在程序中改变文本框中的文本将引发文本框的 Change 事件。如果 Change 事件中包含有代码,则将导致该代码的执行。如果原来假设该事件仅能由用户的交互操作所触发,则可能会产生意料之外的结果。正因为这一原因,所以在设计应用程序时理解事件驱动模型并牢记在心是非常重要的。 4.交互式开发 传统的应用程序开发过程可以分为三个明显的步骤:编码、编译和测试代码。但是 Visual Basic 与传统的语言不同,它使用交互式方法开发应用程序,使三个步骤之间不再有明显的界限。 VB在编程者输入代码时便进行解释,即时捕获并突出显示大多数语法或拼写错误。看起 来就象一位专家在监视代码的输入。 除即时捕获错误以外,VB 也在输入代码时部分地编译该代码。当准备运行和测试应用程序时,只需极短时间即可完成编译。如果编译器发现了错误,则将错误突出显示于代码中。这时可以更正错误并继续编译,而不需从头开始。 由于 VB的交互特性,代码运行的效果可以在开发时进行测试,而不必等到编译完成以后。 1(4 利用VB开发应用程序的一般步骤 一个VB程序也称为一个工程,由窗体、标准模块、自定义控件及应用所需的环境设置组成。开发步骤一般如下: 1( 创建程序的用户界面 2( 设置界面上各个对象的属性 3( 编写对象响应事件的程序代码 4( 保存工程 5( 测试应用程序,排除错误 6( 创建可执行程序 2.1 VB用户界面设计基础 1. 概述 界面的设计有两步:先绘制控件,然后确定控件属性。 绘制控件:在工具箱里单击想画的控件,在窗体里按下鼠标并拖曳,然后松开鼠标即可。确定属性:先选中控件,然后按F4键或单击工具栏上的属性窗口进入属性(Properties)窗口,再在属性窗口中找到要设置的属性并进行设置。 2. 常用属性的设置 (1)Name属性 对象都有名字,计算机把名字看成对象于对象之间的根本差异,因此在同一窗体里不许出现重名的情况(除非这是一个控件数组),且名字不得超过40个字。 在简单的程序里,给控件命名不是很必要,完全可以使用控件Name属性的缺省值。例如Text1。但在有几十个控件的复杂窗体里,就很难区分它们。所以,VB推荐由三个小写字母的前缀和一个第一个字母为大写的描述性单词组成的名字。例如cmdMyButton是一个命令按钮(前缀是cmd) (2)Caption属性 Caption即标题,是可以在对象外观上直接看见的文本,可以长达255字符,包括空格和标点符号,比如一个叫cmdOk的命令钮,它的Caption属性就可以是“Ok”。 注意:并不是所有的对象都有此属性,比如文本框、图片框、线条等就没有。 为按钮设置热键:在设置Caption属性时,在需要加下划线的字母前加上 “&” 符号,例如 “&File”,输出的就是“File”,这样就可以通过按ALT键和标题上那个带下划线的字母来选取它了, 不必为此编任何代码。 Name和 caption的比较: 1) Name是系统用来识别对象的,编程时需要用它来指代各对象;Caption是给用户看的,提示用户该对象的作用; 2) Name可以采用系统默认的名称,但Caption应该根据实际情况改成意义明了的名词; 3)所有对象都有Name,但不一定都有Caption; (3)Top,Left属性 这两个属性决定对象的位置。只有两种情况需要在属性窗口里设置这两个属性:第一种是用户没有鼠标,第二种是程序员需要十分精确地设定这两个值。当选中对象,单击并拖曳它的时候,便在修改这两个值了。 (4)Height,Width属性 这两个属性决定了对象的大小,当选中控件时,它周围出现八个小黑方块,把鼠标指向这些方块,鼠标指针将变成一个双向的箭头,这时按下鼠标并拖曳它,即可改变控件的大小,也就改变了Height,Width属性。 1. 窗体的属性 (1)设置属性的方法 1)在设计态通过属性窗口设置 直接在属性窗口中选择或输入既可。 2)在程序代码中改变属性值 代码中的格式为: 对象名 . 属性 = 属性值 例:Form1.BackColor=RGB(255,0,0) 2. 窗体的常用方法 (1)Hide方法 用以隐藏 MDIForm 或 Form 对象,但不能使其卸载。 语法:object.Hide object 所在处代表一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则带有焦点的窗体就认为是该 object。 说明: 隐藏窗体时,它就从屏幕上被删除,并将其 Visible 属性设置为 False。 用户将无法访问隐藏窗体上的控件,但是对于运行中的 Visual Basic 应用程序,或对于通过 DDE 与该应用程序通讯的进程及对于 Timer 控件的事件,隐藏窗体的控件仍然是可用的。 窗体被隐藏时,用户只有等到被隐藏窗体的事件过程的全部代码执行完后才能够与该应用程序交互。 如果调用 Hide 方法时窗体还没有加载,那么 Hide 方法将加载该窗体但不显示它。 (2)Move方法 用以移动 MDIForm、Form 或控件。 语法:object . Move left, top, width, height 说明:只有 left 参数是必须的。但是,要指定任何其它的参数,必须先指定出现在语法中该参数前面的全部参数。例如,如果不先指定 left 和 top 参数,则无法指定 width 参数。任何没有指定的尾部的参数则保持不变。 (3)Print 方法 在 Immediate 窗口中显示文本。 语法:object . Print [outputlist] Print 方法的语法具有下列对象限定符和部分: 部分 描述 必需的。对象表达式,其值为“应用于”列表中的对象。 Object 可选的。要打印的表达式或表达式的列表。如果省略,则打印一空outputlist 白行。 outputlist 参数具有以下语法和部分: {Spc(n) | Tab(n)} expression charpos 说明: 可以用空白或分号来分隔多个表达式。 对系统指定的国别设置,用小数点分隔符将所有打印到 Immediate 视窗的数据正确格式化。关键字要用适用于主应用程序的语言输出。 对于 Boolean 数据,或者打印 True 或者打印 False。根据主机应用程序的地区设置来翻译 True 和 False 关键字。 使用系统能识别的标准短日期格式 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 写 Date 数据。当日期或时间部件丢失或为零时,只书写已提供的部件。 如果 outputlist 数据是 Empty,则无内容可写。但是,如果 outputlist 数据是 Null,则输出 Null。在输出 Null 关键字时,要把关键字正确翻译出来。 要把错误数据作为 Error errorcode 输出。在输出 Error 关键字时,要把关键字正确翻译出来。 如果在具有缺省显示空间的模块外使用此方法,则需要 object。例如,如果没有指定对象就在标准模块上调用此方法,则将导致错误发生,但是,如果在窗体模块上进行调用,则会在窗体上显示“outputlist”。 注意: 因为 Print 方法是按照字符比例进行打印,所以字符数与字符所占据的宽度固定的列的数目无关。例如,像 “W” 这样的宽字母占据的宽度超过一固定列宽,而像 "i" 这样的窄字母占据的宽度则较小。考虑到要使用比平均字符更宽的空间,表列一定要留有足够余地。另外,也可以使用固定间距的字体(像 Courier 字体)来确保每一字符均只占一列。 (4)PrintFrom方法 用以将 Form 对象的图象逐位发送给打印机。 语法:object.PrintForm 说明:PrintForm 将打印 Form 对象的全部可见对象和位图。在绘制图形时,如果 AutoRedraw 属性为 True,则在运行时PrintForm 将打印 Form 对象或 PictureBox 控件上的图形。 PrintForm 所使用的打印机是由操作系统的控制面板中的设置来决定。 (5) Refresh方法 强制全部重绘一个窗体或控件。 语法:object.Refresh 说明:在下列情况下使用 Refresh 方法: 在另一个窗体被加载时显示一个窗体的全部。 更新诸如 FileListBox 控件之类的文件系统列表框的内容。 更新 Data 控件的数据结构。 Refresh 方法不能用于 MDI 窗体,但能用于 MDI 子窗体。不能在 Menu 或 Timer 控件上使用 Refresh 方法。 通常,如果没有事件发生,窗体或控件的绘制是自动处理的。但是,有些情况下希望窗体或控件立即更新。例如,如果使用文件列表框、目录列表框或者驱动器列表框显示当前的目录结构状态,当目录结构发生变化时可以使用 Refresh 更新列表。 可以在 Data 控件上使用 Refresh 方法来打开或重新打开数据库(如果 DatabaseName, ReadOnly, Exclusive 或 Connect 属性的设置值发生改变),并能重建控件的 Recordset 属性内的 dynaset。 (6)Show方法 用以显示 MDIForm 或 Form 对象。 语法:object.Show style, ownerform 说明: 如果调用 Show 方法时指定的窗体没有装载,Visual Basic 将自动装载该窗体。 当 Show 在显示无模式窗体时,随后遇到的代码则要执行。当 Show 在显示模式窗体 (modal form) 时,则随后的代码直到该窗体被隐藏或卸载时才能执行。 当 Show 在显示模式窗体时,除了模式窗体中的对象之外不能进行输入(键盘或鼠标单击)。对其它窗体进行输入前程序必须隐藏或卸载模式窗体(通常是处于响应用户某些操作 状态)。MDIForm 不能是形式的。 在模式窗体显示时,虽然应用程序中的其它窗体失效,但其它应用程序不会失效。 应用程序的启动窗体在其 Load 事件调用后会自动出现。 下面的例子说明如何使用ownerform 参数: Private Sub cmdShowResults_Click() ' 显示模式窗体 frmResults. frmResults.Show vbModal, Me End Sub (7)Cls方法 清除运行时 Form 或 PictureBox 所生成的图形和文本。 语法:object.Cls 说明: Cls 将清除图形和打印语句在运行时所产生的文本和图形,而设计时在 Form 中使用 Picture 属性设置的背景位图和放置的控件不受 Cls 影响。如果激活 Cls 之前 AutoRedraw 属性设置为 False, 调用时该属性设置为 True,则放置在 Form 或 PictureBox 中的图形和文本也不受影响。 这就是说,通过对正在处理的对象的 AutoRedraw 属性进行操作,可以保持 Form 或 PictureBox 中的图形和文本。 调用 Cls 之后,object 的 CurrentX 和 CurrentY 属性复位为 0。 3.窗体的常用事件 (1) Load事件 这个事件发生在窗体被装入内存时,且发生在窗体出现在屏幕之前。窗体出现之前,Visual Basic会看一看Load事件里有没有代码,如果有,那么它先执行这些代码,再让窗体出现在屏幕上。 (2) Click事件,Dblclick事件 这两个事件在单击或双击窗体时发生。不过单击窗体里的控件时,窗体的Click事件并不会发生,Visual Basic会去看控件的Click事件里有没有代码。 (3)Activate (活动事件)与Deactivate(非活动事件) 显示多个窗体时,可以从一个窗体切换到另一个窗体。每次激活一个窗体时,发生Activate 事件,而前一个窗体发生Deactivate事件。 (4)Resize事件 在窗体被改变大小时会触发此事件。 4.窗体的控制 (1) 装入或卸出窗体 要装入或卸出窗体,用Load 或Unload语句。 装入窗体: Load formName 卸出窗体: UnLoad formName FormName变量是要装入或卸出的窗体名。 Load语句只是把窗体装入内存,并不显示出来,要显示窗体可以使用窗体的Show方法。 (2) 显示或隐藏窗体 要显示或隐藏窗体,用Show或Hide方法。若尚未装入内存则先装入再显示。 显示窗体: formName.show mode 隐藏窗体: formName.hide FormName变量是窗体名,可选变元mode为0(缺省值)时窗体为非模态,为1时窗体为模态。模态窗体完全占有应用程序控制权,不允许切换到别的应用程序,除非关闭~而非模态窗体则反之。 (3)END语句 END语句的功能是终止应用程序的执行,并从内存卸在所有窗体。 语法是: END 1. 窗体的属性 (1)设置属性的方法 1)在设计态通过属性窗口设置 直接在属性窗口中选择或输入既可。 2)在程序代码中改变属性值 代码中的格式为: 对象名 . 属性 = 属性值 例:Form1.BackColor=RGB(255,0,0) 2. 窗体的常用方法 (1)Hide方法 用以隐藏 MDIForm 或 Form 对象,但不能使其卸载。 语法:object.Hide object 所在处代表一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则带有焦点的窗体就认为是该 object。 说明: 隐藏窗体时,它就从屏幕上被删除,并将其 Visible 属性设置为 False。 用户将无法访问隐藏窗体上的控件,但是对于运行中的 Visual Basic 应用程序,或对于通过 DDE 与该应用程序通讯的进程及对于 Timer 控件的事件,隐藏窗体的控件仍然是可用的。 窗体被隐藏时,用户只有等到被隐藏窗体的事件过程的全部代码执行完后才能够与该应用程序交互。 如果调用 Hide 方法时窗体还没有加载,那么 Hide 方法将加载该窗体但不显示它。 (2)Move方法 用以移动 MDIForm、Form 或控件。 语法:object . Move left, top, width, height Move 方法的语法包含下列部分: 说明:只有 left 参数是必须的。但是,要指定任何其它的参数,必须先指定出现在语法中该参数前面的全部参数。例如,如果不先指定 left 和 top 参数,则无法指定 width 参数。任何没有指定的尾部的参数则保持不变。 (3)Print 方法 在 Immediate 窗口中显示文本。 语法:object . Print [outputlist] Print 方法的语法具有下列对象限定符和部分: outputlist 参数具有以下语法和部分: {Spc(n) | Tab(n)} expression charpos 说明: 可以用空白或分号来分隔多个表达式。 对系统指定的国别设置,用小数点分隔符将所有打印到 Immediate 视窗的数据正确格式化。关键字要用适用于主应用程序的语言输出。 对于 Boolean 数据,或者打印 True 或者打印 False。根据主机应用程序的地区设置来翻译 True 和 False 关键字。 使用系统能识别的标准短日期格式书写 Date 数据。当日期或时间部件丢失或为零时,只书写已提供的部件。 如果 outputlist 数据是 Empty,则无内容可写。但是,如果 outputlist 数据是 Null,则输出 Null。在输出 Null 关键字时,要把关键字正确翻译出来。 要把错误数据作为 Error errorcode 输出。在输出 Error 关键字时,要把关键字正确翻译出来。 如果在具有缺省显示空间的模块外使用此方法,则需要 object。例如,如果没有指定对象就在标准模块上调用此方法,则将导致错误发生,但是,如果在窗体模块上进行调用,则会在窗体上显示“outputlist”。 注意: 因为 Print 方法是按照字符比例进行打印,所以字符数与字符所占据的宽度固定的列的数目无关。例如,像 “W” 这样的宽字母占据的宽度超过一固定列宽,而像 "i" 这样的窄字母占据的宽度则较小。考虑到要使用比平均字符更宽的空间,表列一定要留有足够余地。另外,也可以使用固定间距的字体(像 Courier 字体)来确保每一字符均只占一列。 (4)PrintFrom方法 用以将 Form 对象的图象逐位发送给打印机。 语法:object.PrintForm 说明:PrintForm 将打印 Form 对象的全部可见对象和位图。在绘制图形时,如果 AutoRedraw 属性为 True,则在运行时PrintForm 将打印 Form 对象或 PictureBox 控件上的图形。 PrintForm 所使用的打印机是由操作系统的控制面板中的设置来决定。 2.3 控件 1.常用控件介绍 (1)常用控件的属性、方法和事件 ComboBox 组合框(将列表框和文本框结合在一起) Style属性 外观属性:取0时,系统创建一个带下拉式列表框的组合框;为1时,系统创建一个由文本框和列表框直接组合在一起的简单组合框,可以从列表框中选择,也可以直接在文本框中输入;为2时,系统创建一个没有文本框的下拉式列表框,单击列表框上的按钮才显示文本框,用户不能在文本框中输入,只能在列表框中选择。 Text 属性 其值为用户从列表框中选定的文本或直接输入的文本。 AddItem方法 添加列表项,使用格式: [ 对象名.] AddItem<列表项文本>[,插入位置序号] 若不指定位置,则插入到列表末尾。 Clear方法 删除列表所有项目 RemoveItem 方法 删除列表项,使用格式: [ 对象名 .] RemoveItem 删除项序号 CommandButton 命令按钮 Cancel属性 取消属性,它为True时, 按〖ESC〗即等于单击此按钮。 Default属性 缺省属性,它为True时, 按回车键即等于单击此按钮。 Timer计时器 Interval属性 两次调用Timer事件的事件间隔,用于创建动态效果。 Frame 框架 CheckBox 复选框 OptionButton选项按钮 Alignment属性 决定它们的对齐方式,0=左对齐,1=右对齐。 Value属性 决定它们是否被选中的属性 2.常用控件的使用辨析 (1)文本框和标签的区别: 文本框通常用于向计算机输入信息,而标签通常用于输出信息。文本框是一个十分重要的控件,因为由复选框和选项按钮向程序输入的信息毕竟只有少数的几条信息而已。标签和文本框的区别很小,标签可以看成是一个在运行时不能修改正文的文本框,因此标签主要用于输出信息。 (2) Label的AutoSize属性和WordWrap属性 为了使标签具有垂直伸展和字换行处理,必须设置它的AutoSize属性和WordWrap属性同时为True。 AutoSize属性为False,WordWrap属性为False时,若标签不够高而Caption太长时,Caption将被切割掉。 AutoSize属性为False,WordWrap属性为True时,情况也如此。 AutoSize属性为True,WordWrap属性为False时,表示可以水平伸展,但只显示一行信息。 (3) PictureBox和Image的Stretch属性和AutoSize属性 Image只有Stretch属性,而PictureBox只有AutoSize属性。 AutoSize属性设为True,则PictureBox改变自己的大小来适应其中的图形。 Stretch属性设为True,则Image中的图形将改变自己的大小来适应外面的边框。 (4)Frame 框架、CheckBox 复选框、OptionButton选项按钮的区别: 复选框和选项按钮用于向程序输入信息, 框架用来对复选框和选项按钮进行分组。 复选框选中时会在小方框里打一个钩,选项按钮选中时会在小圆圈里点一个点。 2.4 定制菜单 1(菜单概述 Windows中的菜单一般由菜单条、菜单、菜单项、子菜单、弹出式菜单组成。 2(普通菜单的设计 (1)给菜单命名 菜单标题和菜单命令也有Caption和Name属性,设置了这两个属性就等于创建了菜单。Name是一个抽象名称,Caption是屏幕上可见的,可在Caption里加入 “&” 来设置热键。 (2)增加和删除菜单 在Menu Editor中部有三个命令钮分别是下一个、插入、删除。插入可用来增加新的菜单。在这三个键下面的Caption列表框里选中菜单项(这时它的底色就变成深蓝色),单击插入键,Visual Basic将上一个增亮菜单下推并增亮一空行,就可以输入新菜单名和标题了。删除键可用来删掉菜单。选中要删掉的菜单,单击Delete键就可以删掉它了。 (3)移动菜单标题 有四种情况:向上移动,向下移动,向左缩排,向右缩排,选中某一菜单标题,安上下箭头,则这个菜单将上下移动到你喜欢的位置上,这也决定了它在界面中的位置。如果按左右箭头,情况则有所不同。由于菜单是分级的,所以,如果它没有缩排,则它是一个菜单标题;如果它缩排一次,那么它将变成一个菜单命令;如果缩排两次,那么它将成为一个子菜单命令。VB里可以总共设计四层子菜单。 (4)设置分离条 分离条是指在菜单中将命令分组的线,VB将分离条也看成一个菜单项,它也需要Caption和Name属性,而且也有其它属性,分离条与菜单项的区别是分离条的Caption属性必须是连字号即减号。也就是,当设置了一个Caption属性为 “-” 的菜单项时,实际上就设置了一个分离条,分离条的名字可以是barFile1之类,以表明分离条的位置。 (5) 菜单的各种简单属性 在菜单编辑器里有许多确认框和一些文本框及一个下拉式的列表框,这些决定了菜单的各种属性。 1) Checked 复选属性 这个属性值设置为真,将在菜单命令左边产生一个打勾的确认标志。 2) Enabled有效属性 各种各样的用户会产生千奇百怪的操作,在许多Edit菜单里都会有不同形式的让菜单命令模糊的情况。Enabled属性为真,则菜单命令是清晰的,Enabled属性为假,则菜单命令是模糊的,这时用户就不能选中这个菜单项了。 3) Visible 可见属性 对暂时不用的菜单, 如果把Visible属性设为假,则菜单根本不会出现在屏幕上。这样做比把Enabled属性设为假显得更加干脆~ 4) Index属性 可以生成菜单命令数组,用索引号区分开。例如向File菜单中添加一系列最近打开的文件名。添加菜单可用Load方法。以上属性可以在运行时设置,形成动态的菜单的情况。 例如: mnuUndo.Enabled = False mnuProperty.Visible = False 还可以改变Caption等属性。 mnuUndo.Caption = “Redo” 3. 生成弹出式菜单(或浮动菜单) 几乎每个Windows应用程序都提供弹出式菜单,用户可以右键单击窗体或控件取得这个菜单。弹出式菜单也属于普通菜单,只是不固定在窗体上,而是可以在任何地方显示。 弹出式菜单用PopupMenu方法调用。假设已经用菜单编辑器生成了名为mnuedit的菜单,则可以在MouseUp事件加入如下代码就可以生成弹出式菜单: If Button = 2 Then PopupMenu mnuedit 2.5 设计状态条、工具栏、进程条等 1(创建状态条 选中状态条,按F4键进入属性窗口,双击(Custom)可以进入主要的设置窗口SBarCtrl属性窗口。 (1) 选择面板形状 在SBarCtrl属性窗口里选择General标签,在Style列表框里选择多面板(缺省形式)或单面板简单文本形式。 (2) 添加或删除状态条面板 在SBarCtrl属性窗口里选择Panels标签,单击Insert按钮添加一个面板,或单击Remove按钮删除一个面板。 (3) 在单面板里显示文本 在SBarCtrl属性窗口里选择General标签,在SimpleText框里输入想显示在状态条面板里的文本。用代码显示的方式是: StatusBar1.SimpleText = "New string to appear" (4) 在多面板里显示文本或图形 1). 在SBarCtrl属性窗口里选择Panels标签,用Index旁的按钮选择面板序号。 2). 在Text框里输入想显示在状态条面板里的文本。 3). 如果想加入图形,单击Browse按钮打开一个图形选择对话框,选择想加入的图形, 然后单击打开按钮。 4). 最后按确定按钮。 5). 用代码显示的方式是:StatusBar1.Panels(x).Text = "New string to appear" 6). 编写代码 如果是一个单面板状态条,当用户单击状态条时,只需用下面的事件过程来响应: Private Sub StatusBar1_Click() End Sub 如果是一个多面板状态条,就需要鉴别用户单击的是哪一个面板,可用下面的事件过程 来识别用户所单击的面板: Private Sub StatusBar1_PanelClick(ByVal Panel As Panel) Select Case Panel.Index Case 1 'Code to follow if user clicks the first panel Case 2 'Code to follow if user clicks the second panel Case 3 'Code to follow if user clicks the third panel End Select End Sub 2(创建工具栏 (1)建立工具条 1).在工具箱里单击工具条图标,拖到窗体的任何位置,Visual Basic自动将ToolBar移到顶部。 2).按F4键打开属性窗口。 3).双击(Custom),打开ToolBar属性窗口。 4). 选择Buttons标签。 5). 单击Insert按钮,Visual Basic就会在你的工具条上显示一个空按钮,现在为你的每一个按钮重复这一步。 6). 单击确定按钮。 如果想把按钮分组,首先生成一个分隔的按钮,再在刚才提到的对话框里将这个按钮的Style属性改为3-Separator。 (2) 为工具条增加图画 1). 在Visual Basic工具箱里单击ImageList图标,并将它拖到窗体的任何位置(位置不重要,因为它总是不可见的)。 2). 按F4打开属性窗口。 3). 双击(Custom),打开ImageListCtrl属性窗口。 4). 选择Image标签。 5). 单击Insert Picture,在现在图形的对话框里选择想使用的位图或图标,然后单击打开按钮。为每个想添加图形的工具条按钮重复此步。 6). 单击确定按钮。 7). 单击工具条,按F4,双击(Custom),显示ToolBar属性对话框。 8). 选择General标签,在ImageList框里选择刚才添加的ImageList控件。 9). 选择Buttons标签,单击紧挨Index框的向左或向右箭头以选择一个按钮序号。出现在工具条最左边的按钮序号为1。 10). 在Image框里输入一个数,输入为1,则显示刚才ImageList控件里的第一个图形,输入为2,则显示刚才ImageList控件里的第二个图形。 11). 为每个按钮重复第10步。 12). 单击确定按钮,现在Visual Basic就会在工具条上显示精美的图形了。 2.6 Visual Basic的输入机制 程序的基本操作就是数据的输入,数据处理和数据的输出。Visual Basic可中用于输入的控件主要有:文本框Text Box、复选框Check Box、选项按钮Option Button、列表框List Box、组合框Combo Box、滚动条Scroll Bar、通用对话框控件。还有一个函数叫InputBox函数,也可用于数据的输入。 1. 通过文本框输入数据 只要取得文本框的Text属性就可以对其进行操作了。下面的代码可将Text1文本框的正文变成大写输出至Text2文本框。 Private Sub Form_Click () Text2.Text = UCase(Text1.Text) End Sub 2. 通过复选框和选项按钮输入数据 只要检测到Check Box和Radio Button的Value属性值就可以知道它们是否被选上了。 3. 通过列表框和组合框输入数据 (1) 列表框List Box和组合框Combo Box的不同 它们在Windows的Open,Save As对话框里最为常见。组合框又包括三种类型,这三种类型要在它的Style属性里设置。列表框仅仅把可以选择的项目列出来,而组合框里有的类型可以允许用户输入数据。 (2) 列表项目的增减 使用AddItem,RemoveItem语句可以增减列表项目。通常将项目增减的语句放入Form_Load事件里。 ListBoxName. AddItem item ComboBoxName. AddItem item item是新项目名称,必须是字符串类型,非字符串类型可通过Str函数或Format函数来转换。转列表框,组合框的每一项目都有一个Index值,第一个项目的Index值是0,第二个是1,依此类推。删除项目可通过删除其Index值来实现。 ListBoxName. RemoveItem item ComboBoxName. RemoveItem item 如:ListBoxName. RemoveItem 0则删除了第一项,这时原来的第二项就变成了第一项。 可以在设计阶段设定列表项目, 方法是: 在属性窗口选择List属性,将出现一个下拉列表,在列表中输入第一项,按Ctrl+Enter,输入第二项……,最后用Enter结束。 (3) 取得列表框/组合框的数据 可以通过取得Text属性或通过取得ListIndex属性来判断哪一项被选择了。ListIndex属性的值也同样是第一个为0,第二个为1……如: If List1.Text = “Visual Basic” Then Instructions If List1.ListIndex = 1 Then Instructions 组合框有时允许用户自己输入数据,这时所输入数据的ListIndex值为,1。 4. 通过滚动条Scroll Bar取得数据 在Visual Basic的工具箱里有两种滚动条:一种是垂直的,一种是水平的,它们的差异无非是摆放的方向不一样。 (1) 滚动条的主要属性及事件 1)Min,Max属性 Min属性决定滚动条最左端或最顶端所代表的值。Max属性决定滚动条最右端或最下端所代表的值。 2)LargeChange,SmallChange属性 SmallChange决定在滚动条两端的箭头钮上单击时改变的值。LargeChange决定在滑块上方或下方区域单击时改变的值。 3)Value属性 Value属性代表当前滑块所处位置的值,这个值由滑块的相对位置决定。 4)Change事件 当滑块位置发生变化时就引发了Change事件。 (2) 取得滚动条的数据 滚动条并不是一个数据输入的好控件,因为无法从滚动条上直接看出输入的数据,但它的优点是可以表示一定范围里的相对位置。为了得到数据,只要取得滚动条的Value属性就可以了。 5. InputBox函数 InputBox函数提供一个简单的对话框供用户输入信息。在把其它版本的BASIC程序移植到Visual Basic时,InputBox函数通常用来代替INPUT语句。这个对话框的样子基本上是上面的样子。 它的完整语法是:x = InputBox (prompt, title, default, xpos, ypos, helpfile, context) 其中,prompt是提示的字符串,这个参数是必须的。title是对话框的标题,是可选的。default是文本框里的缺省值,也是可选的。xpos,ypos决定输入框的位置。helpfile,context用于显示与该框相关的帮助屏幕。返回值 x 将是用户在文本框里输入的数据,x是一个字符串类型的值。如果用户按了Cancel钮,则 x 将为空字符串。 2.7 Visual Basic的输出机制 作为输出的对象,Visual Basic提供了标签,文本框,窗体,图片框(Picture Box)等用于输出,而且Visual Basic里也有一堆命令、属性涉及信息的输出,较常用的有:MsgBox函数,Print方法,Cls方法,Tab函数,Format函数,FontName,FontSize,FontBold,FontItalic,FontStrikethru,FontUnderline属性,CurrentX,CurrentY属性等。 1. 通过MsgBox函数输出 了解Windows应用程序的人都知道当用户操作错误时,应用程序往往打出一个消息框来提示用户的错误,象这样: Dim Action As Integer Action = MsgBox("单击确定键将引爆此计算机~", vbYesNo + vbCritical + vbDefaultButton2, "警告~") If Action = 6 Then Explode 这个功能在Visual Basic里是通过MsgBox函数来实现的,这样程序员就不必自己去画一个消息框了。语法是: Action = MsgBox (msg, type, title) 其中,msg是消息的内容,是一个字符串型的变量,type及title参数是可以省略的,type参数指定显示的按钮是什么及使用什么样的图标(这个参数往往让新程序员思考几分钟),title参数指定消息框的标题。type参数的含义是: 例如:Action = MsgBox (“Are you girl?”, vbYesNo + vbQuestio“Question”)。使用这个函数时Visual Basic将产生一个标题为Question,具有问号和Yes,No按钮的消息框。作为一个函数,本质上还是要返回值的,MsgBox的返回值确定了用户的选择,程序可根据返回值做出相应的动作。 2. Print方法,Cls方法,Tab函数 (1) Print方法 Print 方法的语法是:object. Print expressionlist object表示Print作用的对象,比如是Form或者是Picture Box,object是可以省略的,省略时的Print往往在窗体上输出。expressionlist是输出的内容,允许许多项数据的输出,在数据间可以加入“,”或”;”。加入分号将使下一数据项紧挨着上一数据项输出。而加入逗号,则Visual Basic将下一数据项在下一打印区输出,其实就是空了几个空格后再输出。两个打印区之间有14个字符的宽度,其实这也很难衡量,比如14个“W”所占的宽度大概是14个“i”所占宽度的三倍多。幸好中国日本之类的方块字所占的宽度基本上是一样的,所以较好处理一些。 (2) Tab函数 Tab函数只用在Print方法中,它用来移动下一个字符到打印位置,这将省去数空格的功夫。语法是:Tab (column) Tab函数将Visual Basic自定义的14字符宽的打印区扔到一边,用自己的方式定义了新的灵活的打印区宽度。 (3) Cls方法 Cls也是一个古老的BASIC语句,原来它的作用总是把屏幕变成黑色,然后在左上角或左下角闪烁一个光标,Visual Basic里它的作用是清除绘图语句和Print语句产生的文字和图形。 语法是:object. Cls object指清除的对象,可以是Form或Picture Box。如果object省略,通常Visual Basic都把当前的窗口作为Cls操作的对象。 3. Format函数 Format函数用于制定字符串或数字的输出格式。语法是:x = Format (expression,fmt) expression是所输出的内容。fmt是指输出的格式,这是一个字符串型的变量,这一项若省略的话,那么Format函数将和Str函数的功能差不多。 3.1 VB编码规则 1. 语言元素 VB的语言基础是BASIC语言,VB程序的语言元素主要由: 关键字(如: Dim、Print、Cls) 函数(如:Sin()、Cos()Sqr()) 表达式(如:Abs(-23.5)+45*20/3 ) 语句(如:X=X+5 、 IF……ELSE……END IF)等组成。 2. VB代码书写规则 (1) 程序中不区分字母的大小写,Ab 与AB等效; (2) 系统对用户程序代码进行自动转换: 1) 对于VB中的关键字,首字母被转换成大写,其余转换成小写 2) 若关键字由多个英文单词组成,则将每个单词的首字母转换成大写 3) 对于用户定义的变量、过程名,以第一次定义的为准,以后输入的自动转换成首次定义的形式 3. 语句书写规则 (1)在同一行上可以书写多行语句,语句间用冒号(:)分隔 (2)单行语句可以分多行书写,在本行后加续行符:空格和下划线 _ (3) 一行允许多达255个字符 4. 程序的注释方式 (1)整行注释一般以 Rem开头,也可以用撇号 '; (2)用撇号 ' 引导的注释,既可以是整行的,也可以直接放在语句的后面,最方便; (3)可以利用“编辑”工具栏的“设置注释块”、“解除注释块”来将设置多行注释。 5. 保留行号和标号 VB源程序接受行号与标号,但不是必须的(早期的BASIC语言中必须用行号)。 标号是以字母开始以冒号结束的字符串,一般用在GOTO语句(现在很少用)中。 3.2 VB的语言基础 1.数据类型 1)VB中对没有声明的变量其缺省的数据类型是变体型,可以用来存储各种数据,但所占用的内存比其它类型都多。为提高运行效率(整型效率较高),或达到一定的运算精确度(浮点型精度较高,但运行较慢),应合理的定义数据类型。 2) 逻辑型数据只有True 和False两个值,转换成整型时,True=-1 ,False=0,将其它类型转换成逻辑型时,非0数转换为True ,0转换为False。 3) 字符型可以包括所有的西文字符和汉字,字符必须用双引号括" "起来, 如:"abc123" 4)日期型数据按8字节的浮点数来存储,日期型数表示方式有两种:可以用号码符#括起来,也可以用数字序列表示(小数点左边的数字代表日期,右边代表时间,0为午夜,0。5为中午12点,负数表示是1899年12月31日前的日期和时间)。 如:#3/22/2002# #2002-3-22 14:30:20# Dim T As Date T=-2.5 Print T ' 打印出来的结果是1899-12-28 12:00:00 ,)任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。 2. 变量与常量 (1)变量或常量的命名规则 1) 必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度?255个字符; 2) 不能使用VB中的关键字,并尽量不与VB中标准函数名同名;如:Dim 、Sin 3)VB中不区分变量的大小写,一般变量首字母用大写,其余用小写;常量全部用大写字母表示 4)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。 (2)变量声明 1)用Dim语句进行显式声明 语句形式: Dim 变量名 [As 类型] 如: Dim intX As integer 说明:?如果没有As 类型,则默认为变体类型。 ?可在变量名后加类型符来代替As 类型 如: Dim intX% ?一条语句可以同时定义多个变量,但每个变量必须有自己的类型声明,类型声明不能共用; ?字符串变量根据其存放的长度是否固定,定义方法不同: 定长字符串: Dim strA As String*10 表示最多存放10个字符,如果赋值不足10个,则右补空;若多于10个,则多余部分截去。 不定长字符串:Dim strA As String ?最多可存放2MB个字符 2) 隐式声明 VB中允许变量不经过声明就直接使用,这种称为隐式声明,所有隐式声明的变量都是变体型的。 隐式声明容易造成错误,为了调试程序方便,一般对使用的变量都进行声明,可以在通用声明段使用Option Explicit 语句来强制显式声明所有变量。 (3)常量 1)直接常量 指在程序中直接给出值的数据,如:123、123&、123.45、1.234E2 、123D3分别表示整型、长整型、单精度浮点型(小数形式)、单精度浮点型(指数形式)、双精度浮点型。 八进制常数: 在数值前加&O ,如 &O123 十六进制常数:在数值前加&H ,如&H123 2)用户声明的符号常量 用Const来声明: Const 符号常量名 [As 类型] = 表达式 如:Const PI=3.14159 '声明了常量PI,代表3.14159,单精度型 Const MAX As Integer=&O144 ''声明了常量MAX,代表八进制数144,整型 Const COUNT#=45.67 '声明了常量COUNT,代表45.67,双精度型 3)系统提供的常量 系统定义的常量位于对象库中,在对象浏览器中的Visual Basic(VB)和Visual Basic for Aplication(VBA)等对象库中列出了VB的常量。这些常量可以与应用程序的对象、方法、属性一起使用。 如:Form1.WindowsState=vbMaximized 表示将窗口极大化。 3. 运算符 (1)算术运算符 算术运算符两边的操作数应该是数值型,若是数字字符或逻辑型,则自动转换为数值类型后再运算。 (2)字符串运算符 (3) 关系运算符 1)如果两个操作数都是数值型,则按其大小比较 2) 如果两个操作数都是字符型,则按字符的ASCII码值从左到右一一比较 3) 汉字字符大于西文字符 4) 关系运算符的优先级相同 5) VB6.0中Like运算符与通配符的使用: ,——表示任何单一字符 *——表示0个或多个字符 #——表示任何一个数字(0 - 9) [字符列表]——表示字符列表中的任何单一字符 [~字符列表]—— 表示不在字符列表中的任何单一字符 (4) 逻辑运算符 1)若有多个条件时,And必须全部条件为真才为真; Or只要有一个条件为真就为真。 2)如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。And运算常用于屏蔽某些位;Or运算常用于把某些位置1。 如:12 And 7 表示对1100与0111进行And运算,得到二进制值100,结果为十进制4。 3)对一个数连续进行两次Xor操作,可恢复原值。在动画设计中,用Xor可恢复原来的背景。 4.表达式 (1)表达式的组成 表达式由常量、变量、运算符、函数和圆括号按一定的规则组成,通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。 (2)表达式的书写规则 1)乘号不能省略 2)括号必须成对出现,均使用圆括号,可以嵌套,但必须配对。 3)表达式从左到右在同一基准上书写,无高低、大小之分。 例:sqr((3*x+y)-z)/(x*y)^4 (3)不同数据类型的转换 操作数的数据类型应该符合要求,不同的数据应该转换成同一类型。在算术运算中,如果操作数的数据精度不同,VB规定运算结果采用精度较高的数据类型。 (4)优先级 同一表达式中,不同运算符的优先级是:算术运算符 > 字符运算符 > 关系运算符 > 逻辑运算符 注意:对于存在多种运算符的表达式,可增加圆括号改变优先级或使表达式更清晰。 4.1 算法概论 1(算法的概念 算法:指用计算机解决某一问题的方法和步骤。 算法分类: 数值算法:用于解决一般数学解析方法难以解决的问题,如:求超越方程的根、求定积分、解微分方程等。 非数值算法:用于对非数值信息进行查找、排序等。 数值算法:用于解决一般数学解析方法难以解决的问题,如:求超越方程的根、求定积分、解微分方程等。 非数值算法:用于对非数值信息进行查找、排序等。 2(算法的特征 (1)确定性:指算法的每个步骤都应确切无误,没有歧义。 (2)可行性:指算法的每个步骤必须是计算机能够有效执行、可以实现的,并可得到确定的结果。 (3)有穷性:指一个算法应该在有限的时间和步骤内可以执行完毕的。 (4)输入性:指一个算法可以有0或多个输入数据。 (5)输出性:指一个算法必须有一个或多个输出结果。 3(算法的评价 主要评价指标是:算法是否正确、运行的效率、占用系统资源的多少。 4(算法的描述 一般常用流程框图来描述算法。 5.基本算法结构 “结构化程序设计方法”规定算法有三种基本结构: 顺序结构、选择结构和循环结构 6(算法示例 (1)欧几里德算法——求两个自然数的最大公约数 (2)顺序查找算法—— 在N个字符串集合中,查找有无特定的字符串存在 4.2 顺序结构 1. 赋值语句 赋值语句是任何程序设计中最基本的语句,赋值语句都时顺序执行的。赋值语句的形式为: 变量名 = 表达式 它的作用是计算右边表达式的值,然后赋给左边的变量,表达式的类型应该与变量名的类型一致。 2. 使用说明 (1)当表达式为数值型而与变量精度不同时,强制转换成左边变量的精度; (2)当表达式是数字字符串,左边变量是数值类型,自动转换成数值类型再赋值,但当表达式中有非数字字符或空串,则出错。 (3)任何非字符类型赋值给字符类型,自动转换为字符类型; (4)当逻辑型赋值给数值型时,True转换为 -1,False转换为0;反之,非0转换为True,0转换为False; (5)赋值号左边的变量只能是变量,不能是常量、常数符号、表达式,否则报错; (6)不能在一句赋值语句中,同时给各变量赋值; (7)在条件表达式中出现的 = 是等号,系统会根据 = 号的位置,自动判断是否为赋值号; (8)注意N=N+1 是累加中常见的赋值语句,表示将N变量中的值加1后再赋值给N。 4.3 选择结构(或称分支结构) 1. IF条件语句 (1)If……Then语句(单分支结构 F) 语句形式: 1)If <表达式> Then 语句块 End If 2)If <表达式> Then <语句> 说明:表达式一般为关系表达式、逻辑表达式,也可以为算术表达式,非0为True,0为False; 语句块可以是一句或多句,若用2)表示,则只能是一句语句,若多句,语句间需用冒号分隔,而且必须在一行上书写。 例:已知两个数x和y,比较它们的大小,使得 x大于y: 方法一: if x Then <语句块1> Else <语句块2> End If 2) If <表达式> Then <语句1> Else <语句2> 例: x2 -5 x?0 3x +2 x=0 (3)If……Then……ElseIf语句(多分支结构) 语句形式: If <表达式1> Then <语句块1> ElseIf <表达式2> Then <语句块2> …… [ Else 语句块 n+1 ] End If 注意 : 1)不管有几个分支,程序执行了一个分支后,其余分支不再执行; 2)ElseIf 不能写成Else If 3)当多分支中有多个表达式同时满足,则只执行第一个与之匹配的语句块 例:已知变量strC中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。 (4)If语句的嵌套 If语句的嵌套是指if 或else后面的语句块中又包含If语句。语句形式: If <表达式1> Then If <表达式11> Then …… End If …… End If 注意: 1)对于嵌套结构,为了增强程序的可读性,应该采用缩进形式书写; 2)If语句形式若不在一行上书写,必须与End If配对,多个if嵌套,End If与它最接近的Emd If配对。 例: 已知x、y、z三个数,比较它们的大小并排序,使得x>y>z. 2. Select Case语句(情况语句) Select Case语句(情况语句)是多分支语句的又一种形式,语句形式: Select Case 变量或表达式 Case 表达式列表1 语句块1 Case 表达式列表2 语句块2 …… [Case Else 语句块n+1] End Select 说明:1)变量或表达式可以是数值型或字符串表达式 2)表达式列表I 可以是表达式、一组用逗号分隔的枚举值、表达式1 to 表达式2、Is关系运算符表达式;如:case 1 to 10 、 case "a","w","e","t" 、 case 2,4,6,8,is>10 3)并不是所有的多分支结构都可以用情况语句代替的。 例:已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下: 3. 条件函数 (1)if函数 函数形式: Iif(表达式,当条件为True时的值,当条件为False时的值(例:求X、Y中大的数,并放入变量Tmax中: Tmax=Iif(X>Y, X, Y) (2)Choose函数 函数形式:Choose(整数表达式,选项列表) 如果整数表达式的值是1,则选择列表中的第1项,依次类推;如果小于1或大于列表项数时,则返回NULL。 例: 根据nub为1 -4的值,换算成不同的运算符: OP= Choose(nub,“,”,“,”,“×”,“†”) 4.4 循环结构 循环是在指定的条件下多次重复执行一组语句。VB中提供了两种类型的循环语句: 计数循环语句和条件型循环语句 1. For循环语句(知道循环次数的计数型循环) 语句形式: For 循环变量 = 初值To 终值 [ Step 步长] 语句块 [Exit For] 语句块 Next 循环变量 说明: 1) 循环变量必须为数值型 2)步长一般为正,初值小于终值;若为负,初值大于终值;缺省步长为1; 3)语句块可以是一句或多句语句,称为循环体; 4)Exit For 表示当遇到该语句时,退出循环体; 执行Next的下一句; 循环次数=int((终值 - 初值)/步长+1) 5)退出循环后,循环变量的值保持退出时的值; 6)在循环体内对循环变量可多次引用,但不要对其赋值,否则影响结果。 2. Do……Loop循环(不知道循环次数的条件型循环) 是用于控制循环次数未知的循环结构,语法形式有两种: 形式1:Do While …… Loop Do [ While | Until 条件 ] 语句块 [ Exit Do ] 语句块 Loop 形式2:Do …… Loop While Do 语句块 [ Exit Do ] 语句块 Loop [ While | Until 条件 ] 说明: 1)形式1为先判断后执行,有可能一次也不执行; 2)形式2为先执行后判断,至少执行一次; 3)关键字While 用于指明条件为真时就执行循环体中的语句,Until刚好相反; 4)当省略了While|Until 条件字句,即循环结构仅由 Do……Loop关键字构成时,表示无条件循环,这时循环体内应该有Exit Do语句,否则为死循环; 5)Exit Do 语句表示当遇到该语句时,退出循环,执行Loop的下一语句。 3. 循环的嵌套 指在循环体内又包含了一个完整的循环结构。循环嵌套对For 循环和Do……Loop循环均适用。 4.5 其它辅助控制语句 1(Go To 语句 语句形式: Go To 标号 | 行号 说明:(1)Go To语句只能转移到同一过程的标号或行号处;标号是一个字符系列,首字符必须为字母,与大小写无关,任何转移到的标号后面必须有冒号: ;行号是一个数字序列; (2)以前BASIC中常用此语句,可读性差;现在要求尽量少用或不用,改用选择结构或循环结构来代替。 2(Exit语句 用于退出某控制结构的执行,VB的Exit语句有多种形式,如: Exit For (退出For循环) Exit Do (退出Do)循环) Exit Sub (退出子过程) Exit Function(退出函数) 3(End 语句 独立的End语句用于结束一个程序的执行,可以放在任何事件过程中,形式为:End VB 的End语句还有多种形式,用于结束一个过程或块,如: End If, End With, End Type, End Select,End Sub, End Function 4(With语句 它的作用是可以对某个对象执行一系列的语句,而不用重复指出对象的名称。但不能用一个With语句设置多个不同的对象。属性前面需要带点号“? ”。 语句形式如下: With 对象名 语句块 End With 例:With form1 . Height=3000 . Width=4000 . BackColor=RGB(255,0,0) End With 4.6 程序调试 1(VB的调试工具 (1)设置自动语法检查 打开工具菜单 ? 单击选项命令 ? 选择 编辑器 页面 ?将 自动语法检测 勾上。 (2)利用VB调试工具栏 利用该工具栏可以运行程序、中断运行、在程序中设置间断点、监视变量、单步调试、过程跟踪等操作。 2( VB的三种模式 (1)设计模式 在设计模式下可以进行程序的界面设计、属性设置、代码编写等,标题栏上显示“设计”,在此模式下不能运行程序,也不能使用调试工具。 (2)运行模式 执行“运行”菜单中的“启动”命令或单击工具栏上的启动按钮或按F5键,即由设计模式进入运行模式,标题栏显示“运行”,在此阶段可以查看程序代码,但不能修改。若要修改,必须单击工具栏上的“结束”按钮,回到设计模式,也可以选择“中断”按钮,进入中断模式。 (3)中断模式 当程序运行时单击了“中断”按钮,或当程序出现运行错误时,都可以进入中断模式,在此模式下,运行的程序被挂起,可以查看代码、修改代码、检查数据。修改结束,单击“继续”按钮可以继续程序的运行,也可以单击“结束”按钮停止程序的执行。 3. 常见错误 (1) 编辑时错误 当用户在代码窗口编辑代码时,VB会对程序进行语法检查,当发现语句没有输完、关键字输错等情况时,系统会弹出对话框,提示出错,并在错误处加亮显示,以便用户修改。 (2)编译时错误 是指用户单击了“启动”按钮,VB开始运行程序前,先编译执行的程序段时产生的错误,此错误是由于用户未定义变量、遗漏关键字等原因而产生的。发现错误时系统会停止编译,提示用户修改。 (3)运行时错误 指VB在编译通过后,运行代码时发生的错误,一般是由于指令代码执行了非法操作引起的,如:数据类型不匹配、试图打开一个不存在的文件等。系统会报错并加亮显示、等候处理。 (4)逻辑错误 如果程序运行后得不到所希望的结果,则说明存在逻辑错误。如:运算符使用不正确,语句的次序不对、循环语句的起始、终值不正确。这种错误系统不会报错,需要用户自己分析判断。 4.程序调试方法 (1)进入/退出中断状态 进入中断状态有四种方法: 1) 程序运行时发生错误自动进入中断 2) 程序运行中用户按中断键强制进入中断 3) 用户在程序中预先设置了断点,程序执行到断点处即进入中断状态 4) 在采用单步调试方式,每运行一个可执行代码后,即进入中断状态。 (2) 利用调试窗口 1) 立即窗口 这是调式窗口中使用最方便、最常用的窗口。可以在程序中用Debug.Print方法,把输出送到立即窗口,也可以在该窗口中直接使用Print语句或,显示变量的值。 2) 本地窗口 该窗口显示当前过程中所有变量的值,当程序的执行从一个过程切换到另一个过程时,该窗口的内容发生改变,它只反映当前过程中可用的变量。 3) 监视窗口 该窗口可显示当前的监视表达式,在此之前必须在设计阶段,利用调试菜单的“添加监视命令”或“快速监视”命令添加监视表达式以及设置的监视类型在运行时显示在监视窗口,根据设置的监视类型进行相应的显示。 (3)插入断点和逐句跟踪 在调试程序时,通常回设置断点来中断程序的运行,然后逐句跟踪检查相关变量、属性和表达式的值是否在预期的范围内。 可在中断模式下或设计模式时设置或删除断点,在代码窗口选择怀疑存在问题的地方作为断点,按下F9键,则程序运行到断点处即停下,进入中断模式,在此之前所关心的变量、属性、表达式的值都可以看到。 5.1 数组的概念 1(引例 求100个学生的平均成绩及超过平均成绩的人数。 如果用一般变量来表示成绩,需要用100个变量,如:mark1、mary2、……mark100。若用数组,可以只用一个来表示mark(1 To 100)。 2(基本概念 数组:是同类型变量的一个有序的集合。 如:A(1 To 100),表示一个包含100个数组元素的名为A的数组。 数组元素: 即数组中的变量。用下标表示数组中的各个元素。 表示方法:数组名(P1,P2,……) 其中P1、P2表示元素在数组中的排列位置,称为“下标”。 如:A(3,2)代表二维数组A中第3行第2列上的那个元素。 数组维数: 由数组元素中下标的个数决定,一个下标表示一维数组,二个下标表示二维数组。 VB中有一维数组、二维数组、……最多60维数组。 下标: 下标表示顺序号,每个数组有一个唯一的顺序号,下标不能超过数组声明时的上、下界范围。下标可以是整型的常数、变量、表达式,甚至又是一个数组元素。 下标的取值范围是:下界 To 上界 ,缺省下界时,系统默认取0。 3(数组声明 数组必须先声明后使用。声明数组就是让系统在内存中分配一个连续的区域,用来存储数组元素。 声明内容:数组名、类型、维数、数组大小。 一般情况下,数组中各元素类型必须相同,但若数组为Variant时,可包含不同类型的数据。 静态数组:声明时确定了大小的数组。 动态数组: 声明时没有给定数组大小(省略了括号中的下标),使用时需要用ReDim语句重新指出其大小。 使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。 5.3动态数组及声明 1. 动态数组的建立与声明 建立动态数组的方法是:利用Dim、Private、Public语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。语法是: ReDim 数组名(下标1[,下标2…]) [As 类型] 其中下标可以是常量,也可以是有了确定值的变量,类型可以省略,若不省略,必须与Dim中的声明语句保持一致。 例: Dim D() As Single Sub Form_Load() …… ReDim D(4,6) …… End Sub 2(注意事项 (1)在动态数组ReDim语句中的下标可以是常量,也可以是有了确定值的变量。 (2)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。 (3)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve 参数来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。 1. 给数组元素赋初值 (1) 利用循环结构 例:Dim iA(1 To 10) As Integer For i=1 To 10 A(i)=0 Next i (2) 利用Array函数 例:Dim a As Variant, b As Variant, i% a = Array (1,2,3,4,5) b = Array ("abc","def","67") For i=0 To Ubound (a) Picture1.print a(i);""; Next i For i=0 To Ubound (b) Picture1.print b(i);""; Next i 2(数组的输入 (1) 通过InputBox函数输入适合输入少量数据。 例:Dim sB(3,4) As singer For i=0 To 3 For j=0 To 4 SB(i,j) =InputBox("输入" & i & j & "的值") Next j Next i (2) 通过文本框控件输入 对大批量的数据输入,采用文本框和函数split()\join()进行处理,效率更高。 3(数组的赋值 在VB6.0中可以直接将一个数组的值赋值给另一个数组: Dim a(3) as integer, b() as integer A(0)=2: A(1)=5: A(2)=-2: A(3)=2 b=a 在早期的VB中,这需要用循环语句才可以实现: ReDim b(UBound(a)) For I=0 to UBound(a) b(I)=a(I) Next i 注意:(1)赋值号两边的数据类型必须一致; (2)如果赋值号左边的是一个动态数组,则赋值时系统自动将动态数组ReDim成右边相同大小的数组; (3)如果赋值号左边的是一个大小固定的数组,则数组赋值出错。 4(数组的输出 用For……Next循环语句输出。 5(求数组中最大元素和所在下标及各元素之和 求数组中最大元素及下标,一般假设第一个元素及下标为最大,然后将该数与数组中的其他元素逐一比较,若有比其大的就替换,同时替换下标。 6(交换数组中各元素 交换的要求是将数组第一个元素与最后一个交换,第二个与倒数第二个交换,依次类推。 5.5控件数组 1(控件数组的概念 控件数组是由一组相同类型的控件组成的,它们共用一个控件名,具有相同的数组。控件数组适用于若干个控件执行的操作相似的场合,控件组共享同样的事件过程。控件数组通 过索引号(属性中的Index)来标识各控件,第一个下标是0 。如:Text1(0)、Text1(1)、Text1(2)、Text1(3)…… 2(控件数组的建立 (1)在设计时建立 步骤:1)在窗体上画出某控件,并进行属性设置。 2)选中该控件进行“复制”和“粘贴”操作,系统提示“是否建立控件数组”,选择是即可。多次粘贴就可以创建多个控件元素。 3)进行事件过程的编程。 (2)运行时添加控件数组 方法:1)在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。 2)在编程时通过Load方法添加其余若干个元素,也可以通过Unload删除某个添加的元素。 3)每个添加的控件数组通过Left 和Top属性,确定其在窗体上的位置,并将Visible设置为True。 使用示例:建立一个类似国际象棋的棋盘,要求黑白交替,运行时单击某个棋格,会改变颜色并显示其序号。 5.6自定义数据类型 1. 自定义数据类型的定义 是指由若干标准数据类型组成的一种复合类型,也称为 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 类型。 (1)定义方式: Type 自定义类型名 元素名[(下标)] As 类型名 …… 元素名[(下标)] As 类型名 End Type 元素名:表示自定义类型中的一个成员 下标(可选):表示是数组 类型名:为标准类型 例:定义一个学生信息的自定义类型: Type studtype No As Integer ? 定义学号 Name As String*10 ? 定义姓名 Sex As String*2 ? 定义性别 Mark(1 TO 4) As Single ? 定义4门课程的成绩 Total As Single ? 定义总分 End Type (2)注意事项 1)自定义类型一般在标准模块(.bas)中定义,默认是Public 2)自定义类型中的元素可以是字符串,但应是定长字符串 3) 不可把自定义类型名与该类型的变量名混淆 4) 注意自定义类型变量与数组的差别:它们都由若干元素组成,前者的元素代表不同性质、不同类型的数据,以元素名表示不同的元素;后者存放的是同种性质、同种类型的数据,以下标表示不同元素。 2. 自定义型变量的声明和使用 使用形式: Dim 变量名 As 自定义类型名 例如: Dim student As studtype, mystud As studtype 自定义类型中元素的表示方法是:变量名 . 元素名 如:student.name student.mark(4) 为了简单起见,可以用With …… End With 语句进行简化。 例: With student .no=99001 .name="" .sex="" .total=0 for I=1 to 4 .mark(I)=int(rnd*101) ?随机产生0 - 100之间的分数 .total=.total+.may(I) next I End With Mystud=student ? 同种自定义类型变量可以直接赋值 3.自定义类型数组的使用 自定义类型数组就是数组中的每个元素都是自定义类型。 例如:自定义一个由学生姓名、成绩组成的学生记录类型,用来存放100个学生的记录。 6.1VB的过程设计及子过程(Sub)的定义与调用 1(什么是过程 在程序设计中,为各个相对独立的功能模块所编写的一段程序称之为过程。 2(VB中的自定义过程分类 (1)以“Sub”保留字开始的子程序过程 (包括事件过程和通用过程),不返回值; (2)以“Function” 保留字开始的函数过程,返回一个值; (3)以“Property” 保留字开始的属性过程,可以返回和设置窗体、标准模块以及类模块的属性值,也可以设置对象的值。 3( 事件过程 (1)窗体事件过程 语法:Private Sub Form_事件名([参数列表]) [局部变量和常数声明] 语句块 End Sub 注意: 1)窗体事件过程名由Form_事件名组成,多文档窗体用MDIForm_事件名; 2)每个窗体事件过程名前都有一个Private的前缀,表示该事件过程不能在它自己的窗体模块之外被调用; 3)事件过程有无参数,完全由VB提供的具体事件本身决定,用户不可以随意添加。 (2)控件事件过程 语法:Private Sub 控件名_事件名([参数列表]) [局部变量和常数声明] 语句块 End Sub 注意:其中的控件名必须与窗体中某控件相匹配,否则VB将认为它是一个通用过程。 (3)建立事件过程的方法 1)打开代码编辑器窗口(两种方法:双击对象或从工程管理器中单击“查看代码”按钮) 2)在代码编辑器窗口中,选择所需要的“对象”和“事件过程” 3)在Private Sub …… End Sub之间键入代码 4)保存工程和窗体 (4)事件过程的调用 事件过程由一个发生在VB中的事件来自动调用或者由同一模块中的其他过程显示调用。 2(通用过程 通用过程是一个必须从另一个过程显示调用的程序段,通用过程有助于将复杂的应用程序分解成多个易于管理的逻辑单元,使应用程序更简洁、更易于维护。 通用过程分为公有(Public)过程和私有( Private)过程两种,公有过程可以被应用程序中的任一过程调用,而私有过程只能被同一模块中的过程调用。 (1)定义方法: [ Private | Public ] [ Static] Sub 过程名([参数列表]) [局部变量和常数声明] „用Dim 或Static声明 语句块 [Exit Sub] 语句块 End Sub 注意: 1)缺省[ Private | Public ]时,系统默认为 Public ; 2)Static 表示过程中的局部变量为“静态”变量; 3)过程名的命名规则与变量命名规则相同,在同一个模块中,同一符号名不得既用作Sub过程名,又用作Function过程名。 4)参数列表中的参数称为形式参数,它可以是变量名或数组名,只能是简单变量,不能是常量、数组元素、表达式;若有多个参数时,各参数之间用逗号分隔,形参没有具体的值。VB的过程可以没有参数,但一对圆括号不可以省略。不含参数的过程称为无参过程。 形参格式为: [ ByVal ] 变量名[()] [As 数据类型] 式中: 变量名[()]:变量名为合法的VB变量名或数组名,无括号表示变量,有括号表示数组。 ByVal :表明其后的形参是按值传递参数(传值参数 Passed By Value),若缺省或用ByRef,则表明参数是按地址传递的(传址参数)或称“引用”(Passed By Reference)。 As: 数据类型:缺省表明该形参是变体型变量,若形参变量的类型声明为String,则只能是不定长的。而在调用该过程时,对应的实在参数可以是定长的字符串或字符串数组,若形参是数组则无限制。 5)Sub 过程不能嵌套定义,但可以嵌套调用。 6) End Sub 标志该过程的结束,系统返回并调用该过程语句的下一条语句。 7) 过程中可以用Exit Sub提前结束过程,并返回到下调用该过程语句的下一条语句。 (2)建立Sub过程的方法 方法一: 1)打开代码编辑器窗口 2)选择“工具”菜单中的“添加过程” 3)从对话框中输入过程名,并选择类型和范围 4)在新创建的过程中输入内容 方法二: 1)在代码编辑器窗口的对象中选择“通用”,在文本编辑区输入 Private Sub 过程名 2)按回车键,即可创建一个Sub过程样板 3)在新创建的过程中输入内容 3(Sub子过程的调用 (1) 用Call语句调用Sub过程 语法:Call 过程名(实在参数表) 实在参数的个数、类型和顺序,应该与被调用过程的形式参数相匹配,有多个参数时,用逗号分隔。 (2)把过程名作为一个语句来用 语法:过程名 [实参1[,实参2……]] 它与(1)的不同点是:去掉了关键字和实参列表的括号 如上例中可以改成:area a,b,c,w 6.3参数的传递 1(形参与实参的概念 形参:指出现在Sub 和Function过程形参表中的变量名、数组名,过程被调用前,没有分配内存,其作用是说明自变量的类型和形态以及在过程中的角色。形参可以是: 1)除定长字符串变量之外的合法变量名; 2)后面跟()括号的数组名。 实参:是在调用Sub 和Function过程时,传送给相应过程的变量名、数组名、常数或表达式。在过程调用传递参数时,形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但位置必须对应起来。 形参与实参的关系:形参如同公式中的符号,实参就是符号具体的值;调用过程:即实现形参与实参的结合,也就是把值代入公式进行计算。 2( 按值传递参数(定义时加ByVal) 按值传递参数(Passed By Value)时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。 3(按地址传递参数(定义时没有修饰词或带关键字ByRef) 按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。如果实参是一个常数或表达式,VB会按“传值”方式来处理。 4(数组参数 VB允许把数组作为形参出现在形参表中,语法: 形参数组名() [As 数据类型] 形参数组只能按地址传递参数,对应的实参也必须是数组,且数据类型相同。调用过程时,把要传递的数组名放在实参表中,数组名后面不跟圆括号。在过程中不可以用Dim语句对形参数组进行声明,否则会产生“重复声明”的错误。但在使用动态数组时,可以用ReDim语句改变形参数组的维界,重新定义数组的大小。 5( 对象参数 VB中可以向过程传递对象,在形参表中,把形参变量的类型声明为“Control”,可以向过程传递控件;若声明为“Form”,则可向过程传递窗体。对象的传递只能按地址传递。 6.4变量、过程的作用域 1( VB应用程序的组成: 2( 过程的作用域 3. 变量的作用域 4(静态变量 用Static声明的静态变量,在每次调用过程时保持原来的值,不重新初始化。而用Dim声明的变量,每次调用过程时,重新初始化 例:显示1到5个数。 5(同名变量 对不同范围内出现的同名变量,可以用模块名加以区别。一般情况下,当变量名相同而作用域不同时,优先访问局限性大的变量。 6.5递归过程 1(递归的概念 通俗的讲,用自身的结构来描述自身就称为“递归”。如对阶乘运算的定义就是递归的: n!=n(n-1)! (n-1)!=(n-1)(n-2)! 2(递归子过程和递归函数 VB 允许一个自定义子过程或函数过程在过程体的内部调用自己,这样的子过程或函数就叫递归子过程和递归函数。递归过程包含了递推和回归两个过程。构成递归的条件是: (1)递归结束条件和结束时的值 (2)能用递归形式表示,并且递归向结束条件发展。 例:编制程序求fac(n)=n~的函数 3(注意事项 (1)递归算法设计简单,但消耗的上机时间和占据的内存空间比非递归大 (2) 设计一个正确的递归过程或函数过程必须具备两点: 1)具备递归条件; 2)具备递归结束条件 (3) 一般而言,递归函数过程对于计算阶乘、级数、指数运算有特殊效果。 7.1文件系统控件 1(文件系统控件种类 (1) 驱动器列表框(DriveListBox):用来显示当前机器上的所有盘符 (2) 目录列表框(DirListBox):用来显示当前盘上的所有文件夹 (3) 文件列表框(FileListBox):用来显示当前文件夹下的所有文件名 2(重要属性 3(重要事件 7.2文件的读写 1. 文件的有关概念 记录:计算机处理数据的基本单位,由若干个相互关联的数据项组成。相当于表格中的一行。 文件:记录的集合,相当于一张表。 文件类型:顺序文件、随机文件、二进制文件。 访问模式:计算机访问文件的方式,VB中有顺序、随机、二进制三种访问模式。 2. 顺序访问模式 顺序访问模式的规则最简单,指读出或写入时,从第一条记录“顺序”地读到最后一条记录,不可以跳跃式访问。该模式专门用于处理文本文件,每一行文本相当于一条记录,每条记录可长可短,记录与记录之间用“换行符”来分隔。 顺序文件的写入步骤:打开、写入、关闭; 读出步骤:打开、读出、关闭。 (1)打开文件 打开文件的命令是Open,格式为: Open “文件名” For 模式 As [#] 文件号 [Len=记录长度] 说明: 1)文件名可以是字符串常量也可以是字符串变量 2)模式可以是下面之一: OutPut:打开一个文件,将对该文件进行写操作 Input:打开一个文件,将对该文件进行读操作 Append:打开一个文件,将在该文件末尾追加记录 3) 文件号是一个介于1-511之间的整数,打开一个文件时需要指定一个文件号,这个文件号就代表该文件,直到文件关闭后这个号才可以被其他文件所使用。可以利用FreeFile()函数获得下一个可以利用的文件号。 例: Open "D:\sj\aaa" For Output As #1 意思是:打开D:\SJ下aaa文件供写入数据,文件号为#1 (2)写操作 将数据写入磁盘文件所用的命令是:Write# 或Print#。 语法格式: 1) Print #文件号,[输出列表] 例: Open “D:\SJ\TEST.DAT” For Output As #1 Print #1,Text1.Text '把文本框的内容一次性写入文件 Close #1 2)Write #文件号,[输出列表] 其中的输出列表一般指用逗号,分隔的数值或字符串表达式。Write #与Print #的功能基本相同,区别是Write #是以紧凑格式存放,在数据间插入逗号,并给字符串加上双引号。 (3) 关闭文件 结束各种读写操作后,必须将文件关闭,否则会造成数据丢失。关闭文件的命令是Close。 Close [#]文件号[,[#]文件号]…… 例: Close #1,#2,#3 (4) 读操作 1) Input #文件号,变量列表 作用:将从文件中读出的数据分别赋给指定的变量。 注意:与Write #配套才可以准确地读出。 2)Line Input #文件号,字符串变量 用于从文件中读出一行数据,并将读出的数据赋给指定的字符串变量,读出的数据中不包含回车符和换行符,可与Print #配套用。 3)Input$(读取的字符数,#文件号) 该函数可以读取指定数目的字符。 与读文件有关的两个函数: LOF():返回某文件的字节数 EOF():检查指针是否到达文件尾。 例:将一个文本文件读入文本框的三种方法。 3.随机访问模式 该模式要求文件中的每条记录的长度都是相同的,记录与记录之间不需要特殊的分隔符号。只要给出记录号,可以直接访问某一特定记录,其优点是存取速度快,更新容易。 (1) 打开与关闭 打开:Open “文件名” For Random As [#] 文件号 [Len=记录长度] 关闭:Close #文件号 注意:文件以随机方式打开后,可以同时进行写入和读出操作,但需要指明记录的长度,系统默认长度为128个字节。 (2)读与写 读操作:Get [#]文件号,[记录号],变量名 说明:Get命令是从磁盘文件中将一条由记录号指定的记录内容读入记录变量中;记录号是大于1的整数,表示对第几条记录进行操作,如果忽略不写,则表示当前记录的下一条记录。 写操作:Put [#]文件号,[记录号],变量名 说明:Put命令是将一个记录变量的内容,写入所打开的磁盘文件指定的记录位置;记录号是大于1的整数,表示写入的是第几条记录,如果忽略不写,则表示在当前记录后插入一条记录。 4. 二进制访问模式 打开:Open “文件名” For Binary As [#] 文件号 [Len=记录长度] 关闭:Close #文件号 该模式是最原始的文件类型,直接把二进制码存放在文件中,没有什么格式,以字节数来定位数据,允许程序按所需的任何方式组织和访问数据,也允许对文件中各字节数据进行存取和访问。 该模式与随机模式类似,其读写语句也是Get 和Put,区别是二进制模式的访问单位是字节,随机模式的访问单位是记录。在此模式中,可以把文件指针移到文件的任何地方,刚开始打开时,文件指针指向第一个字节,以后随文件处理命令的执行而一旦。文件一旦打开,就可以同时进行读写。 7.3常用的文件操作语句和函数 1(FileCopy语句 格式:FileCopy 源文件名 目标文件名 功能:复制一个文件 说明:不能复制一个已打开的文件 2(Kill语句 格式:Kill 文件名 功能:删除文件 说明:文件名中可以使用通配符 *,, 3(Name语句 格式:Name 旧文件名 新文件名 功能:重新命名一个文件或目录 说明:不能使用通配符;具有移动文件功能;不能对已打开的文件进行重命名操作 4(ChDrive语句 格式:ChDrive 驱动器 功能: 改变当前驱动器 说明:如果驱动器为空,则不变;如果驱动器中有多个字符,则只会使用首字母 5(MkDir语句 格式:MkDir 文件夹名 功能:创建一个新的目录 6(ChDir语句 格式:ChDir 文件夹名 功能:改变当前目录 说明:改变默认目录,但不改变默认驱动器。 7. RmDir语句 格式:RmDir 文件夹名 功能:删除一个存在的目录 说明:不能删除一个含有文件的目录 8. CurDir()函数 格式: CurDir[(驱动器)] 功能:可以确定任何一个驱动器的当前目录。 说明:括号中的驱动器表示需要确定当前目录的驱动器,如果为空,返回当前驱动器的当前目录路径。 8.4进程条(ProgressBar)和滑块(Slider) 1. 进程条 作用:进程条控件用于监视操作完成的进度。 创建:在窗体上画出进程条控件,右击,选择属性,然后进行所需的外观设置。 主要属性:ProgressBar 控件有一个行程和一个当前位置。行程代表该操作的整个持续时间。当前位置则代表应用程序在完成该操作过程时的进度。Max 和 Min 属性设置了行程的界限。Value 属性则指明了在行程范围内的当前位置。 (1) Min属性代表进程条全空时的值,缺省时为0。 (2) Max属性代表进程条全空时的值,缺省时为100。 (3) Value属性代表进程条当前的值(但不出现在属性窗口中),它大于Min属性,小于Max属性。改变Value属性的值将改变进程条的进度显 示。 示例: Private Sub Command1_Click() If ProgressBar1.Value < ProgressBar1.Max Then ProgressBar1.Value = ProgressBar1.Value + 5 Else ProgressBar1.Visible = False „当进程条满了的时候让进程条消失 End If End Sub 2(滑块 Slider 控件是包含滑块和可选择性刻度标记的窗口,在窗体上画出滑块控件,右击,选择属性,然后进行下列设置: (1)选择滑块的外观 1)方向属性决定滑块的方位,可以是垂直的或水平的滑块。 2)滑块样式属性决定滑块标记的样子。 3)滑块频率属性规定了沿着滑块的标记的间隔大小,缺省的状态是1,表明每个可能值都出现标记,如果把值设置为3,则每三个可能值出现一个标记。 (2)滑块的主要属性及事件 1)Min,Max属性 Min属性决定滑块最左端或最顶端所代表的值。Max属性决定滑块最右端或最下端所代表的值。 2)LargeChange,SmallChange属性 SmallChange决定在滑块两端的箭头钮上单击时改变的值。LargeChange决定在滑块上方或下方区域单击时改变的值。 3)Value属性 Value属性代表当前滑块所处位置的值,这个值由滑块的相对位置决定。 4)Change事件 当滑块位置发生变化时就引发了Change事件。 8.5排列显示(ListView)控件和分层显示(TreeView)控件 1(ListView 控件 象“资源管理器”的右侧一样,可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一: 大(标准)图标 、 小图标 、 列表 、 报表 View 属性决定在列表中控件使用何种视图显示项目。还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示。另外,还可管理列表中项目的排序方法和选定项目的外观。 ListView 控件包括 ListItem 和 ColumnHeader 对象。ListItem 对象定义 ListView 控件中项目的各种特性,如: 项目的简要描述、由 ImageList 控件提供的与项目一起出现的图标、附加的文本片段,称作子项目,它们与显示在报表视图中的 ListItem 对象关联。 可以使用 HideColumnHeaders 属性决定是否在 ListView 控件中显示列标头。列标头可以在设计时添加,也可以在运行时添加。设计时,使用 ListView“控件属性”对话框的“列首”选项卡添加列标头。运行时,使用 Add 方法添加 ColumnHeader 对象到 ColumnHeaders 集合中。 2(TreeView 控件 该控件象“资源管理器”的左侧一样,用于显示结点( Node) 对象的分层列表,每个 Node 对象均由一个标签和一个可选的位图组成。TreeView 一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。 创建了 TreeView 控件之后,可以通过设置属性与调用方法对各 Node 对象进行操作,这些操作包括添加、删除、对齐和其它操作。可以编程展开与折回 Node 对象来显示或隐藏所有子节点。 TreeView 控件使用由 ImageList 属性指定的 ImageList 控件,来存储显示于 Node 对象的位图和图标。任何时刻,TreeView 控件只能使用一个 ImageList。这意味着,当 TreeView 控件的 Style 属性被设置成显示图像的样式时,TreeView 控件中每一项的旁边都有一个同样大小的图像。 8.6多媒体控件 1. 多媒体控件 Multimedia MCI 控件管理媒体控制接口 (MCI) 设备上的多媒体文件的记录与回放。从概念上说,这种控件就是一组按钮,它被用来向诸如声卡、MIDI 序列发生器、CD-ROM 驱 动器、视频 CD 播放器和视频磁带记录器及播放器等设备发出 MCI 命令。MCI 控件还支持 Windows (*.avi) 视频文件的回放。 在允许用户从 Multimedia MCI 控件选取按钮之前,应用程序必须先将 MCI 设备打开,并在 Multimedia MCI 控件上启用适当的按钮。在 Visual Basic 中,应将 MCI Open 命令放到 Form_Load 事件中。 2(媒体播放器控件 可以播放各种多媒体文件,主要属性有: (1) filename(待播放的文件名),可以在属性窗口中设置,也可以用代码实现。 (2) AutoStart(是否自动播放),默认是True。 (3) AutoRewind(是否自动循环),默认是False。 (4) PlayCount(文件播放遍数),默认是1。 8.7图象列表(ImageList)和图象组合框(ImageCombo) 1(图象列表 ImageList 控件是包含 ListImage 对象的集合,该集合中的每个对象都可以通过其索引或关键字被引用。ImageList 控件不能独立使用,只是作为一个便于向其它控件提供图象的资料中心。 ImageList 控件的作用象图像的储藏室,同时,它需要第二个控件显示所储存的图像。第二个控件可以是任何能显示图像 Picture 对象的控件,也可以是特别设计的、用于绑定 ImageList 控件的 Windows 通用控件之一。这些控件包括ListView、ToolBar、TabStrip、Header、ImageCombo、和 TreeView 控件。为了与这些控件一同使用 ImageList,必须通过一个适当的属性将特定的 ImageList控件绑定到第二个控件。对于 ListView 控件,必须设置其 Icons 和 SmallIcons 属性为 ImageList 控件。对于 TreeView、TabStrip、ImageCombo、和 Toolbar 控件,必须设置 ImageList 属性为 ImageList 控件。 一旦 ImageList 与某个 Windows 通用控件相关联,就可以在过程中用 Index 属性或 Key 属性的值来引用 ListImage 对象。 当与 Windows 通用控件一起使用 ImageList 控件时,在将它绑定到第二个控件之前,按照希望的顺序将全部需要的图像插入到 ImageList。一旦 ImageList 被绑定到第二个控件 ,就不能再删除图像了,并且也不能将图像插入到 ListImages 集合中间。但是可以在集合的末尾添加图像。 2(图象组合框 ImageCombo 控件是标准 Windows 组合框的允许绘图版本。控件列表部分中的每一项都可以有一幅指定的图片。它可以显示一个包含图片的项目列表,每一项可以有自己的图片,也可以对多个列表项使用相同的图片。 除了支持图片之外, ImageCombo 还提供了一个对象和基于集合的列表控件。控件列表部分的每一项是一个不同的 ComboItem 对象,而且列表中的所有项组合起来构成 ComboItems 集合。这就使它容易一项一项地指定诸如标记文本、ToolTip文本、关键字值以及缩进等级等属性。 8.8通用对话框控件 Windows应用程序里的Open对话框,Save As对话框在各个应用程序里看起来都是一样的,通用对话框控件就可以提供这些对话框的标准功能。 1(Open对话框及Save As对话框 打开Open对话框使用ShowOpen方法,打开Save As对话框使用ShowSave方法。 Private Sub mnuOpen_Click () On Error GoTo ErrorHandler CommonDialog1.CancelError = True CommonDialog1.Filter = "Text Files (*.txt)|*.txt|Batch Files (*.bat)|*.bat|All Files (*.*)|*.*" CommonDialog1.ShowOpen ' 显示打开对话框 Call OpenFile(CommonDialog1.FileName) ErrorHandler: Exit Sub End Sub 其中第三行决定了在文件格式类型栏里出现的文件类型。第五行需要一个自己的打开文件的过程,这个过程需要的参数就是通用对话框返回的文件名。通用对话框的CancelError属性设为True的话,用户单击Cancel按钮将产生一个错误信息程序,凭借这个信息程序可以检测到用户的放弃操作。 2(Color对话框 下面的过程可用用户选择的颜色作为窗体的底色。 Private Sub mnuColor_Click () On Error GoTo CancelButton CommonDialog1.CancelError = True CommonDialog1.ShowColor Form1.BackColor = CommonDialog1.Color CancelButton: Exit Sub End Sub 3(Fonts对话框 下面的过程可用字体对话框改变文本框的字体: Private Sub mnuFonts_Click () On Error GoTo CancelButton CommonDialog1.CancelError = True CommonDialog1.Flags = cdlCFBoth ' Flags property must be set to cdlCFBoth CommonDialog1.ShowFont ' Display Font common dialog box. Text1.FontName = CommonDialog1.FontName Text1.FontSize = CommonDialog1.FontSize Text1.FontBold = CommonDialog1.FontBold Text1.FontItalic = CommonDialog1.FontItalic Text1.FontUnderline = CommonDialog1.FontUnderline Text1.FontStrikethru = CommonDialog1.FontStrikethru Text1.ForeColor = CommonDialog1.Color CancelButton: Exit Sub End Sub 代码的第三行出现了通用对话框的Flags属性决定了通用对话框的一些可选项,不过即使不赋值给Flags,代码也一样会按缺省的情况去执行的。 9.1数据库的基础知识 1(计算机数据管理技术的发展 第一阶段:人工管理阶段,特点是数据不长期保存,没有软件系统对数据进行管理,没有文件的概念,一组数据对应一个程序。 第二阶段:采用文件管理方式,特点是数据不再是程序的组成部分,而是有组织、有结构地构成文件形式,形成数据文件;文件管理系统是应用程序与数据文件的接口。 第三阶段:数据库管理方式,特点是对所有数据实行统一、集中、独立的管理,数据独立于程序存在,并可以提供给各类不同用户使用。 2(数据库的基本概念 (1) 数据库(DataBase DB) 定义:是以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。 特点: 具有最小的冗余度 具有数据独立性 实现数据共享 安全可靠,保密性能好 (2) 数据库管理系统(DataBase Management System DBMS) 定义:是操纵和管理数据库的系统软件。 功能:维护数据库、接收和完成用户程序或命令提出的访问数据库的各种请求。 数据语言:数据定义语言(DDL): 用来建立所需的数据库(即设计库结构) 数据操作语言(DML): 用来对数据库进行查询和维护操作。 数据控制语言(DCL): 用来控制数据的访问权限及事务管理。 关系型数据库使用的标准语言是结构化查询语言(Structured Query Language, SQL)。 (3) 数据库系统(DataBase System DBS) 定义; 以数据库应用为基础的计算机系统。 组成:一个完整的数据库系统由数据库、数据库管理系统、数据库管理员和应用程序组成。 数据库也可以这样划分其组成: 硬件:计算机硬件设备 软件:数据库管理系统 、操作系统、开发工具、应用程序 用户:应用程序设计员、终端用户、数据库管理员 类 层次型数据库 网状型数据库 网状型数据库 分代 第一代 非关系型数据库系统,60年代末问世,包括层次型和网状型 第二代 关系型数据库系统(RDBS),70年代中期问世 第三代 对象-关系数据库系统(ORDBS 、OOBDS),80年代中期至今 上述三个概念之间的联系:在数据库系统中通过数据库管理系统来建立和使用数据库。 3(数据模型 数据模型:即描述实体模型的数据。 数据模型的分类: 层次模型(采用树型结构) 网络模型(采用无向图型结构) 关系模型(采用二维表结构) 关系模型的性质: 二维表的记录数随数据的增加而改变,但其字段数是相对固定的 二维表中的每一列均有唯一的字段名 二维表中不允许出现完全相同的两行 二维表中行的顺序、列的顺序均可以任意交换 4( 关系型数据库的基本结构 关系型数据库的基本结构是一张二维表,包括以下概念: (1) 记录(Record):数据表中的每一行数据 (2) 字段(Field):数据表中的每一列,表头(第一行)的内容为字段名 (3) 数据表(Table):相关数据组成的二维表格 (4) 数据库(Database):相关数据表的集合 (5) 关系(Relation):相关表之间通过相关联的字段建立的联系。 (6) 索引(Index):指按表文件中某个关键字段或表达式建立记录的逻辑顺序。它是由一系列记录号组成的一个列表,目的是提供对数据的快速访问。索引不改变表中记录的物理顺序。 索引关键字(索引表达式):用来建立索引的一个字段或字段表达式。 数据库和数据表可以通过数据库管理系统软件来建立,如:Access,Visual FoxPro,SQL Server 、Sybase、 Oracle。在VB环境下可以直接建立Access数据库。 关系型数据表的特点: (1)每一个字段不可再分解,也不能有名字相同的字段; (2)每一列中的数据都有相同的数据类型; (3)表中没有内容完全相同的行(记录)。 5(查询的概念 查询(query):从相关数据表中选取符合特定要求的数据。 创建方法:可以通过查询生成器创建一个查询,也可以在SQL窗口直接用SELECT—SQL命令写出查询。 9.2数据库管理器 1(数据库管理器介绍 在VB中可以通过“外接程序”菜单中的“可视化数据管理器”调出“VisData”数据库管理器窗口。 2(建立数据库 数据库的基本操作: 创建数据表: 设计表名和表结构 输入记录 建立索引 数据维护: 增加记录 修改记录 删除记录 创建数据表的主要步骤: 设计表结构 ? 输入记录 ? 建立索引 ? 数据维护 (1)设计表结构 启动可视化数据管理器 ? 在database窗口中右击,从菜单中选择“新表” ? 在表结构窗口中输入表名? 添加字段 ? 确定字段名称和属性、有效性规则 ? 建立索引 ?生成表结构。 “添加字段”对话框各选项说明 (2)输入记录 在database窗口中选中表名并右击,从菜单中选择“打开” ?在数据表窗口输入记录(注意窗口样式)? 单击“新增”? 在窗口中输入记录并“更新” ?重复…… (3)维护记录 在database窗口中选中表名并右击,从菜单中选择“打开” ?单击“编辑”/“删除”/“新增”,即可完成对记录的修改、删除、添加操作。 3(建立查询 建立查询就是在数据表中找到符合特定条件的记录并组成一张新表。 在database窗口中选中表名并右击,从菜单中选择“新查询” ?在查询生成器中构造查询条件?单击“运行” ?单击“保存”,给出查询结果文件名?“关闭”。 查询生成器说明 9.3数据控件 1. 数据控件的建立 从VB工具箱中单击Data控件,在窗体上画出数据控件即可。 2. 数据控件的属性 绑定控件、数据控件、数据库之间的关系: 绑定控件的属性: DataSource——通过一个有效的数据控件连接到一个数据库上。 DataField——将数据库中的有效字段连接到绑定控件上。 除了常规控件外,可以与Data数据控件绑定的控件有: 3( 数据控件的事件 Validate事迹的 Action参数 4( 数据控件的常用方法 5( 记录集的属性与方法 6( 利用数据控件对数据库进行增、删、改操作 9.4ADO数据控件 1( 什么是ADO, ADO(ActiveX Data Object)数据访问接口是微软处理数据库信息的最新技术,它是一种ActiveX对象,采用了OLE DB(动态连接与嵌入数据库)的数据访问模式,是数据访问对象DAO、远程数据对象RDO和开放式数据库互连ODBC三种方式的扩展。 要使用ADO对象必需先为当前工程引用ADO对象库,方法是: 执行“工程”菜单中的“引用”命令,在对话框中选中“Microsoft ActiveX Data Object 2.0 Library”。 ADO对象描述 2(使用ADO数据控件 (1) 添加ADO数据控件 从“工程”菜单中选择“部件”命令,在对话框中选中“Microsoft ADO Data ControlS 6.0(OLE DB)”,将其添加到工具箱,并在窗体上拖划出ADO数据控件。 (2) ADO数据控件的基本属性 (3) ADO数据控件的属性设置 1)先在窗体上放置一个ADO数据控件 2)在ADO属性窗口中单击ConnectionString属性右边的…按钮,从对话框中选择连接数据源的方式: 使用连接字符串——单击“生成”按钮,通过选项设置系统自动产生连接字符串 使用Data Link文件——通过一个连接文件来完成 使用ODBC数据资源名称——在下拉列表中选择某个创建好的数据源名称作为数据来源对远程数据库进行控制。 3)在ADO属性窗口中单击RecordSource属性右边的…按钮,在“命令类型”中选择2——adCmdTable,在“表或存储过程名称”中选择所需要的表。 以上2)、3)可以合并成一步:在ADO控件上单击右键,从快捷菜单中选择ADODC属性,直接在属性页对话框中进行所有设置。 (4) ADO数据控件的方法和事件 与Data数据控件完全相同。 (5) 在ADO上新增绑定控件 可以从“工程”的“部件”中添加如下绑定控件: 3( 使用数据窗体向导 从“外接程序”菜单中选择“外接程序管理器”,在对话框中选中VB6数据窗体向导,“加载”并“确定”,再从“外接程序”菜单中选择“数据窗体向导”,然后根据系统提示逐步操作即可创建所需要的数据窗体,系统自动把所创建的窗体加到工程中。 9.5结构化查询语言 1(SQL的基本组成 SQL语言由命令、子句、运算、函数等组成: (1) SQL命令 (2) SQL子句 (3) SQL运算符 (4) SQL函数 2( SQL语句的应用 9.6报表制作 1.报表的概念 利用报表可以把数据表中的数据按一定的格式输出到屏幕上或打印到纸上。 2.制作报表的方法 在VB6.0中可以利用报表设计器来制作报表,从“工程”中选择“添加data report”,将报表设计器加入到当前工程中,报表由5部分组成: 报表标头——每份报表只有一个,可以用标签建立报表名。 页标头——每页有一个,即每页的表头,如字段名。 细节——需要输出的具体数据,一行一条记录。 页脚注——每页有一个,如页码。 报表脚注——每份报表只有一个,可以用标签建立对本报表的注释、说明。 使用报表设计器处理的数据需要利用数据环境设计器创建与数据库的连接, 从“工程”菜单中选择 “添加Data Enviroment”,在连接中选择指定的数据库文件,完成与数据库的连接,然后产生Command对象连接数据库内的表。 制作报表的步骤: (1) 新建工程,在窗体上放置两个命令按钮; (2) 从“工程”菜单中“添加Data Enviroment”,右击Connection1,在属性中选择“Microsoft Jet 4 OLE DB Provider”,在“连接”中指定数据库; (3) 再次右击Connection1,选则“添加命令”,创建Command1对象,右击Command1,在属性中设置该对象连接的数据源为需要打印的数据表; (4) 在从“工程”菜单中“添加Data Report”,在属性窗口中设置DataSource为数据环境DataEnviroment1对象,DataMember为Command1对象,即指定数据报表设计器DataReport1的数据来源; (5) 将数据环境设计器中Command1对象内的字段拖到数据报表设计器的细节区; (6) 利用标签控件在报表标头区插入报表名,在页标头区设置报表每一页顶部的标题; (7) 利用线条控件在报表内加入直线,利用图形控件和形状控件加入图案或图形; (8) 利用DataReport1对象的Show方法显示报表,在窗体Click事件加代码:DataReport1.Show; (9) 利用预览窗口按打印按钮可以打印报表; (10) 利用预览窗口工具栏上的导出按钮可以将报表内容输出成文本文件或Html文件;也可以利用DataReport1对象的ExportReport方法将报表内容输出成文本文件或Html文件。 制作报表的简单方法是从“外接程序”中选择报表向导来设计报表。 VB 目 录 (提示:按ctrl,并单击鼠标,可以跳到相应页) 1.1 1 我们需要什么 ................................................................................................................ 3 1.2 2 第二章:事件、属性及数据类型 .......................................................................... 3 1.3 3 第三章:VB语言 ................................................................................................... 6 -1第四章 按钮(一) ...........................................................................................12 1.4 4 1.5 4- 第四章 按钮(二) .......................................................................................... 199 1.6 5 第五章 菜单 ............................................................................................................... 27 1.7 6-1第六章 输入(一) ................................................................................................... 34 1.8 6-2第六章 输入(二) ................................................................................................... 42 1.9 6-3第六章 输入(三) ................................................................................................... 52 1.10 7第七章 输出 ................................................................................................................ 59 附录 ........................................................................................................................................... 63 2.1 VB教程 ............................................................................................................................... 63 1 1.1 1 我们需要什么 我们需要什么,当我们在一个精彩的游戏世界中游历了一番之后,或是惊叹于某一工具软件的小巧精致之余,多少总会产生些许编程的冲动。编程吗,在以前如果你对电脑还是一个门外汉,那实在是一件可望而不可及的事情。如果运用基于DOS下的编程语言,譬如C、Qbasic、Pascal等等,真不知何年何月才能有所成就。 编程是需要天赋的,你必须在大脑中对整个程序有一个清晰的轮廓,一个高效的流程,这并不是每个人都能做到的,你必须思之慎之,这也使编程变成一件最枯燥无味的事情。但在第四代计算机语言(可视化编程)出现后,可以确切的说它开发了人们的更多天赋,并不局限于那些头脑异常清晰的人,每一个人都可以发现自己也可以编出一些从前不敢问津的程序,想象力的充分发挥才是第四代语言的精粹。 Visual Basic(以下简称VB)可以说是可视化语言的先驱了,而且它也是可视化程度最高的一个,从几年前VB诞生之日起到现在,它已经经历了五个版本,而且现在微软正在紧张的进行着VB6.0的研制、测试,这么高的更新率,不外乎说明两个问题:用户对VB的热衷,微软对VB的重视。不可否认微软对市场的预测能力是极为高明的,而它强大的技术、财力支持也使它在许多以前未进入的领域,在不长的时间内有成为最有力的竞争对手,如IE之于浏览器领域,《帝国时代》之于游戏都是最好的例证。对于VB现在也有一个很强的竞争对手――Delphi,有人把它称作VB杀手,这显然有偏激之处,VB的确有它的不足之处,但Delphi又何尝不是呢,而且以微软对VB的倾心,VB的功能必然会越来越强大。 VB的诞生 VB的出现可以说是Microsoft Windows的日渐成熟的必然产物。Microsoft Windows为程序员和最终用户提供了一个共同的人机界面。对用户,Windows提供了一个图形鼠标的操作环境,该环境对所有的应用程序都一样;对于程序员,Windows提供了一组预定义工具----称之为Microsoft Windows 的软件开发工具箱(SDK),该工具能使程序员建立一个与Windows界面相同的应用程序,而且,程序员不必关心最终用户的硬件配置情况。在这一开发环境中,程序员唯一困难的是Microsoft SDK提供了六百多个函数和与其一致的事件驱动(event-driven)编程技术。两种新方法的交叉使众多的程序员重新陷入困境,程序员不仅要掌握程序驱动编程技术和六百多个函数的功能,而且还得用C语言描述这些问题。因此一般情况下,程序员首先要掌握C程序设计技术,而后再开始学习SDK。这样的条件下就要求在Microsoft多任务环境下出现一种操作方便,使用简单的新工具,,,,Visual Basic由此诞生。 何为可视 英文Visual的意思是“视觉的”,“可视的Baisc”这个名字可能抽象了点,但实际上它却是最直观的编程方法,之所以叫做“可视”,你只要看到VB的界面就会明白,实际上你无需编程,就可以完成许多步骤。在VB中引入了控件的概念,在Windows中控件的身影无处不在,各种各样的按钮、文本框、无线钮,都是控件的种类,VB把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法。这样你就可以象在画板上一样,随意点几下鼠标,一个按钮就完成了,这些在以前的编程语言下是要经过相当复杂的工作的。 2 1.2 2 第二章:事件、属性及数据类型 以后两章可能会比较枯燥,但不可否认也很重要,所以为了学好VB,我们一定要打好基础才行。 一、事件 通过上一章的例子,你可能对“面向对象的编程”已经有了一定了解,它是由事件驱动的,对于不同的对象,所能感应到的事件也会不同,譬如说当你把鼠标移进某一区域时就会触发MouseMove事件,这很直观,也容易理解,但也有些事件比较抽象,下面我来对一般的事件进行一下解释。 1. 窗体和图象框类事件 , Paint事件:当某一对象在屏幕中被移动,改变尺寸或清除后,程序会自动调用Paint事件。注意: AutoDraw属性为True(,1)时,程序不会调用Paint事件。 当对象的 , Resize事件:当对象的大小改变时触发Resize事件。 , Load事件:仅适用于窗体对象,当窗体被装载时运行。 , Unload事件:仅适用于窗体对象,当窗体被卸载时运行。 2.当前光标(Focus)事件 , GotFocus事件:当光标聚焦于该对象时发生事件。 , LostFocus事件:当光标离开该对象时发生事件。 注意:Focus英文为“焦点”、“聚焦”之意,最直观的例子是,比如有两个窗体,互相有一部分遮盖,当你点下面的窗体时,它就会全部显示出来,这时它处在被激活的状态,并且标题条变成蓝色,这就是GotFocus事件,而相反,另外一 个窗体被遮盖,并且标题条变灰,称为LostFocus事件。上面所说的“光标”并 非指鼠标指针。 3.鼠标操作事件 , Click事件:鼠标单击对象。 , DbClick事件:鼠标双击事件。 , MouseDown、MouseUp属性:按下/放开鼠标键事件。 , MouseMove事件:鼠标移动事件。 , DragDrop事件:拖放事件,相当于MouseDown、MouseMove和MouseUp的组合。 , DragOver事件:鼠标在拖放过程中就会产生DragOver事件。 4.键盘操作属性 , KeyDown、KeyUp事件:按键的按下/放开事件。 3 , KeyPress事件:按键事件。 5.改变控制项事件 , Change事件:当对象的内容发生改变时,触发Change事件。最典型的例子是文本框(TextBox)。 , DropDown事件:下弹事件,仅用于组合框(ComboBox)对象。 , PathChange事件:路径改变事件,仅用于文件列表框(FileBox)对象。 6.其他事件 , Timer事件:仅用于计时器,每隔一段时间被触发一次。 二、属性 每个对象都有它的属性,并且“Name”属性是共有的,有了“Name”属性才可以在程序中进行调用。对于属性,可以在窗体的布局操作中完成,也可以在程序运行中改变,这取决你的需要,但有些属性是只读的,它只能在控件布局时改变。我将在以后的实例中具体介绍各个属性的作用。 三、数据类型 学过编程的人都知道大多数的计算机语言都规定了各自的数据类型,VB也不例外。其实,在一个最简单的程序中数据类型是可以不作规定的,也就是说,变量可以使用各种类型,但是在一个复杂的程序里,这样做就很危险,因为很可能给同一个变量赋予了不同的类型,而导致程序出错。所以,为了程序的严谨和便于查看,正确的定义数据类型是必要的。定义数据的另一个原因是,不同的数据占用不同的内存数量,譬如整型(Interger)数据占2字节,而长整型数据占4个字节,定义合适的数据类型,不管你相信不相信,它可以节省内存~ 1. VB常用的数据类型有:整型(Integer,表示-32768至32767之间的整数)、长整型(Long,表示 -2,147,483,648至2,147,483,647之间的整数)、实型(Single,表示-3.37E+38至3.37E+38之间的实 数)、双精度实型(Double,表示-1.67E+308至1.67E+308之间的实数),字符(String,每个字符占 一字节,可以储存0,65,535个字符),布尔(Boolean,只有两个值True/-1,或False/0)。 2. 数据类型的定义方法: , 定义变量最简单的方法是用“Dim”关键字,它的语法: Dim 【变量名】As 【数据类型】 如: Dim Index As Integer 也可以在一行中定义多个变量,如: Dim Index As Integer , Dim Number As Long 把多个变量定义成同一类型可以写成: Dim Index , Number As Integer 4 更可以在定义时进行初赋值: Dim Index= 有时为了简便,也以符号进行简单的定义,作用是和上面一样的。整型可以用“%”代替,长整型可以用“&”代替,实型可以用“”,双精度实型可以用“#”定义,如刚才的第一个例子可以写成: ! Dim Index% 等价于 Dim Index As Integer , 对于常量的定义用Const定义,如:Const COLOR=。 为了在程序中便于查阅,我们对变量和常量的写法进行规定,变量一般用小写方式,常量则全部大写。 注意:使用常量的好处,对于程序中经常出现的数值,应设常量等于它,这样一是书写方便,其 二,如果要改变该数值,只需改变定义常量的语句值,而不需改变每个语句,提高了效率。 , 数组的定义类似于变量定义,所不同的是数组需要指定数组中的元素个数,例如: Dim IntegerArray(99) As Integer 这个数组中包含100个元素,脚标从0到99。 也可以指定脚标的起始值,例如: Dim IntegerArray(2 to 10) As Integer 这个数组含有九个元素,脚标从2到10。 还可以定义多维数组: Dim ThreeD(4,2 to 5,3 to 6) As Integer 上例定义了一个三维数组(4×4×4)。 , 记录的定义 记录定义是把控制权交给用户的方法,它让用户可以定义自己的数据类型,它使用关键字“Type”,方法是: Type 【数据类型标识符】 <域名> As <数据类型> 域名> As <数据类型> < 域名> As <数据类型> < „„„„„„„„„„ 5 End Type 例如,定义一个地址数据: Type Address Street As String ZipCode As String Phone As String End Type 这个地址数据里包括三个属性,街区、邮政编码和电话,可以把某数据定义成此类型: Dim MyHome As Address 要调用或改变“MyHome”的值时,类似于对对象的属性的操作: 变量名.域名,“„„” 为了简化书写重复的部分,可以用关键字“With”: With MyHome .Street=阜成路” .ZipCode= .Phone= End With 1.3 3 第三章:VB语言 本章提要: , VB语法与Basic的异同 , 注释语句 , 长语句的分行 , 条件语句 , 循环语句 , 运算操作 , 数据定义与赋值 , 函数和过程 6 一、VB与Basic , VB之所以叫做“Visual Basic”就是因为它使用了Basic语言作为代码,所以它们之间有着千丝万缕 的关系,如果学过Basic的话,看到VB的程序结构会感到很亲切。但VB作为新生物,也超越了 Basic的限制,有了许多自己的特点: , VB建立了一种新的变量类型――货币型变量,通过使用仅带有二位小数的货币变量,就能避免因 使用实型变量而带来的数值积累误差问题。 , VB在调用函数(Function)时,必须在函数名后跟一对括号。 , VB对白兰地使用范围重新做了规范,在Basic里把隐含变量都当作全局变量,而在VB里对隐含变 量都当作局部变量。 , VB里的说明语句(Declare),仅支持动态链结库(DLL)的子程序和无变量函数。 , 使用数组,必须事先用Dim或Redim进行定义。 二、注释语句 在使用注释语句之前必须先了解注释的作用,注释不仅仅是对程序的解释,有时它对于程序的调试 也非常有用,譬如说可以利用注释屏蔽一条语句以观察变化,发现问题和错误。以后注释语句将是 我们在编程里最经常用到的语句之一。 在VB里,注释语句有两种,一种是用“Rem”关键字,这跟DOS里的批处理文件的用法一样,还有 一种是利用单引号“’”,例如: ‘Dim a As String 与 Rem Dim a As String 的作用是一致的。 三、长语句的分行 在比较早的版本中,因为没有象C等语言用“;”隔开语句与语句,VB的语句是必须写在一行里的, 不过后来版本的VB里如许用分行符“_”把一个长语句分成若干行来存放。 四、条件语句 如果你学过任何一种编程的话,都会知道在程序里控制其流程的有两种语句,条件与循环,VB自然也不例外,其实不管哪种语言,条件和循环的样子都差不多,只不过各有各的规矩罢了。 在条件语句里,我们先来学习“If„„Then„„”语句。 它的一般语法是: 7 If <条件> Then <语句> <语句> „„„ End If 与C 语言不同,VB的条件语句更符合英语的语法,如果Then后面所跟的语句只有一条,可以写成: If <条件> Then <语句> 而不用End If。 有时我们还会用到 If <条件> Then <语句> Else <语句> End If 更可以在Else里在嵌套If语句,如: If <条件> Then <语句> Else If <语句> Else <语句> End If 所有这些可以用一个表格表示: 条件1 True False 条件2 语 True False 8 条件3 句 语 True False 1 句 „„„„„„„„„ „ 2 条件N „ True False „ 语句N 语句N,1 用了过多的Else后你会感到很不方便,而且程序结构也不清晰,所以大多数的语言还有Select语句帮助解 决这个问题。 VB里的Select语句的格式是这样的: Select Case <变量名> Case <情况1> „„ Case <情况2> „„ Case <情况3> „„ „„ „„ Case Else „„ End Select 例如: Select Case a% Case 1 Print “a= Case 2 Print “a= Case Else Print “a does not equal to 1 or 2.” 9 End Select 五、循环语句 循环结构是计算机语言里一种重要的结构,它的应用广泛,最简单的例子是累加器的作用,还可以用于穷举 法,更直观的例子是把某件事重复指定的次数,这样就不用把要重复的语句输入多次,而通过循环结构完成, 非常方便。 C语言里有一个“for”循环语句,VB里也有“For”关键字,作用也差不多,只是VB的“For”语句更容易 理解。它的格式是: For <循环变量>=<初赋值> To <终值> [Step <步长>] „„ „„ Next <循环变量> 在默认情况下,Step被设为“1”,可以省略,Step也可以设为负值,例如: Dim a= For I=1 To 10 a= Next I 这是一个最简单的累加器的例子,把1到10累加在一起,然后赋值给“a”这样的效果和上面是一样的,只 不过是倒着加罢了,请看: Dim a= For I=10 To 1 Step –1 a= Next I While语句也是一个很常用的循环语句,它的形式很多。 , Do While „„ Loop语句 , While „„ Wend 语句 , Do „„ Loop While 10 While后面都跟逻辑条件判断,“Do While „„ Loop语句”和“While „„ Wend 语句”作用相似,都是先判断While后面的条件是否为“真”,如果为“真”则执行里面的语句,如果为“假”,则退出循环,循 Loop While ”与前两者的区别在于,它不管条件的真假,都会先执行环直至条件为“假”终止。“Do „„ “Do”后面的语句,也就是说,它至少执行语句一次。 与While用法相似的还有Until语句,它是直至条件为真则终止循环,句式把While上述三个语句的While换成Until即可,但是因为容易记混,所以我建议只用While即可。Until <条件>可以相当于While Not <条件>。 For循环和Whlie循环应当根据适当的环境使用,它们有时也可替换。 六、运算操作 1. 数学运算 , ,:加法运算,也适合于字符串的之间的合并运算。 , ,:加法运算。 , *:乘法运算。 , /:除法运算。 , \:整除运算。 , Mod:求余运算。例如:a Mod b表示a被b整除以后的余数。 , ^:幂运算。A^B表示以A为底的B次方。 1. 关系运算 关系运算也称比较运算,它表示不等式的真或假,VB共提供六种运算符,分别是= 2. 逻辑运算 逻辑运算是对真或假的运算,我将列表说明: A B Not A And Or Xor Eqv Imp 非 与 或 异或 相等 蕴含 T T F T T F T T T F F F T T F F F T T F T T F T F F T F F F T T 11 T――True F――False 七、 数据与定义 本标题的内容已经在上一章向大家详述过,在这里就不再重复。 八、函数与过程 函数与过程有许多相似的地方,它们之间最大也是最本质的区别就在于,函数有一个返回值,而过程只是执行一系列动作,所以可以简单的把函数理解成为一个变量,而VB中的每个事件都是一个过程,比如Command1_Click()就是一个过程。 因为在程序设计中经常会有重复的地方,所以把它做成一个函数或一个过程,在使用时进行调用,可以节省大量的输入代码的时间,而且使用函数和过程也便于程序的结构化和修改查看。函数和过程都可以有参数,也可以没有参数。 关于函数和过程将在以后的章中配合实例讲解,请您继续VB教程。 1.4 4-1 第四章 按钮(一) 从本章开始我们将正式进入VB的编程世界,但这还仅仅是个开端,要编出功能强大的软件,还要学很多东西,那就要看以后的VB高级教程了,我也得努力学啊~ 按钮是我们在Windows操作见到最多的控件,它们有着各种各样的功能:“确认”、“取消”、“下一步”等等,这些都是按钮的表现,另外还有很多图形话的按钮,其实它们并没什么不同,所有的按钮都是通过单击(click)事件实现的,只不过是在外表不同罢了。下面就让我们建立一个最简单的按钮,双击工具箱的CommandButton,将在窗体上建立一个形如图4,1的按钮,它的缺省名(Name属性)为Command1,我们可以把它改名为cmdExit,把Caption属性设为“退出”,然后双击,按钮填写代码: Private Sub cmdExit_Click() Unload Me End Sub 12 按下F5或者工具条上的播放按钮,运行程序。图4,2当你按下退出按钮的时候,就会自动退出程序,原因是当你单击按钮时激活了它的Click事件,执行“Unload Me”语句,使得窗体被卸载。 上面举了一个比较简单的例子,下面的例子稍微复杂些: 新建窗体,控件布局如图4,3所示,包括一个List控件,一个Text控件和两个按钮(Command1和Command2), (比较简单的程序我们都采用缺省名),对它们属性做如下修改: List1 Caption,“请输入你的名字” Text1 Text,“”(空字符串) Button1 Caption,“复原” Enabled,False Button2 Caption=“清除” 13 把使用Button1的Enabled属性设为False(假),是使程序在初始时,无法单击Command1。按F5,运行程序,图4,4,复原按钮成为灰色,不可选。 当然现在程序还什么也不能做,下面我们在程序中添加代码: 首先在General里声明全局变量: Dim StoreString As String '用来储存字符串 ※注意:为什么用全局变量, VB里每一个小过程都相当于一个程序,程序里的变量称为局部变量,是只能在程序内部使用的,而当程序调用结束后,由于从内存中被清除,所以变量储存的值也就消失了,这里的全局变量是用来在过程中传递字符串。 接着填写以下代码: Private Sub Command1_Click() Text1.Text = StoreString Command1.Enabled = False End Sub Private Sub Command2_Click() StoreString = Text1.Text Text1.Text = "" '清除 Command1.Enabled = True End Sub 14 运行程序,如图4,5。按下“清除”,文本框被清除,按下“复原”,文本有被恢复,许多程序中的Undo/Redo就是利用这个原理实现的,现在知道为什么内存越多越好了吧。 我们在把程序修改一下,把Button2删除,Button1的Enabled属性改为True,Caption改为“清除”,填写代码: Private Sub Command1_Click() If Command1.Caption = "清除" Then StoreString = Text1.Text Text1.Text = "" '清除 Command1.Caption = "复原" Else Text1.Text = StoreString Command1.Caption = "清除" End If End Sub 同样可以上面的功能,但是却少用了一个控件,控件使用少的程序启动会快些。 下面的例子要更加复杂些,大家一定都用过Windows附件中的计算器,它是一个标准的科学计算器,利用VB我们也可以做到,只是没有那么复杂,四则运算而已。 先建立一个新的项目文件,里面包含一个Form1的窗体。然后,添加控件,包括一个Text框(Text1),和17个按钮,这17个按钮使用的名称都是Command1, 15 只是Index属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建立一个按钮(Command1),然后在Command1上击鼠标右键,选择复制(Copy),然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组,选择“是”,重复上面步骤,直至创立17个按钮为止。各控件属性如下表: Text1 BackColor,&H00C0FFFF& Text,“0.” Command1 Index 0――16 Index 0――9 Caption= Index 10 Caption= Index 11Caption= Index 12 Caption= Index 13 Caption= Index 14 Caption= Index 15 Caption= Index 16 Caption=“清除” 如果想改变一些其他的属性,比如字体,可以自己定义一下Font属性,如果相对多个控件的共同属性进行改变,可以在窗体上按下鼠标,拖动,把多个控件一起选定,然后对它们的共同属性进行修改。 16 别看这个东西小,还费了近我两个小时呢,不觉大叹手生,里面也有些地方很绕弯子,我尽量解释清楚。 在编写程序之前,我们先来回顾一下计算器的使用。 1. 按下数字键在液晶屏上会出现数字,这是最基本的功能。 2. 第一次按下运算键,再按下数字键,将重新输入第二个数字,再次按下运算键,将算 出前两个数的结果,然后按下数字键,将又重新输入新的数字。 3. 输入数字后,按下“等于键”将仍输出原来的数字,输入运算符和第二个数字后在按下 “等于”,将得到二者的结果。然后又重复第二、三步。 4. 按下“清除”,数据被全部清除。 了解了这些,我们一步一步实现。 先实现数据的输入,请看代码。 与未创立组的控件相比,它的事件里多了Index参数,组里所有的对象都使用同一个事件。 先在General里声明窗体级全局变量: Dim Num1, Num2 As Single Dim StrNum1, StrNum2 As String Dim FirstNum As Boolean '判断是否是数字开头 因为Text1里是存放字符串的,所以要把输入的数据进行运算,必须把字符型变量转变为实型变量,分别用Num1、Num2和StrNum1、StrNum2进行存放。 在Form_Load事件里给变量初赋值: Num1 = 0 Num2 = 0 StrNum1 = "" StrNum2 = "" FirstNum = True 因为17个按钮使用的是同一事件,所以我们用一个Select Case语句区分各个按钮,双击任意按钮输入代码: Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 To 9 If FirstNum Then 17 StrNum1 = Str(Index)’实型转字符型 初赋值为假 FirstNum = False’ Else’非初赋值 StrNum1 = StrNum1 + Str(Index) End If Text1.Text = StrNum1’显示 <还有其他语句,等待插入> End Select End Sub 运行程序的话已经可以输入数据,下面我们来处理小数点。 在General里声明新的变量: Dim PointFlag As Boolean '判断是否已有小数点 我们知道小数点只能输入一次,一个数据中不能有多个小数点存在,所以需要一 个布尔变量做判断。 在Form_Load里进行初赋值: PointFlag = False 在Command的单击事件里接着上面输入新的代码: Case 10 If Not PointFlag Then’如果没有小数点 If FirstNum Then’如果是第一个字符 StrNum1 = "0." FirstNum = False Else StrNum1 = StrNum1 + "." End If 18 Else’已有小数点 Exit Sub’则退出单击事件 End If PointFlag = True Text1.Text = StrNum1 1.5 4-2 第四章 按钮(二) 下面会复杂一些,我们先跳过等号,而来处理四则运算: 先在General里声明新变量: Dim Runsign As Integer '储存运算符号 Dim SignFlag As Boolean '判断是否已有运算符号 然后在Form_Load中进行初赋值: Runsign = 0 SignFlag = False 在接下的Command1_Click中继续输入代码: Case 12 To 15 FirstNum = True’使下一次可以输入新数据 PointFlag = False '还原标记值 If SignFlag Then’前面已有运算符未运算 Call Run Else SignFlag = True StrNum2 = StrNum1’把字符串1复制给字符串2 StrNum1 = ""’字符串1清空 19 End If Runsign = Index - 11 ‘储存键入的运算符 里面运算的部分我用了一个过程,是因为在按下等号时还会调用到运算过程, 这样可以减少代码的输入,也使程序便于浏览。建立过程(Procedure),可以在 General部分直接输入,也可以通过菜单里的“Add Procedure”添加。Run的代 码如下: Sub Run() Num1 = Val(StrNum2) Num2 = Val(StrNum1) Select Case Runsign Case 1’加 equal = Num1 + Num2 Case 2’减 equal = Num1 - Num2 Case 3’乘 equal = Num1 * Num2 Case 4’除 equal = Num1 / Num2 End Select StrNum2 = Str(equal) StrNum1 = StrNum2 Text1.Text = StrNum2 End Sub 下面是其余的代码:(在Command1_Click事件里,接着写) Case 11 If Not SignFlag Then 20 Text1.Text = StrNum1 equal = Val(StrNum1) FirstNum = True PointFlag = False Else Call Run SignFlag = False End If Case Else’清除按钮 Call ClearData 里面又用到了一个ClearData过程,实际上就是Form_Load里的变量初赋值,代 码如下: Sub ClearData() Num1 = 0 Num2 = 0 StrNum1 = "" StrNum2 = "" FirstNum = True PointFlag = False Runsign = 0 SignFlag = False Text1.Text = "0." End Sub 21 这样完整的程序就完成了,本章介绍了VB的第一个控件――按钮,并且举例,希 菜单。 望你继续看下一章―― 下面给出完整的程序代码: Dim Num1, Num2 As Single Dim StrNum1, StrNum2 As String Dim FirstNum As Boolean '判断是否是数字开头 Dim PointFlag As Boolean '判断是否已有小数点 Dim Runsign As Integer '储存运算符号 Dim SignFlag As Boolean '判断是否已有运算符号 Sub ClearData() Num1 = 0 Num2 = 0 StrNum1 = "" StrNum2 = "" FirstNum = True 22 PointFlag = False Runsign = 0 SignFlag = False Text1.Text = "0." End Sub Sub Run() Num1 = Val(StrNum2) Num2 = Val(StrNum1) Select Case Runsign Case 1 equal = Num1 + Num2 Case 2 equal = Num1 - Num2 Case 3 equal = Num1 * Num2 Case 4 equal = Num1 / Num2 End Select StrNum2 = Str(equal) StrNum1 = StrNum2 Text1.Text = StrNum2 End Sub 23 Private Sub about_Click() MsgBox "Create by 周晓阳。1998/7/27", vbDefaultButton1, "VB教程第四章范 例" End Sub Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 To 9 If FirstNum Then StrNum1 = Str(Index) FirstNum = False Else StrNum1 = StrNum1 + Str(Index) End If Text1.Text = StrNum1 Case 10 If Not PointFlag Then If FirstNum Then StrNum1 = "0." FirstNum = False Else StrNum1 = StrNum1 + "." End If Else 24 Exit Sub End If PointFlag = True Text1.Text = StrNum1 Case 12 To 15 FirstNum = True PointFlag = False '还原标记值 If SignFlag Then Call Run Else SignFlag = True StrNum2 = StrNum1 StrNum1 = "" End If Runsign = Index - 11 Case 11 If Not SignFlag Then Text1.Text = StrNum1 equal = Val(StrNum1) FirstNum = True PointFlag = False Else Call Run 25 SignFlag = False End If Case Else Call ClearData End Select End Sub Private Sub Form_Load() Call ClearData End Sub 补充说明 按钮还有两个重要的属性Default(默认属性)和Cancel(取消属性),两个属性都以布尔赋值,把Default设为True,则在按下回车键时,不论焦点处于何处,都会触发该按钮的Click事件,而当Cancel属性被设为True,在按下ESC键时,该按钮的Click属性发生。下面举个例子: 建立一个新窗体和两个按钮,Name属性分别为cmdOK和cmdCancel,把前者的Default设为True,后者的Cancel设为True,Caption属性分别为OK和Cancel。如图4,8。填写代码后运行: 26 Private Sub cmdCancel_Click() MsgBox "Cancel按钮被按下", vbDefaultButton1, "提示" End Sub Private Sub cmdOK_Click() MsgBox "OK按钮被按下", vbDefaultButton1, "提示" End Sub 结果如图4,9、4,10: 快捷键大家一定都知道,在VB如何实现呢。其实很简单,在刚才的例子里在建立一个按钮Command1,把它 11,在M的下面有一条下划线,运行程序,当你按下Alt+M的时候的Caption属性设为Click &ME,如图4, 就触发了Command1_Click事件: Private Sub Command1_Click() MsgBox "Click ME 按钮被按下", vbDefaultButton1, "提示" End Sub 据我所知,有许多用户有使用快捷键的习惯,注意细节上的问题能够使将来你的程序得到更多人的欣赏,不 是吗, 1.6 5 第五章 菜单 我们经常在Windows操作里遇到各种各样的菜单,菜单的操作把各种命令结构化、分分类化,也节省了 命令所占的空间,从作用上来讲,菜单类似于按钮,但它只有一个事件――Click。 27 VB作为Windows下的可视编程工具,菜单的设计当然很容易实现,VB3.0按下Ctrl+M,VB4.0以上的版 本请按下Ctrl+E,便可呼叫出菜设计的窗口,无论VB的版本,这个窗口的样式是大同小异的,请见图5,1。 前面说过,菜单相当于简单的按钮,它有几个属性,其中的大部分我们都曾经见过,包括Name、Caption、Index、Checked、Enabled、Visible、快捷键和热键等等。其中Name是必须的。下面请跟我一起设计第一个菜单。 首先在Caption添入“文件”,Name为“mnuFile”,按下Next按钮,这样就建立了第一级菜单,注意菜单设计窗口的左中有四个箭头,按下向右的箭头,出现了一排小点,如图5,2,在VB里这叫缩排,这样就可以开始建立第二级菜单。 28 小知识:实际上我们在生活就中经常用到缩排,写文章时开头要空两格就是一种缩排,在编写程 序时更需要缩排,这样使程序结构化,便于观察,当然菜单设计里的缩排有更多的用处。接着填写下一菜单项,Caption为“新文件”,Name为“mnuFileNew”,按下Next键。 小知识:VB一共如许建立6级子菜单,如图5,3,尽量不要建立这样的菜单,要知道藏在越深处的菜单项越 难以被人发现,一个友好的程序界面应该让用户马上找到需要的命令。 29 接着重复以上步骤,创建以下三个菜单项: Caption 保存 Name mnuFileSave Level 1 Caption 另存为 Name mnuFileSaveAs Level 1 Caption 载入 Name mnuFileLoad Level 1 30 我们在菜单里还经常看到把不同项分开的分隔条,在VB里也很容易做到,把Caption设为“-”(减号),Name为mnuBar1。最后增加这个菜单条的最后一项,Caption为“退出”,Name为mnuFileExit。现在可以 退出菜单设计窗口,菜单如图5,4。 怎么样,经过几章的学习,是不是觉得Windows世界也不是那么神秘,也对,也不对。的确,我们很轻易的实现了这么多的功能,但如果你仔细想想,我们的程序还什么也不会做呢~可以说是徒有其表,要实现强大的功能,恐怕要学很长很长时间,而现在仅仅是个开头,并不是想入非非的时候,我们还要继续努力~ 现在再次按下Ctrl+E,重回菜单设计窗口,接着添加菜单。(按下向左的箭头,可以使菜单上升一级,Level代表菜单的级别),根据下表添加新的菜单项: Caption 编辑 Name mnuEdit Level 0 Caption 剪切 Name mnuEditCut Level 1 Short-Cut Ctrl+X Caption 复制 Name mnuEditCopy Level 1 31 Short-Cut Ctrl+C Caption 粘贴 Name mnuEditPaste Level 1 Short-Cut Ctrl+V Caption 关于 Name mnuAbout Level 0 其中Short-Cut就是平常我们说的热键,你可以在菜单设计窗口中找到,设置一个你需要的组合键,这样不论窗口的焦点处于何处,菜单在第几层,只要按下热键,就相当于调用了该项的Click事件。结果如图5,5。 从Win95以来程序里引入了鼠标右键功能,使鼠标有了更大的用处,在VB里我们也很容易实现。 打开Form_MouseDown事件,该事件有两个参数:Button,当按下左键时Button返回1,当按下右键时Button返回2,;Shift,是指在点击鼠标时按下的键盘键,如Shift、Ctrl、Alt,这些我们将在以后讨论,但很难避免在一章中不涉及到不该涉及的内容,学习时有个大概的理解即可。下面在该事件里添加代码(效果如图5,6): 32 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu mnuEdit, vbPopupMenuLeftAlign Else Exit Sub End If End Sub 在上面的代码中我们用到了PopupMenu方法,它的语法是: object.PopupMenu 菜单名,标记,X坐标,Y坐标 标记是用来表明弹出菜单位于鼠标指针位置的,它有三个值: vbPopupMenuLeftAlign 位于鼠标左 vbPopupMenuRightAlign 位于鼠标右 VbPopupMenuCenterAlign 位于鼠标中部 X、Y值可以用来制定菜单弹出的位置,可以省略。 关于菜单的Visible、Enabled等属性请自己尝试。 33 1.7 6-1 第六章 输入(一) 我们为什么要设计计算机程序呢,当然是为了计算机能为我们完成工作,但是要完成不同的任务,我们就必须对计算机下达命令,然后计算机在把信息返馈回来――任务是否完成。以上就是所谓的人机对话或交互功能,尤其是在Windows操作里我们需要进行更多的输入工作,我们需要填写各种各样的表格,设置程序的重要参数,把数据输入给计算机,再又它完成既定的工作就是今天我们本章要重点讨论的问题――在VB中如何建立完整的输入机制。 在VB中提供了一个函数InputBox能帮助我们建立一个最简单的输入窗体,语法如下: InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context] )该函数返回一个字符串表达式,其参数含义为:(“[]”表示可缺省) prompt――字符串表达式,最大长度为1024字符,窗体上的提示部分。 Title――字符串表达式,显示标题栏里的文本。 Default――字符串表达式,窗体中文本框的缺省值。 xpos,ypos――数值表达式,以Twips为单位指定窗体出现在屏幕上的位置。 helpfile――字符串表达式,是帮助文件的完整路径。 Context――数值表达式,指定适合的帮助主题。 可能你看了上面的说明并不明白,那么下面我们就用Input语句完成一个最简单的程序。 小知识:屏幕坐标 在计算机的屏幕上也有一个类似于我们在中学里常用到的直角坐标系,之不过它的原点不在左下,而是在屏幕的右上角,屏幕的最右上方坐标为(0,0),它的横坐标和我们的习惯是一致的,而纵坐标则是越向下越大,不仅是屏幕,所有的 对象里都是一样,需要记清。见图6,1 34 新建一个项目(project),在Form_load里填写一行代码: a$ = InputBox("举荐你最欣赏的网站", "最佳网站投票", "VB小驿") ’ 按下F5运行程序,在Form1出现之前先会弹出一个输入对话框,如图6,2。这时,无论你按下OK还是Cancel都是没有区别的,因为我们并没有对输入数据进行处理,下面我们完成一个更加复杂些的程序。 新建一个项目文件,把窗口布局成类似于图6,3的结构,各对象属性如下表: 35 Form1 Caption “最佳网站投票演示” BorderStyle 3’不可调整大小 ControlBox 0’False Frame1 Caption “输入框属性“ Label1 Autosize 1’True Index 0至5 0至5 Caption “提示语句” “标题” “缺省网站” “X坐标” “Y坐标” “” Index 4 Enabled False Index 4 Enabled False Text1 Text “”’(空字符串) Index 0至4 Index 3 Text 0 Index 4 Text 0 Check1 Caption “指定输入框位置” Button1 Index 0,1 Index 0 Caption “显示输入框” 1 Caption “退出程序” 36 本例中出现了一个Frame1控件,它是一种框架,可以用来把窗体分成好几个部分,首先应该在窗体上画出Frame1控件,然后再选择相应的控件,在Frame1上描出轮廓,使其是出现在Frame1之上,本例中除去两个按钮,其余都在Frame1上面。本例中用到了几组控件数组,其创建方法是,在选定的点右键,选择Copy,再在窗体其他部位单击右键,选择Paste即可,注意,若要使粘贴的对象在Frame1上,请在Frame1上单击右键选择Paste。 我们通过这个窗体,对输入框进行完整的控制,原理是这样的:当我们把窗体中要填写的对输入框的参数完成后按下OK按钮,就会出现我们设计的那个输入框,我们从输入框退出时则返回我们投票的结果,代码如下. 窗体初次被装入时,Label1(3)、Label(4)和Text1(3)、Text1(4)的Enabled属性都是False,我们需要通过改变Check1的Value(1,被选中,0,未选中)是他们有效或无效。 声明全局变量(General): Dim PosChk As Boolean '检查X、Y坐标是否有效 Check1_Click 事件: Private Sub Check1_Click() If Check1.Value = 1 Then Label1(3).Enabled = True Label1(4).Enabled = True Text1(3).Enabled = True Text1(4).Enabled = True PosChk = True Else Label1(3).Enabled = False Label1(4).Enabled = False Text1(3).Enabled = False Text1(4).Enabled = False PosChk = False End If 37 End Sub 接着在按钮中填写代码: Private Sub Command1_Click(Index As Integer) Dim Prompt, Title, Default As String Dim xPos, yPos As Integer Select Case Index Case 0 Prompt = Text1(0).Text Title = Text1(1).Text Default = Text1(2).Text If PosChk Then xPos = Val(Text1(3).Text) yPos = Val(Text1(4).Text) a$ = InputBox(Prompt, Title, Default, xPos, yPos) Else a$ = InputBox(Prompt, Title, Default, xPos, yPos) End If Label1(5).Caption = "谢谢您的投票,您的选择是" & a$ & "~ " Case 1 Unload Me End Select End Sub 按下F5运行程序,你会看到这样的结果。图6,4,6,5。是不是有种受骗的感觉,啊哟哟,可不是我的错, 就是这么容易嘛~ 38 从刚才的例子里,我们接触了一些VB中的输入方法,其实数据输入不仅仅局限于向Text框中输入数据,数据的输入还有许多其他的方法,譬如前面的Check1也是向程序发出一定的信息,只要是通过操作向计算机发布命令就可以叫做输入,下面我们来一一介绍。 首先要介绍的当然是输入用到最多的Text框。Text没有Click事件,它的缺省事件是Change,也就是当Text框里的一旦内容改变就会激发该事件发生,还是让我们用实例说话吧。 Text有几个特殊的属性,一是MultiLine(多行)属性,MultiLine属性为False的时候,不论文本有多长,它都会在一行里显示下去,换行符无效,当它为True的时候,字符串显示到Text框边缘的时候就会自动换行。另一个与之配合的属性是ScrollBars属性,它有4个值,0到3,分别是没有滚动条,水平滚动条,垂直滚动条,和二者都有,它是一个只读属性,也就是说只有在程序设计过程中才能改变,而不能在程序运行中改变,但是我们可以通过API解决运行中改变的问题,我们放在以后再讲。PasswordChart属性,我们经常在程序操作中遇到要填写密码的部分,为了保密起见,在屏幕上显示的字符一般“*”表示,并且这时是无法用剪贴板的,这在VB中非常容易做到,把PasswordChart中设一个用来代替字符串的字符即可,并不一定是“*”哦。 下面我们完成一个有趣的小程序,是我以前遇到过的一个程序,我对其进行了部分修改。程序的意思是这样的,假设你是一个司机应超速被警察扣留,现在需要你向警察陈述你的理由,如果你的话能打动他,就可以免交罚金,如果你在规定的字数里没有说出什么有震撼力的话,那老兄你可就惨了,交钱吧。J 39 这个程序比原来的英文程序有了几点不同,第一,由于用到的是双字节中文的中文,所以对于检测中文字符和英文有很大不同,第二,原来的英文程序不管你说多少,警察依然是依法从事,本例中给了犯规者10%的免罚机会(有点无聊„„L ,不过也是为了学一些东东嘛)。下面就跟我来设计窗体吧。(如图6,6) Form1 Icon Stop图标 Caption 停车检查 BorderStyle 3 Label1 Caption 警官,我超速是有原因的,请听我说: BackColor &H00808080& ForeColor &H80000012& Label2 Caption 你必须在30字之内完成你理由的申诉,否则 将受到罚款~ BackColor &H00808080& ForeColor &H00FF0000& Text1 MultiLink True Text “” 40 Picture1 Autosize True BackColor &H00808080& Visible True Picture2 Autosize True BackColor &H00808080& Visible False Picture3 Autosize True BackColor &H00808080& Visible False Command1 Visible False 三个图片框Picture1,3的Picture属性分别为绿灯,黄灯和红灯,这些图标在VB目录下的 Graphics\Icons\Traffic下(VB5),或是VB目录下的Icons\Traffic下(VB4、VB3),你还可以为Label1 在Font属性里选一个合适的字体和字重。下面我们来看代码: 首先初始化程序: Private Sub Form_Load() '把Command1放在水平的中央 Command1.Top = Label2.Top,200 Command1.Left = (Form1.Width - Command1.Width) / 2 '重叠三个图片框 Picture2.Left = Picture1.Left Picture2.Top = Picture1.TopPicture3.Left = Picture1.Left 41 Picture3.Top = Picture1.Top End Sub 下面我来讲一讲程序是怎样运行的,我们将用到Text的Change事件,每当字符串改变一次就对它进行一次检查,算出已经说的字数,当字数超过10时,下面的红绿灯会变成黄色,并且在这时随机抽取一个数,它在一个范围内出现的可能是10%,如果在这个范围内就可以免交罚金,如果不在范围则继续,当文字超过20的时候,红绿灯会变成红色,再一次抽取随机数字,步骤同上,如果30个字已满,再进行一次检查,如果你真的那么不幸就该罚款了。 程序的步骤清楚了,我们在来看看程序的 要点 综治信访维稳工作要点综治信访维稳工作要点2018综治平安建设工作要点新学期教学工作要点医院纪检监察工作要点 。由于中文是双字节字符,也就是说一个汉字占两个ASC码的位置,而VB显然是为英语国家设计的用Len函数无法返回汉字字节,也就是说一个汉字和和一个ASC SC字符或字符在Len函数中得到的值是一样的,这就需要特殊处理。用Asc()函数,在括号内放入一个A字符串,它会把第一个ASC码转化为0,255的数值,而把一个汉字放入,它的值必然不在0,255,这也就可以作为判定汉字的基础。我们可以把英文算作半个汉字。 第六章第二部分 1.8 6-2 第六章 输入(二) 下面我们来看看代码: 在General 里声明窗体级变量: Dim Level As Integer Private Sub Command1_Click() Unload Me End Sub Private Sub Text1_Change() Dim StrLength As Integer’字符串长度 Dim RandomNum As Single’随机数 42 Dim Str1 As StringDim a As String Dim i, Temp StrLength = 0’每次开始时把字符串长度还原为 0 a = Text1.Text For i = 1 To Len(a)’Len(a)代表字符串的长度 Temp = Asc(Mid$(a, i, 1))’挨个取字符If Temp > 255 Or Temp < 0 Then’不是ASC 码StrLength = StrLength + 2 Else StrLength = StrLength + 1End If Next i StrLength = StrLength / 2 Select Case StrLength Case 0 To 9 Picture1.Visible = True Picture2.Visible = False Picture3.Visible = False Label2.Caption = "慢慢说。你还有" & Str(30 - StrLength) & "个字可以说 " Level = 1 Case 10 To 19 If Level = 1 Then 43 RandomNum = Rnd * 10’得到随机数 If RandomNum <= 10 And RandomNum > 9 Then Text1.Enabled = False Label2.Caption = "很抱歉这是个误会„„ " Command1.Visible = TrueCommand1.Caption = "您可以离开了 " End If Level = 2 Else Picture1.Visible = False Picture2.Visible = TruePicture3.Visible = False Str1 = "怎么还没说完~ " Label2.Caption = Str1 & "你还有" & Str(30 - StrLength) & "个字可以说 " End If Case 20 To 29 If Level = 2 Then RandomNum = Rnd * 10 If RandomNum <= 10 And RandomNum > 9 Then Text1.Enabled = False Label2.Caption = "很抱歉这是个误会„„ "Command1.Visible = True Command1.Caption = "您可以离开了 "End If 44 Level = 3 Else Picture1.Visible = False Picture2.Visible = False Picture3.Visible = True Str1 = "我已经不耐烦了~ " Label2.Caption = Str1 & "你还有" & Str(30 - StrLength) & "个字可以说" End If Case Else Text1.Enabled = False Label2.Caption = "你已经没有机会了~"Command1.Visible = True Command1.Caption = "交钱吧,肇事犯~ "End Select End Sub 45 中间有几个函数需要解释一下: Mid可以从字符串中取出一部分,返回字符型,格式 : Mid(字符串,从第几个字符开始,取字符的长度 ) Asc可以把字符转换为ASCII码,格式: Asc(字符串) Rnd,取得大于0但小于1 的数值,可以没有参数。 怎么样,十分简单吧,我们将在下一次继续讨论VB的输入机制~ 在继续上面的内容时,我想再回顾和强调几个在字符串操作中经常函数: 先是几个已经接触过的,Mid(),Asc(),Len(),它们的语法分别是: Mid(字符型,起始字符,长度) 返回子字符串,如果从字符串的第一个字符取起,起始字符为1,依此类推。 Asc(字符型) 返回数值,如果参数不是一个字符,而是字符串(多个字符),将返回参数的第一个字符ASCII值。 Len(字符型) 返回字符串的长度。 下面我再为你解释几个新的函数: Left(字符串,长度) 将返回字符型,从字符串的第一个字符向左取字符串,与之相对应的是Right(),它将从字符串的最后一个字符向右取字符串。 Chr(数值型) 该数值范围从0,255,返回字符型,如Chr(65)可返回字符“A”,这样可以输入一些用键盘无法输入的字符。 Str(数值型) 该函数把数值型转换为字符型,也许你觉得数值“123”和字符串“123”没什么区别,但在内存中一个ASCII字符是占一个字节,也就是说字符串“123”占3个字节,而当数值“123”是整型时,它占两个字符,当它是长整型时,占4个字节。与之向对应的是Val(数值型),它把数值型转换为字符型。 46 上面的函数都是以后要经常用到的,请将它们熟悉。 上次讲到文本框的用处,还有意思吗,你是否能把上次的程序稍稍变动一下,来计算出输入的单词数,提示一下,单词与单词之间是用空格分隔开的。 输入不仅仅是向文本框输入字符,凡是从外界向程序传递数据都可以叫做输入,我们一一说明白。 无线钮,记得我们曾在第一章中完成过我们的第一个程序――“Hello World~”它就是一种输入的方法,在设计VB程序时可以通过一组这样的无线钮,它们之间互相排斥,也就是说,只能有一个按钮被选中。它因为很象无线电收音机上的按钮因而得名无线钮。如果要在一个窗体内放置多组无线钮必须用Frame控件把它们区分开来。下面我们在来完成一个例子,顺便熟悉一下另外两个处理字符串的函数――LTrim()和Rtrim(),它们分别用来删除字符串左边的空格和右边的空格,让我们看看它们是如何工作的。 程序窗体如图6,8,由于窗体比较简单,无需修改更多的属性,一共有三个文本框(Text1到3),分别用来显示输入字符,显示把空格换成星号的字符,和经过处理的字符,还有三个无线钮(Option1到3),要修改的只有Caption属性,分别是“删除左边的空格”、“删除右边的空格”和“删除两边的空格”。因为空格在我们在文本框中无法看到空格,所以我们通过一个称作AddStar的函数把原有字符串中的空格转换为星号,使我们能够看到函数的效果。下面在程序中添加代码,首先在General中声明窗体级变量: Dim LTrimmedword$, RTrimmedword$ '删除左边空格和右边空格后的字符串 Dim LRTrimmedword$ '删除两边空格后的字符串 然后,我们通过一个叫做addstar的函数为字符串加上星号,以前曾说过函数与过程的分别,函数会返回一个函数值,所以addstar也就相当于一个变量,其实这很好理解,就象中学代数中的函数,函数就相当于变量Y,而函数中的参数则相当于自变量X,当然可能有很多自变量X1、X2„„请原谅,我并不想在这里上数学课,因为我厌恶那玩意儿,特别是上了大学之后,好在大二以后就再也不会有数学课了,哈哈„„ Function addstar(tempword As String) As String Dim charindex% Dim pasteword$ '加星号后的字符串 For charindex = 1 To Len(tempword) 47 '如果字符为空格 If Mid(tempword, charindex, 1) = " " Then pasteword = pasteword + "*" Else: pasteword = pasteword + Mid(tempword, charindex, 1) End If Next addstar = pasteword '返回函数值 End Function 下面的代码很简单,并且我为它做了注释,就不再一一解释了,我只想简要的提几句,Ltrim和Rtrim只有一个参数(字符型),另外下面用到了焦点事件,我们曾在第三章中介绍过,当Text1得到焦点(GotFocus)时,清空所有的文本框,当它失去焦点(LostFocus)时,对字符进行addstar并且在Text2中显示。 Private Sub Text1_GotFocus() '但焦点于Text1 '清除所有文本框中的字符 Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub Private Sub Text1_LostFocus() Dim Origionword As String Origionword = Text1.Text Text2.Text = addstar(Origionword) LTrimmedword = addstar(LTrim(Origionword)) RTrimmedword = addstar(RTrim(Origionword)) LRTrimmedword = LTrim(RTrim(Origionword)) End Sub Private Sub Option1_Click() Text3.Text = LTrimmedword '显示删除左空格后的字符串 End Sub 48 Private Sub Option2_Click() Text3.Text = RTrimmedword '显示删除右空格后的字符串 End Sub Private Sub Option3_Click() Text3.Text = LRTrimmedword '显示删除两边空格后的字符串 End Sub 最后结果如图6,9。 与无线钮相对的是检查框,在同一范围内一组无线钮只能有一个被选中,而检查框则可以有多个选择,就象在添表时,性别那项只能有一个选择,而在描述你以前的职业时可以有学生、程序员、家庭教师或者什么,总之有很多选择,下面我们举一个简单的例子加以说明。 假设编写了一个共享软件,在让用户注册的时候你想知道你的用户使用的计算机情况,你就需要一个调查表,为了使这个调查表不止枯燥,可以在这个程序中加入一些图形。新建一个项目文件,窗体布局如图6,10。 49 程序很简单,一共有两个框架(Frame1和Frame2),它们的Caption分别为“选择你的计算机拥有的配置”和“这是你的计算机系统”,在Frame1有四个检查框(Check1到Check4),Caption分别为“网络系统”、“鼠标”、“密码保护”和“电子邮件”,另把Check4的Enabled属性改为False,使其无效;在Frame2中放置四个图片框(Picture1到Picture4)与四个检查框向对应,请把所有图片框的BorderStyle属性设为0(无边框),它们的Picture属性请根据上图,在存放图标的目录中找到相对的图标。下面是程序代码: Private Sub Check1_Click() If Check1.Value Then Check4.Enabled = -1 Picture1.Visible = -1 Else: Check4.Enabled = 0 Picture1.Visible = 0 Check4.Value = 0 Picture4.Visible = 0 End If End Sub Private Sub Check2_Click() If Check2.Value Then Picture2.Visible = -1 50 Else: Picture2.Visible = 0 End If End Sub Private Sub Check3_Click() If Check3.Value Then Picture3.Visible = -1 Else: Picture3.Visible = 0 End If End Sub Private Sub Check4_Click() If Check4.Value Then Picture4.Visible = -1 Else: Picture4.Visible = 0 End If End Sub 51 这个程序比我们见过的任何程序都简单,就不再做说明。 1.9 6-3 VB入门教程之六 第六章 输入(三) 滚动条(ScrollBar)在视窗中也是一个不可缺少的部分,由于面积所限,我们不得把屏幕上的内容滚来滚去,以显示大量的内容,这就是我们经常要用到的滚动条。但滚动条除去滚动窗口,还有一个很重要的作用――输入,想想你经常用到的一些家用电器上调节声音或别的什么东西的滑块,你把它滑向大的一方音量就会增大,而你把它滑向小的一方音量就会减小,或者一个控制左右两个音箱的均衡器,当滑块在正中央的时候,两个音箱的音量是相同的,当你把滑块偏向一方时,音箱的音量有了大小之分,在Windows操作中,我们也经常要用到类似的效果。 在VB中提供了两个常规的滚动条控件――Vscroll和Hscroll,分别代表垂直的和水平的滚动条,它们只不过是方向不同而已,而它们的属性,以及会发生的事件都是相同的。,滚动条有几个特殊的属性: Value属性,当滑块挪动后停在某一位置时,就改变了滚动条的Value属性。 Max和Min属性,用来设置滚动条的最大值和最小值,譬如把Max设为100,把Min设为0时,滚动条的Value就在0到100之间移动,当Max和Min倒置时,滚动条的方向也会相反,也就是说,当Max End Select End Sub 运行程序的话已经可以输入数据,下面我们来处理小数点。 69 在General里声明新的变量: Dim PointFlag As Boolean '判断是否已有小数点 我们知道小数点只能输入一次,一个数据中不能有多个小数点存在,所以需要一 个布尔变量做判断。 在Form_Load里进行初赋值: PointFlag = False 在Command的单击事件里接着上面输入新的代码: Case 10 If Not PointFlag Then’如果没有小数点 If FirstNum Then’如果是第一个字符 StrNum1 = "0." FirstNum = False Else StrNum1 = StrNum1 + "." End If Else’已有小数点 Exit Sub’则退出单击事件 End If PointFlag = True Text1.Text = StrNum1 70
本文档为【VB入门教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_260251
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-30
浏览量:18