本章主要内容
其他一些常用语句
框架 (Frame)
滚动条 (ScrollBar)
键盘与鼠标事件
通用对话框 (CommonDialog)
文件系统控件
第 10章 其他常用的语句及控件
10.1.1 强制显式声明变量语句 (Option Explicit)
避免因为写错变量名而导致错误
例如,交换变量 a,b的值
Temp=a
a=b
b=Tmp '把 Temp写错成 Tmp
运行结果是使 b的值为 0
Option Explicit '模块级声明
Dim a As Integer,b As Integer,Temp As Integer
.,,
Temp=a
a=b
b=Tmp
运行时 VB就会发出警告, Variable not defined”(变量未定
义 ),只有把 Tmp改为 Temp后才恢复正常
10.1 其他常用语句
格式,Def类型标志 字母范围
功能:在模块级声明段中定义变量 (相应数据类型 )
示例,DefInt m-P
10.1.3 自定义数据类型
用户可以利用 Type
[Private|Public] Type
元素名 1 As 类型名 1
[元素名 2 As 类型名 2]
……
End Type
10.1.2 定义变量类型
Type Rsk_Rec
编号 As String*3 ?用汉字表示字段名
姓名 As String*8
性别 As Boolean
出生日期 As Date
基本工资 As Long
End Type
这里的 Rsk_Rec是一个用户定义的数据记录类型,它由 5个
元素 (字段 )组成
所谓“枚举”是指将变量的值一一列举出来,变量的值只限
于列举出来的值
[Public|Private] Enum 枚举类型名
成员名 1 [=常数表达式 ]
成员名 2 [=常数表达式 ]
……
End Enum
10.1.4 定义枚举类型
例 10.1 应用枚举类型示例
输入一个数字表示星期几,判断输出是“休息日”还是“工
作日”
Private Enum weekdays '定义 Weekdays为枚举类型
Sun
Mon
Tue
Wed
Thu
Fri
Sat
End Enum
Private Sub Command1_Click()
Dim myday As weekdays '定义 Myday为 Weekdays枚举类型
myday = Val(InputBox("今天是星期几 (0~ 6)")) '输入 0~ 6
If myday <Sun Or myday > Sat Then
MsgBox "输入的星期数错误 "
Else
If myday = Sun Or myday = Sat Then
MsgBox "休息日 "
Else
MsgBox "工作日 "
End If
End If
End Sub
包括 GoTo语句和 On...GoTo语句
1,GoTo语句
语法格式,GoTo {行号 |标号 }
功能:改变程序的执行顺序,跳转到程序中指定的行开始执行
例 10.2 应用 GoTo语句示例
Private Sub Form_Load()
Show
Print "整型数 "
GoTo Line1 '跳转到标号 Line1指定的行
Print "单精度数 "
Line1:
Print "字符串 "
End Sub
10.1.5 GoTo型控制
2,On...GoTo语句
On...GoTo语句用来实现分支选择控制 (类似于 Select...End
Select)
语法格式,On 数值表达式 GoTo {行号表 |标号表 }
功能:根据“数值表达式”的值,控制转移到几个指定的语句
行中的一个语句行。
例如
On K GoTo Line1,Line2,Line3
执行过程,将 K四舍五入取整,如果其值为 1,则转移到 Line1
标号行;如果为 2,则转移到 Line2标号行;如果为 3,则转移到
Line3标号行。如果 K的值等于 0或大于 3,则自动执行本语句的
下一个语句
1,直接输出
把信息直接送往打印机
格式,Printer.Print [表达式表 ]
(1)Page属性:设置当前页号
格式,Printer.Page
(2)NewPage方法:实现换页操作
格式,Printer.NewPage
(3)EndDoc方法:结束文件打印
格式,Printer.EndDoc
10.1.6 打印机输出
例 10.3 在打印机上打印文字“计算机程序设计”
Private Sub Command1_Click()
Printer.FontName = "隶书 "
Printer.FontSize = 12
Printer.Print,计算机程序设计” '将文本放到 Printer对象中
Printer.EndDoc ?打印结束
End Sub
2,窗体输出
先把要输出的信息送到窗体上,再用 PrintForm方法把
窗体上的内容打印出来
格式,[窗体名,]PrintForm
功能:把窗体上的信息输出到打印机
VB只有在发生事件时才执行相应的事件过程,如果没
有事件发生,则应用程序处于“闲置”状态
所谓闲置循环,就是当程序处于闲置状态时,用一个循
环来执行某些操作
为使在闲置循环中也能响应其他操作和事件,VB提供
了一个 DoEvents
[窗体号 =]DoEvents[()]
功能:在闲置循环中,通过 DoEvents语句可以把控制权
交给系统去处理所发生的事件
10.1.7 闲置循环与 DoEvents语句
(1) 建立一个文本框和二个命令按钮,两个事件过程:
Private Sub Command1_Click()
Text1.FontSize = Text1.FontSize + 1
End Sub
Private Sub Command2_Click()
End
End Sub
(2) 编写 Sub Main过程
Private Sub MAIN()
Form1.Show
Do While True '进入“闲置循环”
x = DoEvents '把控制权交给系统去处理所发生的事件
'否则不能处理其他事件
Form1.Text1.Text = Time
Loop
End Sub
例 10.4 闲置循环和 DoEvents应用示例
(3)把 Sub Main设置为启动对象
程序运行后,进入闲置循环,此时将在文本框 Text1中
不断地显示系统时间。
由于加入 DoEvents函数,则可以在执行闲置循环过程
中执行其他操作,如重设窗体的大小及最大化 /最小化,还
能响应命令按钮 Command1和 Command2的单击事件等。
当其他操作完成后,又会回到闲置循环中继续执行
1,
作为容器放置其他控件对象,将这些控件对象分成可标
识的控件组;框架内的所有控件将随框架一起移动、显示
2,常用属性
Name属性和 Caption属性
3,
可以响应 Click和 Dblclick
在应用程序中一般不需要编写有关框架的事件过程
10.2 框架 (Frame)
例 10.5 控制文本的字体、字号及颜色
(1)创建应用程序的用户界面和设置对象属性
在窗体上设置 3个框架 Frame1,Frame2和 Frame3
(2)编写程序代码
功能要求,在三个框架中分别选择字体、字号
和颜色,单击“确定”按钮后,文本框中的文本相
应属性会发生变化
Private Sub Form_Load()
Option1.Value = True
Option3.Value = True
Option5.Value = True
Text1.FontName = "宋体 "
Text1.FontSize = 16
Text1.ForeColor = RGB(0,0,255)
End Sub
Private Sub Command1_Click()
If Option1.Value Then
Text1.FontName = "宋体 "
Else
Text1.FontName = "幼圆 "
End If
If Option3.Value Then
Text1.FontSize = 16
Else
Text1.FontSize = 20
End If
If Option5.Value Then
Text1.ForeColor = RGB(0,0,255)
Else
Text1.ForeColor = RGB(255,0,0)
End If
End Sub
10.3 滚动条
1.滚动条的用途
为不能自动支持滚动的应用程序和控件提供滚动功能,也可
水平滚动条 (HScrollBar)和 垂直滚动条 (VScrollBar)
最小值 (Min),最大值 (Max) ;移动滚动块时,代表的值随之
改变
2,常用属性
(1)Min,Max属性,Min属性的默认值为 0,Max属性的默认
值为 32767
(2)Value属性:设置滚动块在滚动条中的位置值
(3)Smallchange最小变动值属性
(4)LargeChange最大变动值属性
3,事件
滚动条控件可以识别 10个事件,其中最常用的是
Scroll和 Change
(1)Scroll事件:当用鼠标拖动滚动块时,即触发
Scroll事件
(2)Change事件:当改变 Value属性值时,即触发
Change事件
当释放滚动块、单击滚动条内空白处或滚动箭头
时,Change事件就会发生。
例 10.6 设计一个调色板应用程序
建立三个水平滚动条作为 红、绿、蓝 三种基本颜色的输
入工具,合成的颜色显示在右边的标签中 (图 10.17),用其背
景颜色属性 BackColor值的改变实现合成颜色的调色
说明,根据调色原理,基本颜色有红、绿、蓝三种,选
择这三种颜色的不同比例,可以合成所需要的任意颜色
(1)创建应用程序的用户界面和设置对象属性
三个水平滚动条名称从上至下分别为 HScroll1,HScroll2、
HScroll3
其 Max属性均设置为 255,Min属性均设置为 0,
SmallChange属性设置为 1,LargeChange属性设置为 10,
Value设置为 0。
显示合成颜色的标签名为 Label1
(2)编写程序代码
功能要求,通过操作 (单击或拖动 )滚动条,直接修改
RGB设置,从而得到标签背景所需的颜色
Private Sub HScroll1_Change()
Label1.BackColor = RGB(HScroll1.Value,_
HScroll2.Value,HScroll3.Value)
End Sub
Private Sub HScroll2_Change()
Label1.BackColor = RGB(HScroll1.Value,_
HScroll2.Value,HScroll3.Value)
End Sub
Private Sub HScroll3_Change()
Label1.BackColor = RGB(HScroll1.Value,_
HScroll2.Value,HScroll3.Value)
End Sub
4种图形控件,PictureBox控件,Image控件,Shape控
件和 Line控件; 图形方法
10.4.1 坐标系
每个对象都定位于存放它的容器内
每个容器都有一个坐标系,它包括坐标原点,x坐标轴和
y坐标轴,默认的 坐标原点 (0,0)在容器对象的左上角
默认单位为 Twip(缇 ),还可以使用磅、像素、厘米等单

