VB2010中怎样对java获取文本框内容容进行查找 查找完一项再查找下一项直到文本末尾(就是查找替换的工作)

(1人评价)
2174人阅读
评价文档:
相关文档推荐
Visual Basic程序设计
Visual Basic 导论
程序设计与算法
常用控件与界面设计
数据、表达式与简单程序设计
选择分支与循环
其他控件及其应用
图形处理与多媒体应用
数据库操作与编程
Visual Basic导论
VB主要功能和特点
VB集成开发环境
程序设计方法的发展
VB中的有关概念
建立简单的应用程序
一行内容在窗体左、右移动;
移动两种方法:手动和自动,当自动时,文字闪烁显示;
当内容超出窗体,进行反弹。
对输入的字符进行转换的程序。
转换规则:
o 大写字母转换成小写字母,
o 小写字母转换成大写字母
o 空格不转换
o 其余转换成“*”。
要求:每输入一个字符,马上就进行判断和转换。
通过上述两例说明VB面向对象、可视化、事件驱
动的特点。
VB主要功能和特点
1. 具有面向对象的可视化设计工具;
2. 事件驱动的编程机制;
3. 提供了易学易用的应用程序集成开发环境;
4. 结构化的程序设计语言;
5. 支持多种数据库系统的访问;
6. Active技术;
7. VB 6.0在开发环境上、网络功能等的增强;
8. 完备的help联机帮助功能。
VB集成开发环境
工程资源管理器子窗口
属性子窗口
窗体布局子窗口
控件工具箱
Visual basic 的开发环境
切换文件夹
Visual basic 的开发环境
排序选项卡
应用程序窗口,由标题栏、菜单栏和工具栏组成。
2. 窗体(form)窗口
设计VB程序的界面。
3. 代码(code)窗口
编辑窗体、标准模块中的代码。
4. 属性(properties)窗口
所有窗体或控件的属性设置。
5. 工程资源管理器(project expror)窗口
保存一个应用程序所有的文件。
6. 工具箱(toolbox)窗口
显示各种控件的制作工具,供用户在窗体上设计。
程序设计方法的发展
1. 初期的程序设计
高运行效率、少占用内存为目标。
2. 结构化程序设计
程序的可读性、可维护性为目标。
程序= 算法+数据结构
的面向过程的程序设计。
3. 面向对象的程序设计
降低程序的复杂性、提高软件的开法效率和改善工作界
面为目标。
程序=对象+消息
的面向对象的程序设计。
对象的有关概念
类是创建对象实例的模板, 包含了创建对象的属性描述和
行为特征的定义。
是类的一个实例,继承了类的属性、方法。
VB中常用的对象有:窗体、控件等。
3. 对象的建立和命名
4. 对象的三要素
对象的性质,即用来描述和反映对象特征的参数。
对象的行为,即将一些通用的过程编写好并封装起来,作
为方法供用户直接调用。
响应对象的动作称为事件,它发生在用户与应用程序交
互时。如单击控件、鼠标移动、键盘按下等。
? 事件过程
指附在该对象上的用户编写的程序代码,是事件的处理程序。
? 事件驱动过程
是图形用户界面的本质,由用户控制而代码作出响应。
5. VB程序的执行步骤如下:
(1)启动应用程序,装载和显示窗体;
(2)窗体(或窗体上的控件)等待事件的发生;
(3)事件发生时,执行对应的事件过程;
(4)重复执行步骤(2)和(3)
直到遇到END结束语句结束程序的运行;
或按“结束”强行停止程序的运行。
建立简单的应用程序
以例1.3为例:
1. 建立用户界面的对象;
2. 对象属性的设置;
3. 对象事件过程及编程;
4. 程序运行和调试;
5. 保存文件。
工程的管理及环境的设置
一、工程的组成
工程文件包含了一个应用程序的所有文件:
? 窗体文件(.frm):控件及属性、事件过程和自定义过
? 窗体的二进制数据文件(.frx),自动产生同名.frx文件;
? 标准模块文件(.bas);
? 类模块的文件(.cls);
? 资源文件(.res);
? ActiveX控件的文件(.ocx).
二、创建、打开和保存工程
三、添加、删除和保存文件
1. 窗体名和窗体文件名概念
窗体名:窗体的Name属性,
在代码中用来引用该窗体,同一
窗体文件名
工程不能有相同的窗体名;
窗体文件名:窗体存放在磁盘上的文件名,该文件包含了该窗体
的所有控件属性和代码,同一文件夹不能有相同的文件名。
2. 在工程中添加现存的窗体时,只是对该窗体文件的引用纳入工程。
因此,如果更改窗体并保存它,会影响包含此窗体文件的任何工程。
3. 在工程中删除窗体时,仅将此窗体从工程里删除掉,但是窗体文件
仍存在于磁盘上。但是,如果在VB之外删除一个窗体文件,VB不能更新
此工程文件,当打开此工程时,将显示一个文件丢失的错误信息。
4. 对窗体文件改名方法
1) 打开工程
“另存为…Form”实现文件的复制——保存工程文件。
2) 利用编辑程序打开工程文件,修改FORM=XXX的文件名。
生成可执行文件和制作安装盘
以工程文件例2.11为例。
1. 生成可执行文件
文件/生成V6B2-11.exe文件,然后关闭Visual Basic6.0。
2. 制作安装盘
在向导的指导下运行V B6.0中文版工具“Package &
Deployment”;
“打包”:把工程中用到的各种类型的文件进行打包压缩后,存
放到特定的目录下。
“展开”:再把这些打包的文件展开到用户可以携带的安装介质
软盘、光盘等。
3. 检测安装程序
在没有VB 6.0系统的环境下,执行安装盘中的Setup.exe文件,将
发行盘进行安装。
程序设计与算法
基本算法结构图的设置
2.1 算法概论
1?、求两个自然数的最大公约数的算法(欧几里德算法)1. 算法的概念
?一类是数值计算算法,如求解超越方程的根S1.输入两个自然数M、N
?一类是非数值计算算法,如对非数值信息的排序、S2. 求M除以N的余数R
查找等。S3.使M=N,即用N代换M
2、在N个字符串数据集合中,查找有无特定的字符串存在
S4.使N=R,即用R代换N
2. 算法示例S1.输入输入字符串数据的个数N和要查找的字符串S
S5.若R≠0,则重复执行S2、S3、S4(循环),否则转S6
3. 算法的特征S2. 使I=1,I用于计数
S6.输出M,M即为M和N的最大公约数
?(1S3.) 确定性从字符串数据集合中读取一个字符串(2) 可行性 (3) 有穷性 (4) 输入性X (5) 输出性
S4.若X=S,输出“找到S”的信息,算法结束,否则转S5
4. 算法的描述
见p12 表、图
S5.使I=I+1,计数器计数
基本算法结构
S6.若I≤N,则重复执行S3、S4、S5(循环),否则转S7
S7.输出“找不到S”信息,算法结束
2.1 算法概论
? 5. 基本算法结构
? 顺序结构;
? 循环结构可分为两类:
? 共同特点是:
只有单一的入口和单一的出口;
结构中的每个部分都有执行到的可能;
结构内不存在永不终止的死循环
2.2 基本算法结构图
常用控件与界面设计
窗体及常用控件属性
多重窗体和多文档窗体
窗体及常用控件
1. Name名称属性
创建的对象名称,有默认的名。在程序中,控件名是作为对
象的标识而引用,不会显示在窗体上。
2. Caption标题属性
该属性决定了控件上显示的内容。
3. Height、width、top和left属性
4. Enabled属性
控件是否可操作。当设置为false时,呈暗淡色,禁止用户进
5. Visible属性
控件是否可见。当设置为false时,用户看不到,但控件本身存
6. Font属性
Fontname:字体;Fontsize:字体大小;Fontbold:是否是粗
Fontitalic:是否斜体;Fontstrikethru:是否加一删除线。
Fontunderline:是否带下划线。
例2.2 在窗体是建立两个命令按钮
Command1和Command2,
的Font通过属性窗口设置,
通过代码实现。
7. Forecolor前景颜色属性
设置控件的前景颜色(即正文颜色).。其值是一个十六进
制常数,用户可以在调色板中直接选择所需颜色。
8. Backcolor背景颜色属性
9. Backstyle背景风格属性
0-transparent:透明显示,即控件背景颜色显示不出来。
10. BorderStyle边框风格属性
0-None:控件周围没有边框
1-Fixed Single:控件带有单边框。
11. Alignment属性
控件上正文水平对齐方式
0:正文左对齐
;1:右对齐;2:居中。
12. AutoSize属性
控件是否根据正文自动调整大小,
13. WordWarp属性
AutoSize True时,WordWarp才有效。
按正文字体大小在垂直方向上改变显示区域的大小。
14.TabIndex属性
决定了按Tab键时,焦点在各个控件移动的顺序。各个控件默认
默认控件名
有关属性设置
TabIndex值就是以控件建立时
的顺序,第一个为0。
15.控件默认属性
反映该控件最重要的属性,使用时可省略属性名。
ousePointer=99,M
ouseIcon=Key04.ico
注意:Command的默认属性为Default,当该属性为True,当按
鼠标属性例
Enter键,该控件起作用。
BorderStyle =1
BorderStyle =1
AutoSize=True,
arp=False,
BorderStyle =1
BackColor= &
H00FFFFFF&
BorderStyle =0
ForeColor= &
H000000FF&
BorderStyle =0
最小化按钮
最小化按钮
Caption标题
MaxButton、MinButton
Icon、ControlBox
Picture、AutoRedraw
BorderStyle (0 1 2 3 4 5
WindowsState (0-正常、1-最小化、2-最大化)
Click、DblClick和Load
当装入窗体时激发,通常用于对属性和变量初始化
Print、Cls和Move等
例3.4 上述属性、Click、DblClick和Load
事件演示。
用于显示文本(输出)信息,不能作为输入信息的界面。
例3.3.b 显示浮雕效果的文字,实现方法:字颜色、标签位置
四、文本框
是一个文本编辑区域,可在该区域输入,编辑和显示正文内容。
1.其他属性
Text:正文内容;
o Maxlength:设置正文的最多字符个数,0任意长度值;
o MultiLine:是否为多行,默认为一行,False;
o ScrollBars:MultiLine为True时,该属性才有效,表示滚动条的形式
0-None、1-Horizontal、2-Vertical、3-Both;
o Locked:是否可被编辑属性,False,表示为可编辑。
o PassWord:口令字符;
Text属性返回输入的数据,屏幕显示该字符;
o SelStart、SelLength、SelText:选中文本的起始、长度、内容。
例3.6 .a复制选中的文本
2.常用事件
o Change:当改变文本框的Text属性时会引发该事件。
o KeyPress(KeyAscii As Integer):同上,并可返回一个KeyAscii参数
KeyAscii 为13,按回车键;为0 去除刚输入的字符。
o LostFocus:当控件失去焦点时发生。
o GotFocus:当控件获得焦点时发生。
3.常用方法
[对象.]SetFocus:是把光标移到指定的文本框对象中。
4.文本框的应用
例3.6.b 要求输入合法的数字数据。当输入结束时(按Tab键),对于
输入正确的数据,显示正确信息;对输入的非数字数据,则响铃
(Beep)、显示错误信息、清除文本框中的内容,并使焦点重新回到文
o Text2_ LostFocus 当输入结束按Tab键时,该事件激发。
o IsNumeric(Text2):判断是否输入非数字数据。
o Text2.SetFocus:使焦点重新回到文本框。
4、命令按钮CommandButton
接受用户输入的命令。输入命令可以有三种方式:
鼠标单击、Tab键焦点到该按钮、快捷键。
1. 其他属性
? Caption:命令按钮显示的内容,可设置快捷键,例
? Value: 检查该按钮是否按下。该属性在设计时无效。
? Picture :按钮可显示图片文件(.bmp和.Ico),当Style为1时有效。
? Style:确定显示的形式,0 只能显示文字,1 文字、图形均可
? ToolTipText :设置工具提示,和Picture结合使用。
建立一个允许剪切、复制和粘贴的简单便笺板程序。
可增加内容:利用MouseMove事件决定命令按钮的有效性,
即当选中内容,“剪切”、“复制”按钮有效,否则无效。
5.单选钮和复选框
Caption属性:文本标题。
Alignment属性
0:控件钮在左边,标题显示在右边。
1:控件钮在右边,标题显示在左边。
单选钮(逻辑型)
检查框(数值型)
True:选定
0--Unchecked:未被选定
False:未选定
1--Checked:选定
2--Grayed:灰色,禁止选择
0--Standard:标准方式
1--Graphical:图形方式
事件:Click
因为单击时自动改变状态,故不需要编写过程。
例3.9.a用单选钮和检查框设置文本框的字体。
6.框架(Frame)
设Caption为 "字体"
框架内控件的创建方法:
方法1:单击工具箱上的工具,然后用出现的“+”指针,在框架
中适当位置拖拉出适当大小的控件。
不能使用双击工具箱上图标的自动方式。
方法2:将控件“剪切”到剪贴板,然后粘贴(Ctrl+V)到框架。
Caption属性:框架标题
Enabled属性
False:标题呈灰色,不允许对框架内的对象进行操作。
Visible属性
True:框架及其控件可见。
False:框架及其控件被隐含起来。
Click、DblClick事件:
一般不需要编写框架的事件过程。
框架用法示例。
7. 列表框和组合框
列表框各主要属性的值:
下拉式组合框
简单组合框
下拉式列表框
List1.ListIndex = 3
(下标从0开始的)
List1. ListCount = 5
List1. Selected(3) = True,其余为False。
List1. Sorted = False,没有排序。
List1. Text 为 “cox” ,
与List1. List(List1. ListIndex)相等
列表框各主要属性的值:
List1.ListIndex = 0
List1. ListCount = 8
List1. Selected(3) = True
其余为False。
List1. Sorted = False
List1. Text 为 “李宁”
1. 共有的重要属性
(P:可在程序中设置或引用,D:可在设计状态设置。)
字符型数组,存放列表框的项目,下标是从0开始。
ListIndex:P
选中的项目的序号,没有项目被选定时为-1
ListCount:P
项目的数量,ListCount-1是最后一项的下标。
True:按字母顺序排列。
False:按加入先后顺序排列。
列表项中被选定的内容,
List 1.List(List 1.ListIndex) = List1.Text。
2. 列表框的特有属性
Selected:P
逻辑数组。
Selected(i)的值为True表示第i+1项被选中。
MultiSelect
0-None:禁止多项选择。
1-Simple:简单多项选择。
2-Extended:扩展多项选择。
3. 列表框的特有属性
下拉式组合框
简单组合框
下拉式列表框
对象.AddItem item [, index]
RemoveItem
对象.RemoveItem index
对象.Clear
列表框:Click、DblClick。
组合框:Click,只有简单组合框才有DblClick事件。
一般不需要编写Click事件过程。
通常在单击命令按钮或发生DblClick事件时才读取Text属性。
例3.11.a对列表框进行项目添加、修改和删除操作。Check1
例3.11.b对列表框进行项目添加、修改和删除操作。
8. 时钟(Timer)
时钟控件以Interval为时间间隔产生
Timer事件。
Interval属性
单位:ms(0.001s),0.5秒是500。
Interval=0:屏蔽计时器。
Enabled属性
True:有效计时
False:停止时钟工作
例3.13.a数字时钟
例3.13.b蝴蝶飞舞
方法是面向对象的,故使用的形式为:
[对象.]方法
1.Print方法
[对象.]Print[{Spc(n)|Tab(n)}][表达式列表][;|,]
作用:在对象上输出信息
对象:窗体、图形框或打印机(Printer) ,省略对象在窗体上输出。
Spc(n)函数:插入n个空格,允许重复使用。
Tab(n)函数:左端开始右移动n列,允许重复使用。
;(分号):光标定位上一个显示的字符后。
,(逗号):光标定位在下一个打印区的开始位置处。
无 ;,时换行。
开始打印的位置是由对象的CurrentX和CurrentX属性决定,
缺省为打印对象的左上角0,0。
注意:Print方法在Form _Load事件过程中起作用,必须设置窗体的
AutoRedraw为True。
Private Sub Form_Click()
For i = 1 To 5
Print Tab(i); String(6 - I, "▼");
Spc(6); String(I, "▲")
String(number, character)
返回指定长度重复字符
的字符串。
若把Spc(6)换成Tab(6),
效果如何?
2. Cls方法
形式:[对象.]Cls
作用:清除运行时在窗体或图形框中显示的文本或图形。
注意:不清除在设计时的文本和图形。
3. Move方法
形式:[对象.]Move 左边距离[,上边距离[,宽度[,高度]]]
作用:移动窗体或控件,并可改变其大小。
对象:可以是窗体及除时钟、菜单外的所有控件
图形移到窗体的中心。
编一计算月支付贷款的程序。现要求根据房产商提供的
信息,买房者选择房型、面积、单价、按揭期等信息,计算每月
支付代款的程序。
窗体1:列表框选择数据、标签显示数据、文本框输入数据;
窗体2:图形框显示房屋的平面图。
Pmt函数计算月支付贷款。
菜单的设计
下拉式菜单系统的组成结构
一、菜单编辑器的使用
工具/菜单编辑器(Ctrl+E);
窗体上快显菜单/菜单编辑器。
常用属性:
1. 标题(Caption) 热键
菜单项属性
2. 名称(Name)文本框
分隔符也应有名称
3. 快捷键(Shortcut)
菜单名没有快捷键
4. 复选(Checked)检查框
5. 有效(Enabled)检查框
6. 可见(Visible)检查框
3.18 建立一个有菜单功能的文本编辑器。
菜单项增减
在程序运行时,菜单随时增减,如“文件”菜单能保留最近打
的文件数。这同控件数组一样,使用菜单数组。
1.在菜单设计时,加入一个菜单项,其Index为0(菜单数组),
Visual为False。
2.在程序运行时,通过Load方法向菜单数组增加新的菜单项。
在上例的文件菜单中保留最近打开的文件清单。
同样,要删除所建立的菜单项,使用UnLoad方法向菜单数组
减少菜单项。
弹出菜单(快捷菜单)
弹出菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。显
示位置取决于单击鼠标键时指针的位置。设计与普通菜单相同(如
果不希望菜单出现在窗口的顶部,该菜单名Visible属性设置为
False )。菜单弹出的方法:
[对象.]PopupMenu 菜单名, 标志, x, y
标志,表示弹出的位置和触发的键
Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu EditMenu, vbPopupMenuCenterAlign
弹出菜单。
多重窗体和多文档窗体
一、多重窗体
1. 添加窗体
“工程|添加窗体”
添加“现存”窗体时要注意:
防止多个窗体的Name相同而不能添加;
添加的窗体实际是将其他工程中已有的窗体加入,多个工程共
通过“另存为”命令以不同的窗体文件名保存,断开共享。
一个工程中有多个窗体,应分别取不同文件名保存在磁盘上,
VBP工程文件中记录了该工程的所有窗体文件名。
3. 设置启动窗体
“工程/属性”
“启动对象”
设置启动对象
4. 窗体语句
(1)Load语句:装入窗体到内存但没有显示窗体
Load 窗体名称
(2)Unload语句:从内存删除窗体
Unload 窗体名称
5. 窗体方法
(1)Show方法:显示一个窗体(当窗体没有Load,自动Load)
[窗体名称].Show [模式]
0 - Modal:关闭才能对其他窗体进行操作。
1 - Modeless,可以对其他窗体进行操作。
(2) Hide方法:隐藏窗体,没有Unload删除
[窗体名称.] Hide
6. 不同窗体间数据的存取
(1)存取控件的属性
另一窗体名.控件名.属性
(2)存取变量的值
另一窗体名.全局变量名
例3.21 输入和计算学习成绩。
Public MATH As Single
Public PHYSICS As Single
Public CHEMISTRY As Single
Public CHINESE As Single
Public ENGLISH As Single
多文档界面(MDI)
1. 创建和设计MDI窗体及其子窗体
(1) 创建和设计MDI窗体
“工程/添加MDI窗体”命令
设计:一般有菜单栏、工具栏、状态栏
(2) 创建和设计MDI子窗体
MDI子窗体是一个MDIChild属性为True的普通窗体。
要创建多个子窗体,通过窗体类来实现:
Public Sub FileNewProc()
Dim NewDoc As New frmMDIChild
No = No + 1
NewDoc.Caption = "no" & No MDI子窗体的Name
NewDoc.Show
设计:可有菜单栏,但必须有文本框。
2. MDI窗体与子窗体的交互
(1)活动子窗体和活动控件
MDI窗体的两个属性:ActiveForm 和ActiveContro。l
例:将子窗体的文本框中所选文本复制到剪贴板上。
ClipBoard.SetText
frmMDI.ActiveForm.ActiveControl.SelText
(2)显示MDI窗体及其子窗体
显示任何窗体的方法为show,还有有关规则:
o加载子窗体时,其父窗体会自动加载并显示;反之则无。
oMDI窗体有AutoShowChildren属性,决定是否自动显示子窗体。
(3)维护子窗体的状态信息
(4)用QueryUnload卸载MDI窗体
3. 多文档界面应用程序中的“窗口”菜单
(1)显示打开的多个文档窗口
要在某个菜单上显示所有打开的子窗体标题,只需利用菜单编辑
器将该菜单的WindowList属性设置为True。
(2)排列窗口
利用Arrange方法进行层叠、平铺和排列图标。
MDI窗体对象.Arrange
的排列方式:
层叠所有非最小化
水平平铺所有非最小化
垂直平铺所有非最小化
vbArrangeIcons
重排最小化
数据、表达式与简单程序设计
变量与常量
运算符和表达式
1. VB代码不区分字母的大小写
系统保留字自动转换每个单词的首字母大写;
用户自定义行以第一次为准。
2. 语句书写自由
一行可书写几句语句,之间用冒号分隔;
一句语句可分若干行书写,用续行符_连接一行 " ABRA
> "女字" 按汉字的拼音字母比较
4. 逻辑运算符
将操作数进行逻辑运算,结果是逻辑值:
条件表达式1
条件表达式2
条件表达式均为T,
条件表达式1
条件表达式2
条件表达式有一个为T 结果为T。
二、表达式
变量、常量、函数、运算符和圆括号。
2.书写规则
(1) 运算符不能相邻。例a+ -b是错误的。
(2) 乘号不能省略。例x 乘以y 应写成:x*y。
(3) 括号必须成对出现,均使用圆括号。
(4) 表达式从左到右在同一基准上书写,无高低、大小。
3. 不同数据类型的转换
运算结果的数据类型向精度高的数据类型靠。
Integer<Long<Single<Double=字符运算符>关系运算符>逻辑运算
表达式书写举例
a*b*c*d/e/f/g
或 a*b *c*d/(e*f*g)
e10 ? ln 10
sin 45 ? ?
sin(45*3.14/180)+(exp(10)+log(10))/sqr(x+y+1)
例:用人单位招聘秘书:年龄小于40岁的女性,学历专科或本科,
年龄<40,性别=“女”,(学历=“专科”,学历=“本科”)
考虑:若分别写成:
年龄<40 And
性别= "女" And
(学历= "专科" And 学历= "本科")
年龄<40 Or
性别= "女" Or
(学历= "专科" Or 学历= "本科")
例:表示算术表达式:
正确的VB表达式:
错误的VB表达式:
比a小,比b大
比a大,比b小
4.5 常用内部函数
1. 数学函数
Rnd函数返回0和1(包括0但不包括1)之间的双精度随机数。
每次运行时,要产生不同序列的随机数,执行Randomize 语
例产生1~100的随机数:
Int(Rnd *100)+1
2. 转换函数
"B" Asc ("B")
Asc(Chr(99))
Chr(Asc("K"))
Ucase$("abcdefg")
3.日期函数
Time返回系统时间、Date返回系统日期、Now返回系统日期和时间
DateAdd(要增减日期形式,增减量,要增减的日期变量)
DateDiff(要间隔日期形式,日期1,日期2)
例如求离你毕业还有多少天:
DateDiff("d",date, ## )假定2006年毕业
4. 字符串编码和函数
(1)字符串编码
Windows系统对字符采用了DBCS编码,中文2字节,西文1字节
VB中字符Unicode编码,任何字符2字节。
Len(“中国good ”)为6;LenB(“中国good ”)为12。
StrConv() 进行DBCS与Unicode之间转换。
(2)字符串函数
Mid$("ABCDEFG",2,3)
InStr(2, "ABCDEFG", "EF")
S=Split("123,56,ab",",")
”,S(1)="56”,S(2)="ab"
Join(S,"")
Replace("ABCDABCD","CD","123")
“AB123AB123”
5. 格式输出函数
例4.1 利用Format函数显示有关的日期和时间。
Private Sub Form_Click( )
FontSize = 12
MyTime = #9:21:30 PM#
MyDate = #7/21/1997#
Print Tab(2); Format(MyDate, "m/d/yy")
Print Tab(2); Format(MyDate, "mmmm-yy")
Print Tab(2); Format(MyTime, "h-m-s AM/PM")
Print Tab(2); Format(MyTime, "hh:mm:ss A/P")
Print Tab(2); Format(Date, "dddd,mmmm,dd,yyyy")
Print Tab(2); Format(Now, "yyyy年m月dd日 hh:
Print FormatDateTime(Now)
' VB6.0新提供的函数
6. Shell函数
Shell函数负责执行一个可执行文件,返回一个Variant,如果成
功,代表这个程序的进程ID,若不成功,则会返回0。
形式:Shell(命令字符串,窗口类型)
窗口类型值为1表示正常窗口,缺省窗口最小化为图标。
i = Shell("c:\windows\calc.exe")
Shell("c:\command.com", 1)
提示:如果不知道应用程序的路径名,可用Start命令启动程序
i = Shell(start & "calc.exe")
; i = Shell(start & " vb6.exe ")
1. 逻辑表达式书写错,在VB没有造成语法错而形成逻辑错
例如,数学表达式
VB表达式写为
问题在于VB中的逻辑量与数值量可相互转换。
2. 同时给多个变量赋值,在VB没有造成语法错而形成逻辑错
x%,y%,z%
3. 标准函数名写错
4. 变量名写错
检查方法:在通用声明段加Option Explicit
5. 语句书写位置错
在通用声明段只能有Dim语句,不能有赋值等其他语句
选择、分支与循环
其他辅助控制语句
常用算法(一)
(顺序、条件、循环)
一、赋值语句
形式:[LET]变量名=表达式
将表达式的值赋值给变量名。
一般用于给变量赋值或对控件设定属性值。
sRate!=0.1
Text1.Text = "欢迎使用Visual Basic 6.0 "
当表达式的类型与变量的类型不一致时,强制转换成左边
的精度,如
iA中的结果为3
注意:虽然赋值号与关系运算符等于号都用“=”表示,VB
系统会根据所处的位置自动判断是何种意义的符号。
二、与用户交互函数和过程
1. InputBox函数
InputBox(提示[,标题][,缺省][,x 坐标位置][,y坐标位置])
其中:提示:
提示信息;标题:
对话框标题;缺省:输入区缺省
函数返回字符类型。
例要在屏幕上显示图示的对话框:
相应的语句如下:
String * 40
strName= InputBox("请输入你的姓名" + vbCrLf + "然后单击确定" , "输入框" )
也可以使用如下语句:
Dim strName
String * 40, strS1
String * 40
strS1 = "请输入你的姓名"
+ Chr(13) + Chr(10) + "然后单击确定"
strName= InputBox(strS1, "输入框" , , 100,100)
当键盘输入“王晓明”
后,变量strName获得键盘输入的值。
2. MsgBox函数和MsgBox过程
函数形式:变量[%] = MsgBox(提示[,按钮][,标题])
过程形式:MsgBox 提示[,按钮][,标题]
按钮值如下:
函数返回所选按钮整数值:
编一帐号和密码检验程序。
帐号不超过6位数字,有错,清除原内容再输入。
密码输入时在屏幕上以
“*”代替;
若密码错,显示有关信息,
选择“重试”按钮,清除原内容再输入,选择“取消”按钮,
停止运行。
帐号6位,MaxLength为6,LostFocus判断数字IsNumeric函
密码PassWordChar为“*”,MsgBox函数设置密码错对话框。
数据合法性检查中引起程序的死循环
Private Sub Text1_LostFocus() Private Sub Text2_LostFocus()
If Not IsNumeric(Text1) Then If Not IsNumeric(Text2) Then
Text1 = ""
Text2 = ""
Text1.SetFocus
Text1.SetFocus
"" And Not IsNumeric(Text2)
1. If…Then语句(单分支结构)
例:已知两个数x和y,比较它们的大小,
使得x大于y.
x<y Then t=x: x=y: y=t
重要的是学会两个数的交换,若上述语句次序变一下,结果如何?
2. If…Then…Else语句(双分支结构)
计算分段函数:
单分支结构实现:
y=cos(x)-x^3+3*x
If x0 Then
y=sin(x)+sqr (x*x+1)
双分支结构实现:
y=sin(x)+sqr (x*x+1)
y=cos(x)-x^3+3*x
3. If…Then…ElseIf语句(多分支结构)
ElseIf Then
已知变量strC中存放了一个字符,判断该字符是字母字
符、数字字符还是其他字符。
用多分支结构实现:
Ucase(strC) >="A"
And Ucase (strC) ="0"
And strC = 90 T
ark = 60 T
Print "不及格"
Print "及格"
ark >= 80 T
ark = 70 T
Print "及格"
ark >= 70 T
ark = 80 T
ark >= 60 T
Print "及格"
已知百分制成绩mark,显示对应的五级制成绩
哪些正确,哪些错误?
Print "不及格"
Print "不及格"
z为 最 小 数
4.If语句的嵌套
If语句的嵌套是指If或Else后面的语句块中又包含If语句。
形式如下:
已知x,y,z三个数,使得x>y>z
用一个IF语句和一个嵌套的IF语句实现
x<y Then t=x: x=y: y=t
t=y: y=z: z=t
t=x: x=y: y=t
If语句的嵌套注意事项:书写锯齿型;
If 与End If配对。
5. Select Case语句(情况语句)
数值型或字符串表达式
Case 变量或表达式
Case 表达式列表1
Case 表达式列表2
[Case Else
语句块n+1]
End Select
:与同类型的下面四种形式之一:
一组枚举表达式(用逗号分隔)
关系运算符表达式
And Ucase (strC) ="0"
0 And y >0 Then
Select Case x,y
Print "在第一象限"
Case x > 0 And y > 0
Print "在第一象限"
Print "在第二象限"
ElseIf x < 0 And y < 0 Then
Print "在第二象限"
Print "在第三象限"
Case x < 0 And y
(2)Choose函数形式是:
Choose(数字类型变量,值为1的返回值,值为2的返回值……)
例如,Nop是1-4的值,转换成
+ 、-、×、÷运算符的语句如下:
Op= Choose(Nop,"+","-","×","÷")
当值为1,返回字符串“+”,然后放入Op变量中,值为2,返回字
符串“-”,依次类推;当Nop是1-4的非整数,系统自动取Nop的整
数办法在判断;若Nop不在1~4之间,函数返回Null值。
Switch函数形式是:
Switch(条件表达式1,条件表达式1为True时的值
[,条件表达式2,条件表达式2为True时的值……])
1.在选择结构中缺少配对的结束语句
对多行式的If块语句中,应有配对的
End If语句结束。
2. 多边选择ElseIf关键字的书写和条件表达式的表示
ElseIf 不要写成Else If;
多个条件表达式次序问题,见例4.3。
3. Select Case语句的使用
Select Case 后不能出现多个变量;Case子句后不
能出现变量,见例4.6。
循环变量得初值
1. For循环语句
(一般用于循环次数已知)
循环变量< =终值
For 循环变量=初值
[Exit For]
Next 循环变量
循环变量加步长
计算1~100的奇数和,程序段如下:
Dim i %, s%
等价于: Dim i %, s%
s=0 : i = 1
For i = 1 To 100 step 2
=1 时,可省略
终值 ? 初值
? 出了循环,循环控制变量值的问题。
例程序段:
循环执行次数
? Int ( 3 ? 1) ? 4
输出 i的值分别为:
Print “I=“, i
出了循环输出为:
? 在循环体内对循环控制变量可多次引用;但最好不要对其
赋值,否则影响原来的循环控制规律。
改变循环控制变量对循环的影响。
Private Sub Command1_Click()
For i = 1 To 20 Step 2
Print "第"; "次循环i="; i
Print "退出循环后i="; i
正常情况:i=1,3,5,7,9,11,13,15,17,19
现在:i=4,9,14,19
输出可打印的ASCII码字符与它的编码值。
表达式列表
2. Do…Loop循环语句(用于控制循环次数未知)
Do { While|Until }
语句块语句块]
Loop { While|Until}
表达式列表
我国有13亿人口,按人口年增长0.8%计算,多少年
后我国人口超过26亿。
分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n
直接利用标准对数函数求得;也可利用循环求得,程序如下:
Private Sub Command1_Click()
Do While x n;
(2) m除以n得余数r;
(3)若r=0,则n为最大公约数结束;否则执行(4);
(4)m?n,n?r,再重复执行(2)。
辗转相减法
求 m=14 ,n=6 的最大公约数.
Do While (r
Do While m
If m > n Then
r= m mod n
m = m – n
Print "最大公约数=", n
n = n – m
3. 循环的嵌套
一个循环体内又包含了一个完整的循环结构称为循环的嵌套.
例5.13打印九九乘法表.
For i = 1 To 9
For j = 1 To 9
se = i & "×" & j & "=" & i * j
Picture1.Print Tab((j - 1) * 9 + 1);
Picture1.Print
思考:打印上三角或下三角程序如何改动?要打印下三角?
对于循环的嵌套,要注意以下事项:
?内循环变量与外循环变量不能同名;
?外循环必须完全包含内循环,不能交叉;
?不能从循环体外转向循环体内,反之则可以。
For jj=1 To
其他辅助控制语句
1. Go To 语句
Go To {标号|行号}
作用:无条件地转移到标号或行号指定的那行语句.
标号是一个字符序列,行号是一个数字序列.
2.Exit语句
多种形式:
Exit For、Exit Do、Exit Sub、Exit Function等。
作用:退出某种控制结构的执行。
3. End语句
多种形式:
End If、 End Select、 End With、 End Type、
End Sub、 End Function、
作用:End结束一个程序的运行;其余表示某个结构的结束,与
对应的结构语句配对出现。
4.With 语句
形式如下:
作用:对某个对象执行一系列的操作,而不用重复指出对象的
Label1.Height = 2000
Label1.Width = 2000
.Height = 2000
Label1.FontSize=22
.Width = 2000
Label1.Caption = "MyLabel"
.FontSize=22
.Caption = "MyLabel"
常用算法(一)
算法是对某个问题求解过程的描述
1. 累加、连乘
1~100的5或7的倍数的和
3~10的乘积
For i = 1 To 100
For i =3 To 10
If i Mod 5 = 0 Or i Mod 7 = 0 Then t = t * i
Sum = Sum + i
思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行
时会产生什么情况?
例5.14 求自然对数e的近似值,要求其误差小于0.00001,近似公式为
该例题涉及两个问题:
(1)用循环结构求级数和的问题。本例根据某项值的精度来控制
循环的结束与否。
(2)累加:e=e+t
循环体外对累加和的变量清零
连乘:n=n*i
循环体外对连乘积变量置1
Private Sub Form_Click()
Dim i%,n&, t!, e!
‘ e存放累加和、n存放阶乘
‘ i计数器、t第i项的值
Do While t > 0.00001
e = e + t :
‘ 累加、连乘
n = n * i :
Print "计算了
"; " 项的和是
素数是一个大于2,且不能被1和本身以外的整数整除的整数。
判别某数m是否为素数最简单的方法是:
i=2,3,…,m-1判别m能否被i整除,只要有一个能整
除,m不是素数,否则m是素数。
求100以内素数的代码:
求100以内的素数
For m = 2 To 100
For i = 2 To m - 1
If (m Mod i) = 0
m是否为素数
此例用Go To语句对非素数不作判断,若不用GoTo语句,
如何修改程序?
“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各
种情况一一测试,判断是否满足条件,一般采用循环来实现。
百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每
只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方
设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为
3x+2y+0.5z=100
三个未知数,两个方程,此题有若干个解。
解决此类问题采用“试凑法”,把每一种情况都考虑到。
方法一:最简单三个未知数利用三重循环来实现。
方法二:从三个未知数的关系,利用两重循环来实现。
“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转
化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由
新值代替旧值。
例5.17 猴子吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二
天吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,
到第7天要吃时只剩下一个,问小猴共摘下了多少个桃子?
分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再
从倒数第二天的桃子推出倒数第三天的桃子……。设第n天的桃子为xn,那
么它是前一天的桃子数的xn-1
的一半减1,即xn
=( xn-1 +1)×2
5.最小、最大值
在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,
若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个
数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐
随机产生10个100~200之间的数,求最大值。
Private Sub Command1_Click()
For i = 1 To 10
x = Int(Rnd * 101 + 100)
If x > Max Then Max = x
Print "最大值="; Max
例5.18 实际应用,求最短残料。
有一根长度为321米的钢材料,要将它截取成两种规格a、b的长度分
别为17米和27米的短料,每种至少1段,问分隔成a,b各多少段后,
剩余的残料r最少?
分析,该题利用“试凑法”通过二重循环求残料r的最小值正数,残
料不可能是负数。程序如下:
Private Sub Command1_Click()
Dim a%, b%, r!, ia%, ib%
‘ 最小值初值取钢材料的长
For b = 1 To 321 \ 27
‘ b最多的段数
For a = 1 To 321 \ 17 - b
‘ a最多的段数
t = 321 - b * 27 - a * 17
‘ 当前的残料
If t > 0 And t Max
5. 将数组中各元素交换
iA(i)=iA(10-i+1)
iA(10-i+1)=t
一组相同类型的控件组成。
它们共用一个控件名,具有相同
的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。
控件数组共享同样的事件过程,通过返回的下标值区分控件
数组中的各个元素。
Private Sub cmdName _Click(Index As
处理第四个命令按钮的操作
1.在设计时建立控件数组
?在窗体上画出控件,进行属性设置,这是建立的第一个元素
?选中该控件,进行“Copy”进行若干次和“Paste”操作建立了所需
的控件数组元素。
?进行事件过程的编程。
建立含有四个命令按钮的控件数组,当单击某个命令按钮,分
别显示不同的图形或结束操作。
Private Sub Command1_Click(Index As Integer)
Select Case Index
…… "画直线"
…… "画矩形"
…… "画圆"
End Select
2运行时添加控件数组
建立的步骤如下:
?在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数
组,这是建立的第一个元素。
?在编程时通过Load方法添加其余的若干个元素,也可以通过Unload
方法删除某个添加的元素
?每个新添加的控件数组通过Left和Top属性确定其在窗体的位置,
并将Visible 属性设置为True。
例6.4 利用在运行时产生控件数组,构成一个国际象棋棋盘。
当单击棋格,显示对应的序号,并且将所有棋格颜色变反。
6.6 自定义数据类型
一组不同类型变量的集合。相当于C语言中的结构类型;Pascal中
的记录类型。
1.自定义类型的定义
形式如下:
Type 自定义类型名
元素名:表示自定义类型中的一个成员
元素名[(下标)]
下标:表示是数组
类型名:为标准类型
[元素名[(下标)]
As 类型名]
例如,以下定义了一个有关学生信息的自定义类型:
Type StudType
No As Integer
Name As String * 20
Sex As String * 1
Mark(1 To 4) As Single ' 4门课程成绩
Total As Single
(1)自定义类型一般在标准模块(.BAS)中定义,默认是Public;在窗体必须是
(2)自定义类型中的元素类型可以是字符串,但应是定长字符串。
(3)不要将自定义类型名和该类型的变量名混淆,前者表示了如同Integer、
Single等的类型名,后者VB根据变量的类型分配所需的内存空间,存储数据。
(4)自定义类型一般和数组结合使用,简化程序的编写。
2.自定义类型变量的声明和使用
(1) 声明形式:
Dim 变量名
自定义类型名
Dim Student As StudType
形式:变量名.元素名
表示Student变量中的姓名,第4门课程的成绩,则表示如下:
Student.Name,Student.Mark(4)
3.自定义类型数组的应用
例6.5 利用自定义类型数组,编写一个输入、显示、查询程序。
常用算法(二)
例6.6 输入一串字符,统计各字母出现的次数,不区分字母大小写。
? 统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的
下标表示对应的字母,元素的值表示对应字母出现的次数。
? 从输入的字符串中逐一取出字符,转换成大写字符(不区分大小写),进
运行界面:
For I = 1 To le
c = UCase(Mid(Text1, I, 1))
If c >= "A" And c <= "Z" Then
j = Asc(c) - 65 + 1
a(j) = a(j) + 1
2.大量数据的输入
输入一系列的数据,并将它们分离后存放在数组中。对
输入的数据允许修改和自动识别非数字数据。
(1)利用文本框输入和编辑数据,输入时去除非法数字。
(2)输入结束利用Rplace函数去除重复输入的分隔符;
(3)对利用Split函数按分隔符分离,放到数组中;
(4)还可利用Join函数将数组中各元素合并成一个字符串。
3.数组排序(选择法)
例6.8 对已知存放在数组中的n个数,用选择法按递增顺序排序。
(1) 从n个数的序列中选出最小的数(递增),与第1个数交换位置;
(2) 除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2
个数交换位置;
(3) 重复(1)n-1遍,最后构成递增序列。
For i = 1 To n - 1
For j = i+1 To n
If iA(j) < iA(iMin) Then
iA(i) = iA(iMin) :
iA(iMin) = t
排序过程示意图
排序(冒泡法)
例6.9 选择法排序在每一轮排序时找最小(递增次序)数的下标,出了
内循环(一轮排序结束),再交换最小数的位置;而冒泡法排序在每一
轮排序时只要将第一个与其他几个比较,只要次序不对,就交换,出
了内循环,最小数已冒出。排序进行的过程见下表。
For i = 1 To n-1
' 进行n-1轮比较
For j = i+1
' 从n~i个元素进行两两比较
If iA(j) < iA(i) Then
' 若次序不对,则马上进行交换位置
iA(j) = iA(i)
' 出了内循环,一轮排序结束,最小数已冒到最上面
4.数组元素的插入与删除
(1) 插入 例6.10
在有序数组a(1 to n)(原有n-1个元素)插入一个值Key元素,算法:
o查找要插入的位置k(1<=k 0
' 找到用NewS
字符子串替换OldS字符子串
s = Left(s, i - 1) + NewS + Mid(s, i + lenOldS)
i = InStr(s, OldS)
' 找下一个OldS字符子串
MyReplace = s
' 替换后的字符串赋值给函数过程名
End Function
假定S为“abcdefgabcd”,Oolds为“cd”,News为“3”,调用MyReplace函
数的返回值为“ab3efgab3”。上述程序循环执行2次:
(“abcdefgabcd”,“cd”,“3”)
结果 “ab3efgabcd”
(“ab3efgabcd”,“cd”,“3”)
结果 “ab3efgab3”
3.函数过程的调用
函数过程调用同标准函数调用,形式:函数过程名([参数列表])
参数列表:称为实参或实元,它必须与形参个数相同,位置与
类型一一对应。可以是同类型的常量、变量、表达式。
程序运行的流程
Private Sub Command1_Click()
s= "“ VBVB程序设计教程程序设计教程5.05.0版版”" S
”5.0” ”6.0”
Print MyReplace(s, "5.0", "6.0")
MyReplace$(s$, OldS$, NewS$)
Function MyReplace$(s$, OldS$, NewS$)
Dim i%, lenOldS%
lenOldS = Len(OldS)
i = InStr(s, OldS)
Do While i > 0
s= Left(s, i - 1) + NewS + Mid(s, i + lenOldS)
i = InStr(s, OldS)
MyReplace = s
End Function
函数过程的不足:
(1)不是为了获得某个函数值,而是为了某种功能的处理,如例1.1。
要获得多个结果。
编写一个两个数交换的过程供多次调用。
Swap (x,y)子过程的定义
主调程序调用Swap子过程
Public Sub Swap(x, y)
Private Sub Form_Click()
Call Swap (a, b)
Print "a=";a,",b="; b
2.子过程定义
Sub 子过程名[(参数列表)]
局部变量或常数定义
[Exit Sub]
3.子过程的调用
[参数列表]
子过程名(参数列表)
4.子过程与函数过程区别:
(1)函数过程名有值,有类型,在函数体内至少赋值一次;
子过程名无值,无类型,在子过程体内不能对子过程名赋值;
(2)调用时,子过程调用是一句独立的语句。
函数过程不能作为单独的语句加以调用,必须参与表达式运算。
(3)一般当过程有一个函数值,使用函数过程较直观;
反之若过程无返回值,或有多个返回值,使用子过程较直观。
例7.4分别编一计算某级数部分和的子过程和函数过程,并调用。
函数过程实现求部分级数和
子过程实现求部分级数和
Function jishu1(x!, eps#) As Double Sub jishu2(s#, x!, eps#)
Dim n%, s#, t#
Dim n%, t#
n = 1: s = 0: t = 1
n = 1: s = 0: t = 1
Do While (Abs(t) >= eps)
Do While (Abs(t) >= eps)
t = t * x / n
t = t * x / n
jishu1 = s
End Function
f1 = jishu1(2#, 0.000001) ' 调用函数过程
Call jishu2(f2, 2#, 0.000001)‘ 调用子过程
或 jishu2 f2,2#,0.00001
程序运行流程:
Private Sub Command1_Click()
Dim f1#, f2#
找函数名调用jishu1
Function jishu1(x!, eps#) As Doubl
f1 = jishu1(2#, 0.000001)
jishu=表达式
函数名带了值返回
End Function
找子过程名调用jishu2
Call jishu2(f2, 2#, 0.000001)
Sub jishu2(s#, x!, eps#)
Print "f1="; f1, "f2 = "; f2
7.3 参数传递
指主调过程的实参传递给被调过程的形参。
1. 传址与传值
形参得到的是实参的地址,当形参值的改变同时也改变实参的值。
形参得到的是实参的值,形参值的改变不会影响实参的值。
例7.5 两个变量的交换。
Sub Swap1(ByVal
Sub Swap2(x%,ByVal y%)传值
t% = x: x = y: y = t
t% = x: x =a y: y = t
Private Sub Command1_Click()
a% = 10: b% = 20: Swap1 a, b
Print "A1="; a, "B1="; b
a = 10: b = 20:
Swap2 a, b
Print "A2="; a, "B2="; b
例7.6 求若干个数的最大公约数。
2. 数组参数的传递
当参数是数组通过传址方式进行传递。注意:
o 在实参和形参中写数组名,忽略维数的定义,但圆括号不能省。
o 被调过程可通过Lbound和Ubound函数确定实参数组的下、上界。
Lbound和Ubound函数的形式如下:
{L|U}bound(数组名[,维数])
其中:维数指明要测试的是第几维的下标值,缺省是一维数组。
例 7.7 编一函数tim,求任意一维数组中各元素之积。
调用tim,求
Function tim(a()
As Integer)
Dim t#, i%
Sub Command1_Click()
Dim a%(1 To 5),b%(3 To 8)
For i = Lbound(a) To Ubound(a) …
t = t * a(i)
t1# = tim(a())
t2 #= tim(b())
End Function
使用过程注意事项:
1. 确定自定义的过程是子过程还是函数过程
函数过程名有值,子过程名无值。
2.过程中形参的个数和传递方式的确定
过程中参数的作用是实现过程与调用者的数据通信。
(1)从主调程序获得初值,值传递。
(2)将结果返回给主调程序,地址传递。
3. 实参与形参结合时对应问题
个数、类型、位置、次序一一对应。
形参是值传递,对应实参可以是表达式、常量、数组元素。
形参是地址传递,对应实参只能是简单变量。
数组、记录类型、对象只能是地址传递。
实验7.2子过程DeleStr(s1,ByVal s2 As String)形参的确定
s1,要处理的字符串,从主调程序得初值,删除子串后结果在s1
中,所以用地址传递。
s2删除的子串,值传递。
实验7.3函数过程
MaxLength(s)形参的确定
s 要处理的字符串,值传递。
MaxLength函数名,最长的单词长度。
实验7.4回文数的判断中形参的确定
1. 函数过程,用一个形参,值传递对所判断的数字;函数名是否为回
As String) As Boolean
2. 子过程,用两个形参,值传递对所判断的数字,地址传递是否为回
Sub hui(ByVal ss As String, Tag As Boolean)
变量、过程的作用域
作用域:变量、过程随所处的位置不同,可被访问的范围。
1.过程的作用域
窗体/模块级:加Private关键字的过程,只能被定义的窗体
或模块中的过程调用。
全局级:加Public关键字(缺省)的过程,可供该应用程序
的所有窗体和所有标准模块中的过程调用。
2. 变量的作用域
局部变量:在过程内用声明的变量,只能在本过程中使用。
窗体/模块级变量:在“通用声明”段中用Dim语句或用
Private语句 声明的变量,可被本窗体/模块的任何过程访问。
全局变量:在“通用声明”段中用Public语句声明的变量,可
被本应用程序的任何过程或函数访问。
例如在下面一个标准模块文件中不同级的变量声明:
Public Pa As integer
' 全局变量
As string *10
' 窗体/模块级变量
As integer
' 局部变量
As Single ' 局部变量
若在不同级声明相同的变量名,系统按局部、窗体/模块、全局次
Public Temp As integer
' 全局变量
Sub Form_Load()
Dim Temp As Integer
' 局部变量
' 访问局部变量
Form1.Temp=20
' 访问全局变量必须加窗体名
Print Form1.Temp, Temp
3. 静态变量
局部变量声明:
Dim 声明,随过程的调用而分配存贮单元,每次调用都对变量
初始化;过程体结束,变量的内容自动消失,存储单元释放。
Static 声明,每次调用过程,变量保持原来的值。
声明形式:Static 变量名
Static Function 函数过程名([参数列表]) [As 类型]
Static Sub 子过程名[(参数列表)]
过程名前加Static,表示该过程内的局部变量都是静态变量。
Private Sub Form_Click() Private
i% ,isum%
As Integer
For i = 1 To 5
isum = sum(i)
End Function
结果为:1,2,3,4,5
Integer,结果?
过程的直接调用
Sub Command1_Click()
f2(x) Function
x=f2(xx)*3…
f2=f3(x)+3
过程的递归调用
Sub Command1_Click()
Call f1(y)
1.递归的概念
用自身的结构来描述自身就称为“递归”。例对阶乘的定义:
(n ? 1)! ? (n
? 1) ? (n ?
2. 递归过程
过程在自身定义的内部调用自己。
例7.10 编fac(n)=n! 的递归函数
Function fac(n As Integer) As Integer ?
If n = 1 Then
Sub Command1_Click()
Print “fac(4)=”;fac(4)
fac = n * fac(n - 1)
End Function
fac(4)=4*fac(3) fac(3)=3*fac(2) fac(2)=2*fac(1)
fac(4)=4*6
fac(3)=3*2
fac(2)=2*1
在递归处理中,用栈来实现。栈中存放形参、局部变量、返回地址。
递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。
回归过程:不断从栈中弹出当前的参数,直到栈空。
递归算法设计简单,但消耗的机时和占据的内存空间比非递归大。
若上述fac函数中少了
n = 1 Then fac = 1
即仅有语句:
fac = n * fac(n - 1)
或 nr Then Call f(n \ r, r) ' ①
Private Sub Command1_Click()
Call f(100, 8)
例7.12 打印分形图
递归常见错误:
1.递归调用出现“栈溢出”
在递归调用时,其中的参数要向终止方向收敛。
如下求阶乘的递归函数过程:
Public Function fac(n As Integer) As Integer
If n = 1 Then
fac = n * fac(n - 1)
End Function
Private Sub Command1_Click()
Print " fac(5)= " ;fac(5)
Print " fac(5)= " ;fac(-5)
7.6 常用算法(三)
1.数制转换
将一个十进制整数m转换成
r (2~16)进制字符串。
方法:将m不断除
r 取余数,直到商为零,以反序得到结果。
2.例7.14加密和解密
简单加密的思想是:
将每个字母C加一序数K,式子
c=chr(Asc(c)+k),
例如序数k为5,这时
“A”?“F”,“a”?“f”,“B”?“G”…
当加序数后的字母超过“Z”或“z”则
c=hr(Asc(c)+k -26)。
解密为加密的逆过程。
(1)顺序查找
顺序查找根据查找的关键值与数组中的元素逐一比较(数组可无序)
Public Sub Search(a() As Variant, ByVal
key As Variant, index%)
For i = LBound(a) To UBound(a)
If key = a(i) Then
' 找到,元素的下标在index中,结束查找
index = -1
' 找不到, index形参的值为-1
平均查找次数
(2)二分法查找
要查找的数组必须有序。
思想:要查找的关键值Key同数组的中间mid项元素比较:
Keya(mid) low=mid+1
查找区域缩小一半,继续
直到找到或查找区域中无元素.
本例用递归实现7.16
Sub birsearch(a(), low%, high%, key , index%) mid
选择、冒泡、插入法排序等。
前两种排序欲排序的数据全部输入后,再进行排序;
插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。
实现的步骤:
(1)输入欲排序的数据项x;在数组a中找x应所处的位置j;
(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出;
(3)将x放入位置j处,一个数据插入完成;
(4)有若干个数重复(1)~(3)。
5. 例7.18 高次方程求根
有牛顿迭代法、二分法、弦截法等
(1)牛顿迭代法
迭代公式:
xi ?1 ? xi ?
对方程给定一个初值x0作为方程的
近似根,利用迭代公式,求得x1,
x1 ? x 0 ? ?
x1为求得的近似根,否则x1作为x0再迭代。
(2) 二分法求根
已知求根区间[a,b]有一根,每次把求根区间缩小一半,直到找到解
或求根区间足够小。
方法:求[a,b]的中点c,判断:
f(c)=0,,c为求得的根,结束;
f(a)与f(c)同号,则[a,c]无根,代替a;
否则[c,b]无根,c代替b;
使求根区间缩小一半,重复上述步骤,直到区间小于精度。
Public Function halfRoot(ByVal a!, ByVal b!)
Do While Abs(b - a) > 0.00001
c = (a + b) / 2
If f(c) = 0 Then
ElseIf f(a) * f(c) > 0 Then
halfRoot = c
End Function
6.例7.19数值积分
有矩形法、梯形法、抛物线法(又称辛卜生法)等。
梯形法积分的思想是:
将积分区间[a,b]n等分,小区间的长度为,
第 块小矩形的近似面积为:
f ( xi ) ? f ( xi ?1 )
整个积分的结果为这n块小面积的累加,即
f ( x ) ? f ( x? 1)
f ( x i )?
Public Function trapez(ByVal a!, ByVal b!, ByVal n%) As Single
Dim sum!, h!, x!
h = (b - a) / n
sum = (f(a) + f(b)) / 2
For i = 1 To n - 1
x = a + i * h
sum = sum + f(x)
trapez = sum * h
End Function
7.字符串处理
编写一个英文打字训练的程序.要求如下:
(1)在标签框内随机产生30个字母的范文;
(2)当焦点进入文本框时开始计时,并显示当时时间;
(3)在键入文本框按产生的范文输入相应的字母;
(4)当键入满了30个字母后结束计时,禁止向文本框输入
,与范文逐一比较,显示打字的速度和正确率。
重点和难点
1. 确定自定义的过程是子过程还是函数过程
函数过程名有值,子过程名无值。
过程有一个返回值,则使用函数过程;
若返回多个值或无返回值,一般使用子过程。
2.过程中形参的个数和传递方式的确定
过程中参数的作用是实现过程与调用者的数据通信。
(1)从主调程序获得初值,值传递。
(2)将结果返回给主调程序,地址传递。
3. 实参与形参结合时对应问题
个数、类型、位置、次序一一对应。
形参是值传递,对应实参可以是表达式、常量、数组元素。
形参是地址传递,对应实参只能是简单变量。
数组、记录类型、对象只能是地址传递。
4. 变量的作用域问题
局部变量、静态变量、全局变量特点、作用
5. 递归调用出现“栈溢出”
递归过程中有终止的条件和终止时的值或某种操作;
每递归调用一次,其中的参数要向终止方向收敛。
8.1 文件系统控件
8.2 文件的读写
8.3 常用的文件操作语句和函数
驱动器、目录和文件列表框
Sub drvDrive_Change()
dirDirectory.Path = drvDrive.Drive
Sub dirDirectory_Change()
filFile.Path = dirDirectory.Path
Sub Form_Load()
Sub filFile_Click( )
Item = “所有文件(*.*)”
cboType.AddItem Item + Space(20 - Len(Item)) + "*.*" ┆
Item = "窗体文件(*.FRM)"
cboType.AddItem Item + Space(20 - Len(Item)) + "*.FRM"
Item = "位图文件(*.BMP)"
Sub filFile_DblClick( )
cboType.AddItem Item + Space(20 - Len(Item)) + "*.BMP"
cboType.ListIndex = 2
Sub cboType_Click()
filFile.Pattern = Mid(cboType.Text, 21)
例8.1示例程序
1. 驱动器列表框
Drive属性:
[对象.]Drive [= drive]
Change事件:
重新设置Drive属性引发Change事件
2. 目录列表框
[对象.]Path [= pathname]
Change事件:
重新设置Path 属性引发Change事件
3. 文件列表框
Path属性:
显示该路径下的文件。
重新设置Path属性引发PathChange事件。
Pattern属性:
显示的文件类型。
[对象.]Pattern [= value]
重新设置Pattern属性引发PatternChange事件。
例如:filFile.Pattern = "*.frm",显示*.frm文件。
多个文件类型用分号;分界。例如:
FileName属性:
[对象.]FileName [= pathname]
引用时只返回文件名,相当于ilFile.List(filFile .ListIndex),
需用Path属性得到其路径;设置时可带路径。
Click、DblClick事件:
例如,单击输出文件名。
Sub filFile_Click( )
MsgBox filFile.FileName
例如,双击执行可执行程序:
Sub filFile_DblClick( )
ChDir (dirDirectory.Path) ' 改变当前目录
RetVal = Shell(filFile.FileName, 1)
' 执行程序
文件的读写
文件:存储在外部介质上数据的集合。
由若干个相互关联的数据项组成。
例如,由学生的学习成绩信息组成的记录:
2. 文件及其种类
文件是记录的集合。
顺序访问模式:顺序文件,记录可长可短;
随机访问模式:随机文件,记录的长度相同;
二进制访问模式:二进制文件(可认为记录长度为1)。
(1) 顺序文件
按顺序依次把记录写入文件;
按顺序依次把记录读出来。
文件结束标志
文本文件:一行一条记录,记录可长可短,以“换行”
字符为分隔符号。
(2) 随机文件
随机文件可以直接访问文件中的任意一个记录。
记录长度相同;
根据记录号访问;
(3) 二进制文件
直接把二进制码存放在文件中。
顺序访问模式
读出或写入
1. 打开文件
[For 模式]
As [#]文件号 [Len=记录长度]
OUTPUT:写操作;
INPUT:读操作;
APPEND:追加到文件末尾。
(2) 文件号
1~511,可以用FreeFile函数获得下一个可利用的文件号。
(3) 记录长度
小于或等于32767的整数,它指定数据缓冲区的大小。
例如,打开C:\VB\SCORE,供写入数据,指定文件号为#1。
OPEN "C:\VB\SCORE" FOR OUTPUT AS #1
2. 写入命令
Print #文件号,[输出列表]
保存文本框
假定文本框的名称为Text1,文件名为TEST.DAT。
方法1:把整个文本框的内容一次性地写入文件。
Open "TEST.DAT" For Output As #1
Print #1, Text1
方法2:把整个文本框的内容一个字符一个字符地写入文件。
Open "TEST.DAT" For Output As #1
For i=1 To len(Test1)
Print #1,Mid(Text1, i, 1);
Write #文件号,[输出列表]
紧凑格式。数据项之间插入“,”,并加上双引号。
例如,命令:Write #1,"One","Two",123
内容:"One","Two",123
3. 关闭文件
Close [[#]文件号][, [#]文件号]...
例如,Close
#1, #2, #3
4. 读顺序文件
INPUT #文件号,变量列表
把读出的每个数据项分别存放到所对应的变量。
LINE INPUT #文件号,字符串变量
读一行到变量中,主要用来读取文本文件。
INPUT$(读取字符数,#文件号)
随意读取字符
LOF(文件号):返回文件的长度(总字节数)。
EOF(文件号):返回读写位置。
指针在文件尾时,EOF函数为True,否则为False。
读文本文件到文本框
假定文本框名称为Text1,文件名为MYFILE.TXT。
方法1:一行一行读
Text1.Text = ""
Open "MYFILE.TXT" For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
Text1.Text = Text1.Text + InputData+vbCrLf
方法2:一次性读
Text1.Text = ""
Open "MYFILE.TXT" For Input As #1
Text1.Text = Input$( LOF(1), 1)
方法3:一个个字符读
Dim InputData as String*1
Text1.Text = ""
Open "MYFILE.TXT" For Input As #1
Do While Not EOF(1)
InputData= Input$(1,#1)
Text1.Text = Text1.Text + InputData
例8.2读入文本文件。
文件加密程序。
Private Sub File1_DblClick()
tfilename For Input As #1
Text1.Text = ""
Do While Not EOF(1)
indata = Input(1, #1)
Text1.Text = Text1.Text + indata
CommonDialog1.Action = 2
Open CommonDialog1.FileName For
Output As #1
For i = 1 To Len(Text1.Text)
Print #1, Mid(Text1.Text, i, 1);
二、随机文件
For Random
[Len=记录长
[#]文件号,[记录号],变量名
将一个记录变量的内容写到指定的记录位置处。
忽略记录号,则表示在当前记录后的位置插入一条记录。
[#]文件号,[记录号],变量名
忽略记录号,则读出当前记录后的那一条记录。
学生信息管理程序。
追加记录(Command1):将一个学生的信息作为一条记录添
加到随机文件末尾。
显示记录(cmdDisplay):显示在右边文本框(text4)中指定的
三、二进制文件
For Binary As
Put [#]文件号,[位置],变量名
写入长度等于变量长度的数据。
[#]文件号,[位置],变量名
从指定位置开始读出长度等于变量长度的数据
存入变量中,数据读出后移动变量长度位置,如果
忽略位置,则表示从文件指针所指的位置开始读出
数据,数据读出后移动变量长度位置。
Dim char As Byte
Dim FileNum1,FileNum2 as Integer
FileNum1 = FreeFile
'打开源文件
Open "C:\STUDENT.DAT" For Binary As # FileNum1
FileNum2 = FreeFile
' 打开目标文件
Open "C:\STUDENT.BAK" For Binary As # FileNum2
Do While Not EOF(FileNum1)
Get #1, , char
' 从源文件读出一个字节
Put #2, , char
' 将一个字节写入目标文
Close #FileNum1
Close #FileNum2
常用的文件操作语句和函数
1. FileCopy语句
格式:FileCopy
source , destination
功能:复制一个文件。
FileCopy语句不能复制一个已打开的文件。
2. Kill语句
格式:Kill
功能:删除文件。
说明:pathname中可以使用统配符“*”和“?”。
例如:Kill "*.TXT"
3. Name 语句
格式:Name
oldpathname
newpathname
功能:重新命名一个文件或目录。
说明:(1) Name具有移动文件的功能。
(2) 不能使用统配符“*”和“?”,不能对一个已打开的文件上使
Name语句。
4. ChDrive 语句
格式:ChDrive
功能:改变当前驱动器。
说明:如果drive为
“ ”,则当前驱动器将不会改变;如果drive中有多
字 符,则ChDrive只会使用首字母。
5. MkDir 语句
格式:MkDir
功能:创建一个新的目录。
6. ChDir 语句
格式:ChDir
功能:改变当前目录。
例如:ChDir "D:\TMP"
7. RmDir 语句
格式:RmDir
功能:删除一个存在的目录。
说明:只能删除空目录。
8. CurDir函数
格式:CurDir[(drive)]
功能:利用CurDir函数可以确定任何一个驱动器的当前目录。
drive为" " ,则CurDir返回当前驱动器的当前目录。
例8.6 利用ChDrive和ChDir语句改写例9.1中的File1_DblClick()事件过
Sub File1_DblClick()
ChDrive Drive1.Drive ' 设置缺省驱动器
ChDir File1.Path
' 设置缺省目录
RetVal = Shell(File1.FileName, 1)
例8.7 为例9.1添加事件过程File1_MouseDown(),使之支持Del键,即按
下Del键删除选定的文件。
Sub File1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyDelete Then
ChDrive Drive1.Drive
ChDir File1.Path
Kill File1.FileName
File1.Refresh ' 文件删除后更新文件列表框
9.1 程序调试
9.2 常见错误
程 序 调 试
一、错误类型
(1)编辑错误
在编辑代码时,VB会对键入的代码直接进行语法检
查。当发现代码存在打字错误,遗漏关键字或标点符
等语法错误,VB
在Form窗口中弹出一个子窗口,提
示出错信息,出错的那一行变成红色。这时,用户必
须单击“确定”按钮,关闭出错提示窗,然后对出错
行进行修改。
(2)编译错误
编译错误指按了“启动”按钮,VB开始运行程序前,
先编译执行的程序段时,产生的错误。此类错误由于用
户未定义变量、遗漏关键字等原因产生。这时,Visual
Basic也弹出一个子窗口,提示出错信息,出错的那一行
被高亮度显示。
运行时错误指VB在编译通过后,运行代码时发生的错误。
这类错误往往是指令代码执行了一非法操作引起的。例
如类型不匹配、试图打开一个不存在的文件等。
程序运行后,得不到所期望的结果,这说明程序存在逻
辑错误。这类错误往往是程序存在逻辑上的缺陷所引起。
例如,运算符使用不正确、语句的次序不对、循环语句
的起始、终值不正确等。通常,逻辑错误不会产生错误
提示信息,故错误较难排除,需要程序员仔细地阅读分
析程序以及调试。
二、调试错误
(1)VB的三种模式
o 设计模式[设计]
进行程序的界面设计、属性设置、代码编写等。
o 运行模式[运行]
执行“运行/启动”命令,可以查看程序代码,但不能修改
o 中断模式[中断]
当在运行模式,按了“中断”命令或当程序出现运行时错误
时进入中断模式。可以查看代码、修改代码、检查数据。
(2)调试窗口
有三个调试窗口,它们是:“立即”窗口、“监视”窗口、和
“本地”窗口。可单击视图菜单中的对应命令打开这些窗口。
(3)设置断点和逐语句跟踪
断点是告诉VB挂起程序执行的一个标记,当程序执
行到断点处即暂停程序的运行,进入中断模式。设置或
删除断点的步骤:
中断模式下,直接查看某个变量的值,只要把鼠标指
向所关心的变量处,稍停一下,就在鼠标下方显示该变
1. 使用中文标点符号
系统产生“无效字符”,以红色显示。
2. 字母和数字形状相似
小写字母“l”和数字“1”形式相同、小写字母“o”与数字“0”。
3. 对象名称(Name)属性写错
Text1、Text2、Command1
txtInput、txtOutput、cmdOk
4. 对象的属性名、方法名、标准函数名写错
尽量使用自动列出成员功能。正确的系统按规定的大小写表示。
5. 无意形成控件数组
建立控件时小心使用“复制”、“粘贴”按钮。
6. 打开工程时找不到对应的文件
保存文件时先保存窗体.frm文件、再保存.vbp文件,注意路径。
图形操作基础
图形操作基础
每个容器都有一个坐标系,构成一个坐标系,需要三个要
素:坐标原点、坐标度量单位、坐标轴的长度与方向。坐标度
量单位由容器对象的ScaleMode属性决定。缺省时为Twip。每
英寸1440个Twip,20个Twip为一磅。
ScaleHeight
自行定义坐标系
方法一:通过ScaleTop,ScaleLeft,ScaleWidth和ScaleHeight属性实现。
(ScaleTop,ScaleLeft)
例11.1 在Form_Paint 事件中定义窗体的坐标系。
方法二:采用Scale方法来设置坐标系:
[对象.]Scale [(xLeft,yTop)-(xRight,yBotton)]
(xLeft,yTop)
(xRight,yBotton)
例如,Form1.Scale (-200,250) - (300, -150)将建立和例10.1一样的坐标系。
可在程序中使用Scale方法改变坐标系统。当Scale方法不带参数时,取
消用户定义的坐标系,采用缺省坐标系。
改变坐标系后产生的影响:
Line (0, 0) - ()在不同坐标系的效果。
控件对象在坐标系内与X轴和Y轴的位置保持相对不变。
三个图形层放置的对象
工具箱中除标签、线条、形状外的空件对象
工具箱中标签、线条、形状空件对象
由图形方法所绘制的图形
利用图形层的特点,实现悬浮效果。
在命令按钮后放置一个表面色
彩为黑色的标签,如图所示。
同一图形层内控件对象排列顺序称为Z序列。
Zorder方法的语法为:
对象.Zorder [position]
position =0 表示该控件被定位于Z序列的前面;
position = 1表示该控件被定位于Z序列的后面。
例 Zorder方法的使用。
CurrentX,CurrentY属性给出窗体或图形框或打印机在绘图时的当
这两个属性在设计阶段不能使用。
利用CurrentX,CurrentY属性在窗体上随机打印100个“★”。
线宽与线型
窗体、图形框或打印机的DrawWidth属性给出这些对象上所画线的宽
度或点的大小。DrawWidth属性以像素为单位来度量,最小值为1。
用DrawWidth属性改变直线宽度。
实线(缺省)
窗体或图形框或打印机的DrawStyle属性给出这些对象上所画线的形状。
填充与色彩
Visual Basic 默认采用对象的前景色(ForeColor属性)绘图,也
可以通过以下颜色函数指定色彩。
1. RGB(红,绿,蓝)函数
红、绿、蓝三基色使用0~255之间的整数。
2. QBColor(颜色码)
颜色码使用0~15之间的整数。
颜色的渐变过程。
Picture Box(图形框)
主要作用:显示图片、也可作为其他控件的容器。
装入图形:图形框对象.Picture = LoadPicture(“图形文件名”)
删除图形:图形框对象.Picture = LoadPicture( )
Autosize属性设置为True时,图形框能自动调整大小与显示的图片匹配
Image(图像框)
图像框比图形框占用更少的内存块。图像框内不能保存其他控件。
Stretch属性=False,图像框可自动改变大小,以适应其中的图形。
Stretch属性=True, 图形可自动调整尺寸,以适应图像框的大小。
图形框Autosize属性与图像框的Stretch属性对加载图形的影响。
SavePicture对象名.属性,文件名
把绘制或装在窗体、图形框和图像框内的图形保存到Bmp格式文件内。
Line(画线工具)
Shape(形状)
画直线或矩形:
[对象.] Line [ [Step] (x1,y1)]-(x2,y2)[,颜色][,B[F]]
其中:对象可以是窗体或图形框。
(x1,y1) ,(x2,y2)为线段的起终点坐标或矩形的左上角右下坐标。
关键字B表示画矩形,关键字F表示用画矩形的颜色来填充矩形。
用Line方法在一个窗体上画坐标轴与坐标刻度。
用Line方法在一个窗体上画随机射线。
Circle方法
Circle方法
用于画圆、椭圆、
圆弧和扇形。
Pset方法用于画点:
[对象.] Pset [Step] (x,y) [,颜色]
参数(x,y)为所画点的坐标,关键字Step表示采用当前作图位置的相对值。
例11.10 本例用Pset方法绘制阿基米德螺线
11.4.4 Point方法
Point方法用于返回指定点的RGB颜色,其语法格式如下:
[对象.] Point (x,y)
其中参数对象与(x,y)的意义与前述相同。
如果( x, y)点位于对象之外,Point 方法将返回True。
例11.11 用Point方法获取一个区域的信息。
利用例11 .11的处理方法可使图片产生朦胧的效果。
几何图形绘制
利用Line方法和Circle方法及DrawWidth、DrawStyle和DrawMode属性。
例11.12 用Circle方法在窗体上绘制由圆环构成的艺术图案。
算法:等分半径为r的圆周为n份,以等分点为圆心,半径r1绘制n个圆。
例11.13 用Line方法绘制函数f(x)=x2在区间[a,b]之间积分面积图。
为了能绘制任意区间[a,b]上函数f(x)
积分面积图,可在窗体上放置一个
图形框和两个文本框。文本框用于指定积分上下限的值,图形框用于绘图。
根据区间[a,b]的值设置图形框的左上角坐标为(a-1,b?b+1),右下角坐
标为(b+1,-1)。将区间[a,b]等分为n
份,在每一等分点i上,用Line方
法连线到(i,i*i)。
简单动画设计
动画:有计划地移动一个对象包括改变对象的形状和尺寸。
编程时可以采用帧动画原理,即通过一系列静态图辅之以连续快速变化产
生动画效果,也可以通过Move方法改变图形对象的Top及Left属性来移动图
形。动画的速度使用时钟控制。
例11.14 通过改变图形形状演示一个陀螺在图形框内转动。
演示地球图标的转动,在转动时同时使地球图标在窗体内移动,
并变化地球图标的尺寸。
(用PictureClip控件来存放一组图片)
滚动图形通过滚动条的滑块移动,只要设置图形框的Left或Top为滑块当前
值的负数,就可形成图形相对移动。
例11.16 本例在窗体内显示一幅地图,移动滚动条漫游地图。
图形处理技术
1. 操作象素
通过PaintPicture方法访问内置在操作系统中的BitBlt服务程
dpic.PaintPicture spic,dx,dy,dw,dh,sx,sy,sw,sh,rop
参数dpic为目标图形对象,spic为传送源,
dx,dy是传送目标矩形区域左上角坐标(目标控件内任一
dw,dh是目标形矩形区域的宽和高。
sx,sy是要传送图形矩形区域左上角坐标。
sw,sh是要传送图形矩形区域的大小。
vbDstInvert
逆转目标位图
rop指定传送的象素与目标中现有的象素组合模式(如vbNotSrcCopy
复制源位图的逆到目标位图
表所示)。
复制源位图的到目标位图
vbSrcInvert
组合源位图与目标位图
PaintPicture
传送源spic
dpic.PaintPicture spic,dx,dy,dw,dh,sx,sy,sw,sh,rop
dw,dh sw,sh至少8个Twip
复制图形:设置目标区域左上角坐标和大小与源矩形区域相同。
翻转图形:只需改变坐标系,设置图形宽为负数,则水平翻转图
形;图形高度为负数,则上下翻转图形;如果宽度和高度都为负数,则
两个方向翻转图形。
放大图形:改变目标图形的宽度和高度。
旋转图形:要需要对原始图片按行和列的顺序或按列和行的顺序
扫描象素点,然后在目标图形区颠倒行和列的顺序复制象素点。
PaintPicture方法翻转放大位图。
例11.17a 本例使用PaintPicture方法实现百叶窗效果。
使用DrawMode属性绘制图形
DrawMode属性可以将新象素与原有象素用不同的方法组合。两次Xor运
算恢复原有象素。
例11.18 用鼠标选定图形中的区域复制到指定的图片框。
例11.18a 在Xor运算符下图形叠加的效果。
改变窗体对象外观
通过调用Windows的API函数可改变窗体的外观形状。VB应用程序要
访问API函数,必须在VB应用程序中用Declare语句将API函数声明为外部
Declare语句
将API函数声明为外部过程
Visual Basic应用程序
将API函数声明为外部过程,操作流程如下:
通过“工程/添加模块”在当前工程内加入一个BAS模块文件。
执行VB程序组中的API文本浏览器,启动API函数查看工具。
单击“文件|加载文本文件”命令,装入Win32api.Txt文件。
添加指定的API函数到选定项框中,并将函数声明复制到剪贴板。
将剪贴板中的内容粘贴到BAS模块文件中。
文件/加载文本文件
API文本浏览
器应用程序
选定API函数复制到剪贴板
1。选择信息类型
例11.19 建立一个椭圆形状的窗体。
API函数CreateEllipticRgn建立椭圆外形区域,SetWindowRgn显示该区域。
CreateEllipticRgn函数参数说明:
坐标参数采用象数值。实际显示的窗体区域由窗体的Height、Width属性确
定。需要使用ScaleX和ScaleY方法对窗体的度量单位进行转换。
SetWindowRgn函数参数说明:
hWnd窗口句柄,hRgn为窗口形状,bRedraw图形重绘控制,为一逻辑值。
句柄(Handle)可看作一个对象的指针,通过它可访问该对象。可通过API函数
或对象的属性返回句柄。
使用API的区域设置函数不仅可以改变窗体外观,也可以改变控件外观。
在程序中加入后台音乐
uFlags设置
API函数sndPlaySound可以直接播放音频文件或系统声音。sndPlaySound
函数有两个参数,lpszSoundName指定播放的音频文件或系统声音,uFlags
设定播放状态。
非同步播放
找不到指定的语音文件时也不播放预设的声音
不要停止其他正在播放的语音
例11.20 本例示范用sndPlaySound函数播放音频文件。
调用形式:k = sndPlaySound(音频文件名,播放方式)
播放文件为空,就可停止音乐播放
注:本例要求有多媒体设备
数据库操作与编程
数据库概念
数据库管理器
ADO数据控件
结构化查询语言(SQL)
数据库概念
数据库就是一组排列成易于处理和读取的相关信息的集合。
关系模型已经成为数据库设计事实上的标准。
关系型数据库模型
一个数据库可以由多个表组成,表与表之间可以用不同的方式相互
关联。若第一个表中的一条记录内容与第二个表中多条记录的数据相符,
但第二个表中的一条记录只能与第一个表的一条记录的数据相符,这样
的表间关系类型叫做一对多关系。
基本情况表
学生成绩表
一对多关系
若第一个表的一条记录的数据内容可与第二个表的多条记录的数据
相符,反之亦然,这样的表间关系类型叫做多对多关系。
可以将一个或几个表中的数据构成记录集Recordset对象,记录集也
由行和列构成,它与表类似。
990001 万林
990002 庄前
990001 万林
990002 庄前
。。。。。
在VB中数据库内的表格不允许直接访问,而只能通过记录集对象
进行记录的操作和浏览,因此,记录集是一种浏览数据库的工具。
是表格直接显示的数据。它比其他类型记录集处理速度
快,内存开销较大。
一个或者几个表中的记录的引用,动态集和产生动态集的
基本表可以互相更新。是最灵活的,功能最强的记录集。
数据库一瞬间的状态,显示的数据是静态、只读状态,内
存开销最少。
数据库管理器
VB的数据库管理器(Visdata.exe)可用于管理数据库。在VB开发环
境内单击外接程序菜单中的可视化数据管理器命令可打开可视数据管理
建立Student.mdb 数据库,所含学生基本情况表结构如下:
数据库管理器使用小结:
1.建立新表:
鼠标右键单击数据库窗口,弹出菜单,选择对应命令。
2.打开、删除表,修改表结构和建立表间的关联等操作:
右键单击数据库窗口内的表名,弹出菜单,选择对应命令。
3.编辑记录:
双击表名,打开表格输入窗,编辑、增删记录。
能够利用三种记录集对象访问数据库中的数据,连接方法:
Data控件属性说明
指定数据控件所要连接的数据库类型。
DatabaseNam
指定具体使用的数据库文件名,包括所有的路径名。
RecordSource
确定具体可访问的数据,这些数据构成记录集对象。
RecordType
确定记录集类型。
RecordSource属性可以是数据库中的单个表名,也可以是使用
SQL查询语言的一个查询字符串。如果连接的是单表数据库,则
DatabaseName属性应设置为数据库文件所在的子目录名,而具体文件
名放在RecordSource属性中。
数据控件只能连接数据库产生记录集,不能显示记录集中的数据,
要显示记录集中的数据必须通过能与它绑定的控件来实现。
常用绑定控件
绑定控件具有DataSource 和DataField两个重要属性,其作用如下:
绑定控件绑定属性说明
DataSource
指定一个有效的数据控件连接到数据库上。
设置数据库有效的字段与绑定控件建立联系。
990001 万林
。。。。。
Data控件、记录集与绑定控件
例12.1 设计一个窗体显示在11.2节中建立的的Student.mdb数据库中基
本情况表的内容。
例12.2 用一个数据网格控件MsFlexGrid显示Student.mdb数据库中基本
情况表的内容。
Rows 、Cols (网格的行或列数);
FixedRows 、FixedCols (不可卷动的行或列数)。
数据控件的事件
Reposition
显示当前指针的位置。
判断绑定控件内的数据是否发生变化。
12.3.3 数据控件的常用方法
激活对数据控件属性的改变,使对数据库的操作有效。
UpdateControls
将数据从数据库中重新读到被数据控件绑定的控件内。
Vaildate事件。
12.3.4 记录集的属性与方法
RecordCount
2. 记录集的方法
MoveNext黎明
MovePrevious
Data1.Recordset. FindFirst "姓名=' 黎明' "
oFindFirst、FindLast、FindNext、FindPrevious方法可在指定的
Dynaset或Snapshot类型的记录集对象中查找。
oSeek方法在Table表中查找。
Nomarch属性可判定是否找到。
例12.3 在窗体上用Move方法代替数据控件对象的4个箭头的操作。
例12.4 使用Find方法查找记录。
12.3.5 记录的增删改操作990010
填入新数据
Data1.Recordset. AddNew
o 调用Edit方法。
调用Delete方法。
o 给各字段赋值。
移动记录指针。
o 调用Update方法。
例12.5 对数据库提供增、删、改和查找功能。
ADO数据控件
ADO对象模型
ADO是Microsoft处理数据库信息的最新技术,它是一种ActiveX对
象,采用了被称为OLE
DB的数据访问模式。它是数据访问对象DAO、
远程数据对象RDO和开放数据库互连ODBC三种方式的扩展。ADO对
象模型更为简化,不论是存取本地的还是远程的数据,都提供了统一
使用ADO数据控件
在使用ADO数据控件前,必须先通过“工程/部件”菜单命令选择
“Microsoft ADO Data Control 6.0(OLE DB)”选项,将ADO数据控件添
加到工具箱。ADO数据控件与Visual Basic的内部数据控件很相似,它
允许使用ADO数据控件的基本属性快速地创建与数据库的连接。
ADO控件连接设置
能够利用三种记录集对象访问数据库中的数据,连接方法:
ADO控件属性说明
ConnectionString
ADO控件没有DatabaseNam
RecordSource
录集对象Recordset。
连接操作------鼠标右击ADO控件,选择快捷菜单
“ADODC属性”命令,
打开ADO控件属性页窗:
设置完成后,ADO控件的ConnectionString属性为:
Provider=Microsoft.Jet.OLEDB.3.51; Persist Security Info=F
Data Source=Student.mdb
RecordSource属性为:基本情况(表)
ADO控件的的其他操作与Data控件相同。
ADO控件上绑定控件的使用
MSFlexGrid
MSHFlexGrid
网格控件比较
不能进行编辑,有图形功能。
不能进行编辑,可分层处理网格,有图形功能。
可以进行编辑操作,显示文本。
例12.6 使用ADO控件和DataGrid网格控件浏览数据库。
使用数据窗体向导
通过数据窗体向导能建立一个访问数据的窗口。在使用前必须执行
“外接程序/外接程序管理器”命令,将“VB
6数据窗体向导”装入到
“外接程序”菜单中。
步骤1:执行“外接程序”菜单中的“数据窗体向导”命令。
步骤2:选择数据库类型。
步骤3:选择具体的数据库文件。
步骤4:设置应用窗体的工作特性。
步骤5:选择记录源(所需要的实际数据)。
步骤6:选择所需要的操作按钮。
结构化查询语言(SQL)
结构化查询语言
结构化查询语言SQL是操作数据库的工业标准语言。在SQL
语言中,指定要做什么而不是怎么做。不需要告诉SQL如何
访问数据库,只要告诉SQL需要数据库做什么。
利用SQL,可以确切指定想要检索的记录以及按什么顺序检
索。可以在设计或运行时对数据控件使用SQL语句。用户提
出一个查询,数据库返回所有与该查询匹配的记录。
结构化查询语言
常用SQL命令
创建新的表、字段和索引
从数据库表中删除记录。
在数据库中查找满足特定条件的记录。
改变特定记录和字段的值。
常用SQL命令子句
用来为从其中选定记录的表命名。
用来指定所选记录必须满足的条件。
用来把选定的记录分成特定的组。
用来说明每个组需要满足的条件。
用来按特定的次序将记录排序。
用来获得特定字段中的值的平均数
用来返回选定记录的个数
用来返回特定字段中所有值的总和
用来返回指定字段中的最大值
用来返回指定字段中的最小值
使用SELECT语句查询
1.使用SELECT语句
从数据库中的获取数据称为查询数据库,查询数据库通过使用
SELECT语句。常见的SELECT语句形式为:
Select 字段表 From 表名
Where 查询条件
Group By 分组字段
By 字段[Asc|Desc]
可以在设计或代码中对数据控件的RecordSource属性设置SQL
语句,也可将SQL语句赋予对象变量。
在建立SQL语句时,如果需要通过变量构造条件,则需要在应用
程序中将变量连接到SELECT语句。例如:
"Select * From 基本情况 Where 专业 =' " & Text1 & " ' "
例12.8将例11.4中的查找功能改用SQL语句处理。
例12.9用SQL语句从两个数据表中选择数据构成记录集。
例12.10用SQL指令按专业统计Student.mdb数据库各专业的人数。
例12.11 在ADO数据控件上使用SQL语句。将例11.9中的Data控件改
用ADO数据控件,用SQL语句从Student.mdb数据库的两个数据表中
选择数据构成记录集。
例12.12 设计一个窗体,计算Student.mdb数据库内学生成绩表中每个
学生的平均成绩,产生姓名、平均成绩和最低成绩三项数据,按平均
成绩升序排列数据,并用该数据作图。
*2. 使用UPDATE语句修改记录
UPDATE创建一个更新查询来按照某个条件修改特定表中的字段值。
其语法如下:
UPDATE [表集合]
SET [表达式] WHERE
例12.12a 本例把学生平均成绩字段的值增加了10%,并刷新网格。
*3. 使用DELETE语句查询
可以创建删除查询来删除FROM子句中列出的、满足WHERE子句的一
个或多个表中的记录,其语法所示如下:
DELETE [表字段]
FROM [表集合]
例12.12b 删除例11.12a所产生temp表中平均成绩<80的全部记录,并
刷新网格。
使用对象变量访问数据库
DAO对象定义了一个可编程的对象集合。可按下列方法定义数据
库对象和记录集对象,不必在窗体上放置数据控件。
Dim db As Database
Set db = O
penDatabase(数据库)
Database类型的对象db。
Dim rs As R
返回一个记录集对象rs。
Set rs = db.O
ecordset(记录源)
要想在程序中使用DAO对象,必须先为当前工程引用DAO对象
的数据库引擎库。
引用方式:执行工程菜单的引用命令,启动引用对话框,在清单中选
取“Microsoft DAO 3.51 Object Library”项目。
使用DAO模型访问数据库的例题。
例12.12d 使用DAO模型访问数据库,分页显示基本情况表的记录。
本程序通过Bookmark属性设置当前记录的书签,用于当前页上记录的定位。
例12.12e 使用DAO模型访问数据库,约束绑定控件。
记录集的字段对象
可以使用如下几种方法获取:
Recordset.Fields("字段名称" )、Recordset("字段名称")
Recordset.Fields("数字")、Recordset("数字")
在DAO中记录集对象为对象变量,故字段可用rs(j)表示。
ADO的连接方法
Dim db As C
使用ADO对象访问数据库比DAO对象模型更为简化,不论是存取
本地的还是远程的数据,都提供了统一的接口。
Set db = N
连接数据源。
数据源连接字符串
返回一个连接对象db。
Dim rs As R
Set rs = N
打开记录集。
数据源,连接对象,指针,锁类型
返回查询结果。
数据报表设计器属于ActiveX
Designer组中的一个成员,在使用前需
要执行“工程|添加Data
Report”命令,将报表设计器加入到当前工程中
,产生一个DataReport1对象,并在工具箱内产生一个“数据报表”标签
? “标签”控件在报表上放置静态文本
? “文本”控件在报表上连接并显示字段的数据
? “图形”控件可在报表上添加图片
? “线条”控件在报表上绘制直线
? “形状”控件在报表上绘制各种各样的图形外形
? “函数”控件在报表上建立公式。
? 报表标头区包含整个报表最开头的信息,一个报表只有一个报表
头,可使用“标签”控件建立报表名
? 报表注脚区包含整个报表尾部的信息,一个报表也只有一个注脚
? 页标头区设置报表每一页顶部的标题信息;页注脚区包含每一页
底部的信息;细节区包含报表的具体数据,细节区的高度将决定
报表的行高。
例12.13 建立新工程,}

我要回帖

更多关于 vb清除文本框内容 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信