窗体的实际可用的 高度和宽度 由 ScaleHeight和
ScaleWidth属性确定
CurrentX和 CurrentY属性
10.4 图形方法和图形控件
使用 Pset(画点 ),Line(画线 ),Circle(画圆 )等图形方法,
可以方便地在窗体和图片框上绘制简单的图形
1,Pset(画点 )方法
格式,[对象名,] Pset [Step](x,y)[,颜色 ]
功能:在对象的指定位置 (x,y)上按选定的颜色画点
参数 Step指定 (x,y)是相对于当前坐标点的坐标
示例,下列语句能在坐标位置 (500,900)处画一个红点:
Pset (500,900),RGB(255,0,0)
CurrentX=100, CurrentY=100
Pset Step(400,800),RGB(255,0,0)
10.4.2 图形方法
2,Line(画线 )方法
格式,[对象名,] Line [(x1,y1)]-(x2,y2)[,颜色 ]
Line (600,600)-(2000,3000)
3,Circle(画圆 )
格式:
[对象名,] Circle [Step](x,y),半径 [,颜色,起点,终点,纵横比 ]
功能,在对象上画圆、椭圆或圆弧
说明,(1)(x,y)是圆、椭圆或圆弧的中心坐标,“半径”是圆、
(2)“起点”、“终点” (以弧度为单位 )指定弧或扇形的起点
或终点位置,其范围从 -2π到 2π。“起点”的默认值为 0,“终
点”的默认值为 2π
(3)纵横比 为圆的纵轴和横轴的尺寸比。当纵横比大于 1时,
椭圆沿垂直方向拉长;当纵横比小于 1时,椭圆沿水平方向拉
长。纵横比的默认值为 1,将产生一个标准圆。
(4)可以省略中间的某个参数,但不能省略分隔参数的逗号
例 10.7 在窗体上画出一个扇形、圆、椭圆
Private Sub Form_Load()
Const PI = 3.14159
Show
Circle (2500,1500),1200,vbBlue,-PI,-PI/2
Circle Step(-600,-600),600
Circle Step(0,0),600,,,,5/25
End Sub
1,
图片框 (PictureBox)和图像框 (Image)都是用于显示图形。
图片框可以作为其他控件的容器,还可以在图片框上面放置
其他控件,这些控件随图片框的移动而移动
2,
Picture属性,用于设置在图片框中要显示的图像文件
Picture1.Picture=LoadPicture("图形文件名 ")
Picture1.Picture=LoadPicture() ?清除图片
Align属性,设置图片框在窗体中的显示方式
AutoSize属性,确定图片框如何与图形相适应
10.4.3 图片框 (PictureBox)
3,
(1)显示和消除图形:见 Picture
(2)用 Print
(3)用图形方法在图片框中画图形
可以使用 Circle(画圆 ),Line(画线 ),Pset(画点 )等方
法在图片框中画图形
示例
Private Sub Form_Load()
Show
Picture1.Print "在图片框内写字和画圆 "
Picture1.Circle(1200,1000),600,RGB(0,0,255)
Picture1.PSet(1200,1000),RGB(255,0,0)
End Sub
10.4.4 图像框 (Image)
图像框 (Image)控件的作用与图片框 PictureBox控件相似,
但它只能用于显示图形,不能作为其他控件的容器
10.4.5 Shape形状控件
VB提供了画图形的基本工具,如 Shape(形状
控件 ),Line(线控件 )。
Shape控件和 Line控件只用于表面装饰,不支
持任何事件。
10.4.6 Line直线控件
Line直线控件可用来在窗体、框架和图片框中
绘制简单的线段。
(1)分析,本例分别以 Second,Minite和 Hour函数取得系统时

Time的秒、分和时数,再利用计时器控件,按一定时间间隔把时
间数转换为图形指针位置和显示出来
(2)创建应用程序的用户界面
计时器 (Timer1),形状控件 (Shape1),三条线控件 (LineS,
LineM,LineH),四个标签 (表示数字 )
例 10.8 设计一个走动的时钟
(3)设置对象属性
Timer1的 Interval属性为 1000(1秒 )
Shape1的 Shape属性为 3-Circle(圆形 ),FillStyle属性为 0-
Solid(实心 )
LineS,LineM,LineH的 BorderWidth属性为 1,2,4
(4)编写程序代码
Option Explicit
Const pi = 3.14159
Private len_S As Single,len_M As Single,len_H As Single
Private Sub Form_Load()
?先取各指针的长度
'秒针长度
len_S = Sqr((LineS.Y2 - LineS.Y1) ^ 2 + (LineS.X2 - LineS.X1) ^ 2)
'分针长度
len_M = Sqr((LineM.Y2 - LineM.Y1) ^ 2 + (LineM.X2 - LineM.X1) ^ 2)
'时针长度
len_H = Sqr((LineH.Y2 - LineH.Y1) ^ 2 + (LineH.X2 - LineH.X1) ^ 2)
Call Timer1_Timer
End Sub
Private Sub Timer1_Timer() '定时器的定时事件过程
Dim s As Single,m As Single,h As Single
Form1.Caption = Time
s = Second(Time)
m = Minute(Time)
h = Hour(Time) + m / 60
LineS.X2 = LineS.X1 + len_S * Sin(pi * s / 30) '绘制秒针
LineS.Y2 = LineS.Y1 - len_S * Cos(pi * s / 30)
LineM.X2 = LineM.X1 + len_M * Sin(pi * m / 30) '绘制分针
LineM.Y2 = LineM.Y1 - len_M * Cos(pi * m / 30)
If h >= 12 Then h = h - 12
LineH.X2 = LineH.X1 + len_H * Sin(pi * h / 6) '绘制时针
LineH.Y2 = LineH.Y1 - len_H * Cos(pi * h / 6)
End Sub
计算指针位置的方法
s秒 K
60秒 2π
K = 2πS / 60 = πs / 30
x2 = x1 + x = x1 + L * Cos(π/2 – k ) = x1 + L * Sink
LineM.X2 = LineM.X1 + Len_s * Sin(pi * s / 30)
x
x2
x1
K (s秒 )
π/2 - K
10.5 菜单设计
应用程序通过菜单为用户提供一组命令
菜单一般分为两种:即 下拉式菜单 和 弹出式菜单
10.5.1 下拉式菜单
1.
下拉式菜单基本结构包括:顶层菜单、菜单项和子菜单
子菜单项
子菜单提示符访问键 快捷键
分隔线
复选标记
菜单项
顶层菜单
10.5.2 菜单编辑器
设计菜单的工具
启动菜单编辑器的方法
菜单编辑器分为上、下两部分,上半部分 用来 设置属性,
下半部分 是 菜单显示区,用来显示用户输入的菜单内容。
“标题” (Caption)输入框
供输入标题,也会同时显示在菜单显示区。菜单项的访问
键,用,(&字符 )”格式
“名称” (Name)输入框
“索引” (Index)
“帮助上下文 ID”输入框
“协调位置”列表框
“复选”框
“可见”框

菜单显示区。内缩符号 (4个点,·…”)
共有 7个按钮
分隔线
10.5.3 菜单的 Click事件
除分隔线以外的所有菜单元素都能识别 Click事件。
例 10.9 编一程序,进行两个操作数的算术运算练习
设计步骤如下:
(1)创建应用程序的用户界面和设置对象属性 菜单栏向用户
提供功能选择,包括 运算数的位数,运算符类型和退出程序
菜单设计
各个菜单项名称
(2)编写程序代码
功能要求
Option Explicit '显式声明变量
Dim sel1 As Integer,sel2 As String
Dim r1 As Long
Private Sub Form_Load()
sel1 = 0 '位数标记
sel2 = "" '运算标记
Randomize
End Sub
Private Sub Mnu11_Click()
sel1 = 1 '设置位数标记
End Sub
Private Sub Mnu12_Click()
sel1 = 10
End Sub
Private Sub Mnu13_Click()
sel1 = 100
End Sub
Private Sub Mnu21_Click()
sel2 = "+" '设置运算标记
End Sub
Private Sub Mnu22_Click()
sel2 = "-"
End Sub
Private Sub Mnu23_Click()
sel2 = "*"
End Sub
Private Sub Command1_Click() '"命题 "按钮单击事件
Dim a As Long,b As Long
If sel1 = 0 Or sel2 = "" Then
MsgBox "先选择运算数的位数和运算类型 "
Exit Sub
End If
a = sel1 + Int(9 * sel1 * Rnd) '随机生成指定位数的操作数
b = sel1 + Int(9 * sel1 * Rnd)
Label1.Caption = Str(a) + sel2 + Str(b) + "=" '组成算式
Select Case sel2 '求运算结果 r1
Case "+"
r1 = a + b
Case "-"
r1 = a - b
Case "*"
r1 = a * b
End Select
Text1.Text = ""
Text1.SetFocus
End Sub
Private Sub Command2_Click() '"答题 "按钮单击事件
Dim r2 As Long
If Text1.Text = "" Then
MsgBox "请输入答案 "
Exit Sub
End If
r2 = Val(Text1.Text) '读取用户的答案
If r1 = r2 Then '判断答案
Label3.Caption = "正确 "
Else
Label3.Caption = "错误 "
End If
End Sub
Private Sub Mnu30_Click() ?“退出”菜单命令
End
End Sub
10.5.4 运行时改变菜单属性
1,使菜单命令有效或无效
所有的菜单项都具有 Enabled属性,当该属性为 True(默认
值 )时,有效;若为 False时,菜单项会变暗,菜单命令无效。
举例,Mnu30.Enabled = False
2,
使用菜单项的 Checked属性,可以设置复选标记。
举例,Mnu31.Checked=True
3,使菜单项不可见
举例,Mnu30.Visible=True
10.5.5 弹出式菜单
弹出式菜单又称为快捷菜单。单击鼠标右键。可以根据右
使用 VB提供的菜单编辑器,把某个菜单设置成隐藏。
(1)使用菜单编辑器设计菜单
(2)设置顶层菜单项为不可见,即不选中菜单编辑器里的
“可见”选项或在属性窗口中设定 Visible属性为 False
(3)编写与弹出式菜单相关联的 MouseUp(释放鼠标 )事件过程 。
[对象 ] PopupMenu 菜单名 [,位置常数 ][,横坐标 [,纵坐标 ]]]
例 10.10 在例 10.9的基础上,把, 位数, 菜单改为快捷菜

(1)打开例 10.9的应用程序,选定窗体,然后在菜单编辑器中
将“位数”菜单标题的“可见”框中的,√”取消 (即不选中 )
(2)增加以下的 MouseUp事件过程代码:
Private Sub Form_MouseUp(Button As Integer,_
Shift As Integer,X As Single,Y As Single)
If Button = 2 Then ?检查是否右击,击左键为 1
PopupMenu mnu10
End If
End Sub
程序运行时,右击窗体空白处,即会弹出快捷菜单,如图
10.11所示
弹出式菜单
10.6 工具栏和状态栏
分别通过 Active X控件 ToolBar和 StatusBar来实现
10.6.1 Active X控件简介
VB中使用的控件有三类,标准控件,ActiveX
控件和可插入对象 (如 Word文档,Excel工作表等,可当
作控件使用 )
Active X控件是一段可重复使用的程序代码和数
据。由 Active X技术创建的,可以作为 VB工具箱的
扩充部分。
Active X控件以单独的文件存在 (.ocx)
10.6.2 工具栏 (ToolBar)
工具栏为用户带来比用菜单更为快速的操作
为窗体添加工具栏,应使用 工具条 (ToolBar)控件
和 图像控件列表 (ImageList)控件 (不是标准控件 )
创建工具栏的 大致步骤
(1)添加 ToolBar控件和 ImageList
(2)用 ImageList
(3)创建 ToolBar控件,并将 ToolBar控件与 ImageList控件
相关联,创建 Button对象
(4)编写 Button的 Click事件过程。
单击工具栏控件时触发 Click事件,单击工具栏上按钮时
触发 ButtonClick事件,并返回一个 Button参数 (表明按下哪个
按钮 )
例 10.11 使用工具栏
在例 10.9的基础上,增加一个工具栏,使之能快
速 提供“加法”、“减法”和“乘法”运算类型
操作步骤:
(1)打开 例 10.9的应用 程序
(2)按照上述创建 ImageList的方法,在窗体上 建立
ImageList1控件,并从 Windows 98系统文件夹中取出图片文件
Hlpcd.gif,Hlpbell.gif和 Hlpglobe.gif(本例采用这三个图片作为
按钮的图形 )
(3) 在窗体上 建立 ToolBar1控件,使之与 ImageList1相关联,
然后在控件中添加“加法”、“减法”和“乘法”三个按钮,
并分别取用 ImageList1中的三个图片。
(4)在原有程序代码的基础上,增加 以下的 ButtonClick事件
过程 代码
Private Sub Toolbar1_ButtonClick(ByVal Button As _
MSComctlLib.Button)
Select Case Button.Index
Case 1
sel2 = "+"
Case 2
sel2 = "-"
Case 3
sel2 = "*"
End Select
End Sub
10.6.3 状态栏
状态栏 (StatusBar)通常位于窗体的底部,主要
用于显示应用程序的各种状态信息。 StatusBar控件
属于 ActiveX控件
StatusBar控件由若干个面板 (Panel)组成,每一
个面板包含文本和图片。 StatusBar控件最多能分成
16个 Panel对象
例 10.12 使用状态栏
在例 10.11的基础上,在窗体底部添加一个状态栏,用于显
示当前时间、键盘大小写状态及运行状态。操作步骤:
(1)打开例 10.9
(2)在窗体上创建 StatusBar1
(3)右击 StatusBar1控件,从快捷菜单中选择
“属性”命令,系统弹出“属性页”对话框
(4)单击“窗格”选项卡,屏幕显示如图 10.16所

(5)设置第 1个窗格 (索引为 1),“工具提示文本”
为“提示信息”,“样式”为,0-sbrText”(即显示
文本和位图 ),其显示内容在运行时由程序代码设置
(6)设置第 2个窗格 (索引为 2),“工具提示文本”
为“大小写状态”,“样式”为,1-sbrCaps”(即显
示大小写状态 )
(7)设置第 3个窗格 (索引为 3),其“工具提示文
本”为“时间”,“样式”为,5-sbrTime”(即按
系统格式显示时间 )。
(8)要在运行中使第 1个窗格显示“正在运行
中”,可在 Form_Load()事件过程中加入如下代
StatusBar1.Panels.Item(1)= "正在运行中 "
运行程序
窗体和大多数控件都能响应键盘和鼠标事件
10.7.1 键盘事件
有三种事件处理键盘操作,即 KeyPress,KeyDown和
KeyUp事件
1,KeyPress事件
2,KeyDown事件,用户按下键盘上某个键时触发此事件
Private Sub Form_KeyDown(KeyCode As Integer,Shift As Integer)
Print ″ 按下键的代码是 ″ ; KeyCode
End Sub
参数 KeyCode是一个按下键的代码(不区分大小写)
10.7 键盘与鼠标事件
3,KeyUp事件,用户按下键盘上某个键后释
放时触发此事件。事件过程的语法格式类似于
KeyDown事件
KeyDown和 KeyUp事件除了可以识别
KeyPress事件能识别的键,还可识别键盘上的
大多数键,如功能键、编辑键、定位键和数字
小键盘上的键
包括,Click,DblClick,MouseMove,MouseDown和
MouseUp等事件
1.鼠标事件过程格式
后三种鼠标事件与 Click,DblClick事件不同的是可以区分
鼠标的左、右、中键与 Shift,Ctrl,Alt键。
鼠标事件过程的语法格式为:
Private Sub 对象名 _鼠标事件 (Button As Integer,Shift As
Integer,
X As Single,Y As Single)
说明,(1) Button参数 表示哪个鼠标键被按下或释放。用 0,1,2位分
别表示鼠标的左、右、中键,用 1或 0表示被按下或释放
10.7.2 鼠标事件
2 1 0 位
······
左键
右键
中键
(2) Shift参数 表示当鼠标键被按下或释放时,Shift,Ctrl、
Alt键的按下或释放状态。用 0,1,2位表示 Shift,Ctrl,Alt

(3) X,Y表示鼠标指针的当前坐标位置
2.鼠标事件
(1)MouseDown和 MouseUp
当按下鼠标任意键时发生 MouseDown事件,放开鼠标
键时发生 MouseUp事件
Private Sub Form_MouseDown(Button As Integer,
Shift As Integer,X As Single,Y As Single)
Command1.Move X,Y
End Sub
(2)MouseMove事件
当移动鼠标时发生 MouseMove事件。伴随鼠标指
针在对象上移动,该事件会连续不断地产生
(3)改变鼠标指针的形状
通过 MousePointer和 MouseIcon属性来设置鼠标指
针形状
对象的 MousePointer属性用于设置鼠标指针的形状
示例,Text1.MousePointer=2
10.7.3 拖放操作
,拖放” (DragDrop)就是使用鼠标将对象从一个地方拖动
到另一个地方再放下 控件拖放是指运行时将控件拖放到新的
位置
它可以分解为两种操作:一个是发生在源对象的“拖”
操作,另一个是发生在目标对象上的“放”操作
1.属性
(1)DragMode属性,用于设置拖放方式
1为自动方式; 0 (默认 )为手动方式,通过代码来设定拖
(2)DragIcon属性,设置拖放操作时显示的图标,默认情况
下是将源对象的灰色轮廓作为拖动图标
2,事件
(1)DragDrop事件,当一个完整的拖放动作完成时触发。
它可用来控制在拖放操作完成时要进行的处理。其事件过程的
Private Sub 对象名 _DragDrop(Source As Control,X As Single,Y As Single)
Source表示正在被拖动的对象,X,Y表示鼠标指针在目
标对象中的坐标。
(2)DragOver事件,当源对象被拖动到目标对象上,在目
标对象上就会触发 DragOver事件。本事件先于 DragDrop事件。
其事件过程的语法格式为:
Private Sub 对象名 _DragOver(Source As Control,X As Single,_
Y As Single,State As Integer)
State参数,0 表示进入,即源对象正进入目标对象内;
1 表示离开,即源对象正在离开目标对象;
2 表示跨越,即源对象在目标范围内移动位置
3,方法
常用的有 Drag方法。 Drag
对象名,Drag [动作]
“动作”取值为 0时,表示取消拖动操作;取值为 1时,启
动拖动操作;取值为 2时,结束拖动操作
例 10.13 采用自动方式,实现文本框的拖动操作
在窗体上建立一个文本框 Text1,其 DragMode属性值设置
为 1(自动方式 ),程序代码:
Private Sub Form_DragDrop(Source As Control,X As Single,Y As Single)
Source.Move X,Y ′移动对象位置
End Sub
例 10.14 采用手动方式,实现文本框的拖动操作
在窗体上建立一个文本框 Text1,其 DragMode属性值设置
为 0(手动方式 ),程序代码:
Private Sub Form_DragDrop(Source As Control,X As Single,Y As Single)
Source.Move X,Y ′移动对象位置
End Sub
Private Sub Text1_MouseDown(Button As Integer,Shift As Integer,
X As Single,Y As Single)
Text1.Drag 1 ′启动“拖动”操作
End Sub
Private Sub Text1_MouseUp(Button As Integer,Shift As Integer,
X As Single,Y As Single)
Text1.Drag 2 ′结束“拖动”操作
End Sub
例 10.15 把文本框中的选定文本,拖放到图
片框内显示出来
(1)在窗体上建立一个图片框 (Picture1)和一个文本框
(Text1),文本框的 Text属性为空
(2)编写程序代码
功能要求,程序运行后,用户在文本框内输入文本和用鼠
标选定 (通过拖动 )文本,然后按住鼠标左键后把文本框拖放到
图片框内,即可把已选定的文本显示在图片框内
程序代码:
Private Sub Form_Load()
Text1.DragMode = 0 ′置手动方式
End Sub
Private Sub Picture1_DragDrop(Source As Control,X As Single,Y As Single)
Picture1.CurrentX = X ′以鼠标位置为当前显示起始位置
Picture1.CurrentY = Y
Picture1.Print Text1.SelText ′在图片框中显示文本框中的选定内容
End Sub
Private Sub Text1_MouseMove(Button As Integer,Shift As Integer,
X As Single,Y As Single)
If Button = 1 Then ′Button为 1
Text1.DragMode = 1 ′置自动方式
End If
End Sub
10.8 对话框
对话框 (DialogBox)是应用程序与用户进行交互的
主要途径。 三种对话框:
(1)预定义对话框 (使用函数 InputBox和 MsgBox来实
现 )
(2)通用对话框
(3)用户自定义对话框
10.8.1 通用对话框
通用对话框是一种 ActiveX控件,利用它能够很容易地创
建下列六种标准对话框:打开 (Open),另存为 (Save As),颜色
(Color),字体 (Font),打印机 (Printer)和帮助 (Help)对话框
1.添加通用对话框控件
在使用之前,应选择“工程”菜单中的“部件”命令先将
其添加到工具箱中
当程序运行时,通用对话框是不可见的
通用对话框不仅本身具有一组属性,而且由它产生的各种标
准对话框也拥有许多特定属性。
属性设置可以在属性窗口或程序代码中进行,也可以通过
“属性页”对话框来设置
2.属性页
3.通用对话框的基本属性和方法
(1)Name属性
(2)Action属性:该属性直接决定打开哪种对话框
对话框类型 Action属性值
无对话框 0
打开”对话框 1 ShowOpen
“另存为”对话框 2 ShowSave
“颜色”对话框 3 ShowColor
“字体”对话框 4 ShowFont
“打印”对话框 5 ShowPrinter
“帮助”对话框 6 ShowHelp
例如,利用通用对话框 CommonDialog1产生一个“打开”对
话框,可以执行下列语句:
CommonDialog1.Action=1
或 CommonDialog1.ShowOpen
(3)DialogTitle属性:该属性用于设置对话框的标题
(4)ConcelError属性:该属性表示用户在使用对话框进行对话
时,单击“取消”按钮是否产生错误信息
(5)通用对话框的方法
4.,打开”对话框
在程序中将通用对话框的 Action属性设置为 1,或用
ShowOpen方法打开,则弹出“打开文件”对话框
“打开”对话框的属性:
FileName,FileTitle,Filter,FilterIndex,IniDir
例 10.16 建立一个, 打开文件, 的对话框
在窗体上添加一个通用对话框和一个“打开”命令按钮,
当单击“打开”按钮时,就会弹出一个“打开文件”的对话

(1) 把 CommonDialog控件添加到工具箱中。然后在窗体上添
加 CommonDialog控件,其默认名称为 CommonDialog1
(2)在窗体上添加一个命令按钮 Command1,其 Caption属性为
(3)“打开”命令按钮 Command1的 Click
Private Sub Command1_Click()
CommonDialog1.DialogTitle = "打开文件,‘设置文件过滤器
CommonDialog1.Filter = "全部文件 |*.*|文本文件 |*.txt"
CommonDialog1.InitDir = "C:\my documents " ?设置默认文件夹
CommonDialog1.ShowOpen ?显示“打开”对话框
End Sub
其中,设置文件过滤器 (Filter)属性的参数格式如下:
描述符 1 | 过滤符 1 | 描述符 2 | 过滤符 2
程序运行后,单击“打开”按钮即弹出如图所示的对话框
从控件的 FileName属性中获取选定的路径及文件名
5.,
6.,颜色”对话框
7.,字体”对话框
例 10.17,字体”对话框应用示例
在文本框中输入一段文字,单击命令按钮后,通过“字体”
对话框来设置文本框中显示的字体、大小、字形、样式等
(1)建立用户界面及设置对象属性
(2)
“设置字体”命令按钮的单击事件过程代码如下:
Private Sub Command1_Click()
CommonDialog1.Flags = CdlCFScreenFonts
CommonDialog1.ShowFont ?打开“字体”对话

Text1.FontName = CommonDialog1.FontName '设置字体名称
Text1.FontSize = CommonDialog1.FontSize ?设置字体大小
Text1.FontBold = CommonDialog1.FontBold '粗体
Text1.FontItalic = CommonDialog1.FontItalic '斜体
End Sub
8.,
9.,帮助”对话框
10.8.2 自定义对话框
创建自定义对话框就是建立一个窗体,在窗体上根据需要
放置控件,通过设置控件属性值来定义窗体的外观
因为对话框没有控制菜单框 (标题栏左侧 )和最大化、最小
化按钮,不能改变其大小,所以应设置以下对话框的属性,见
表 10.3
用窗体自定义对话框,一般步骤,
(1)向工程添加窗体
(2)在窗体上创建其他控件对象,定义对话框的外观
(3)设置窗体和控体对象的属性
(4)在代码窗口中创建事件过
10.9 文件系统控件
VB工具箱中提供了三种文件系统控件,驱动器列表框
(DriveListBox),文件夹列表框 (DirListBox)和 文件列表框
(FileListBox)。
这三种控件可以单独使用,也可以组合使用。图 10.18为三
种控件组合使用的情况
1,用途
(1)驱动器列表框,选择一个驱动器
(2)文件夹列表框
(3)文件列表框,显示当前文件夹下的所有文件名。
2,常用属性
(1)DriveListBox控件的 Drive属性,指定出现在列表框顶端
的驱动器 (即当前驱动器 )
(2)Path属性,可用于 DirListBox控件和 FileListBox控件,
对象名,Path = 路径
(3)FileListBox控件的 Pattern属性,在程序运行时设置
FileListBox
File1.Pattern=”*.exe”
(4)ListIndex属性,设置或返回当前控件上所选择的项目
的索引值。
当 FileListBox没有文件显示时 ListIndex属性值为 1。
(5)ListCount属性,本属性可以用于这三种文件系统控件。
返回控件内所列项目的总数
3,
当这三种控件组合使用时,在改变驱动器列表框中的驱
动器时,文件夹列表框中显示的文件夹也应同步改变。同样,
文件夹列表框中文件夹改变,文件列表框也应 同步改变
实现同步的 Change事件过程如下:
Private Sub Drivel_Change() ?DriveListBox控件的 Change事件
Dir1.Path=Drive1.Drive ?DirListBox控件名为 Dir1
End Sub
Private Sub Dir1.Change() ?DirListBox控件的 Change事件
File1.Path=Dir1.Path ?FileListBox控件名为 File1
End Sub