其他常用的 第 10 章 语句及控件
第10章 其他常用的语句及控件 本章主要内容 其他一些常用语句 框架(Frame) 滚动条(ScrollBar) 图形方法和图形控件 菜单设计 工具栏和状态栏 键盘与鼠标事件 对话框 通用对话框(CommonDialog) 文件系统控件
10.1 其他常用语句 10.1.1 强制显式声明变量语句(Option Explicit) 避免因为写错变量名而导致错误 10.1 其他常用语句 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.2 定义变量类型 格式:Def类型标志 字母范围 功能:在模块级声明段中定义变量 (相应数据类型 ) 示例:DefInt m-P 10.1.2 定义变量类型 格式:Def类型标志 字母范围 功能:在模块级声明段中定义变量 (相应数据类型 ) 示例:DefInt m-P 10.1.3 自定义数据类型 用户可以利用Type语句定义自己的数据类型 [Private|Public] Type 数据类型名 元素名1 As 类型名1 [元素名2 As 类型名2] …… End Type
Type Rsk_Rec 编号 As String*3 ’用汉字表示字段名 姓名 As String*8 性别 As Boolean 出生日期 As Date 基本工资 As Long End Type 这里的Rsk_Rec是一个用户定义的数据记录类型,它由5个元素(字段)组成
10.1.4 定义枚举类型 所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值 10.1.4 定义枚举类型 所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值 [Public|Private] Enum 枚举类型名 成员名1 [=常数表达式] 成员名2 [=常数表达式] …… End Enum
例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 "休息日" MsgBox "工作日" End If End Sub
10.1.5 GoTo型控制 包括GoTo语句和On...GoTo语句 1. GoTo语句 语法格式:GoTo {行号|标号} 功能:改变程序的执行顺序,跳转到程序中指定的行开始执行 例10.2 应用GoTo语句示例 Private Sub Form_Load() Show Print "整型数" GoTo Line1 '跳转到标号Line1指定的行 Print "单精度数" Line1: Print "字符串" End Sub
2. On...GoTo语句 On...GoTo语句用来实现分支选择控制(类似于Select...End Select) 功能:根据“数值表达式”的值,控制转移到几个指定的语句行中的一个语句行。 例如 On K GoTo Line1, Line2, Line3 执行过程:将K四舍五入取整,如果其值为1,则转移到Line1标号行;如果为2,则转移到Line2标号行;如果为3,则转移到Line3标号行。如果K的值等于0或大于3,则自动执行本语句的下一个语句
10.1.6 打印机输出 1. 直接输出 把信息直接送往打印机 格式:Printer.Print [表达式表] 10.1.6 打印机输出 1. 直接输出 把信息直接送往打印机 格式:Printer.Print [表达式表] (1)Page属性:设置当前页号 格式:Printer.Page (2)NewPage方法:实现换页操作 格式:Printer.NewPage (3)EndDoc方法:结束文件打印 格式:Printer.EndDoc 例10.3 在打印机上打印文字“计算机程序设计” Private Sub Command1_Click() Printer.FontName = "隶书" Printer.FontSize = 12 Printer.Print “计算机程序设计” '将文本放到Printer对象中 Printer.EndDoc ‘打印结束 End Sub
2. 窗体输出 先把要输出的信息送到窗体上,再用PrintForm方法把窗体上的内容打印出来 格式:[窗体名.]PrintForm 功能:把窗体上的信息输出到打印机
10.1.7 闲置循环与DoEvents语句 VB只有在发生事件时才执行相应的事件过程,如果没有事件发生,则应用程序处于“闲置”状态 所谓闲置循环,就是当程序处于闲置状态时,用一个循环来执行某些操作 为使在闲置循环中也能响应其他操作和事件,VB提供了一个DoEvents语句,其格式为: [窗体号=]DoEvents[()] 功能:在闲置循环中,通过DoEvents语句可以把控制权交给系统去处理所发生的事件
例10.4 闲置循环和DoEvents应用示例 Private Sub Command1_Click() (1) 建立一个文本框和二个命令按钮,两个事件过程: Private Sub Command1_Click() Text1.FontSize = Text1.FontSize + 1 End Sub Private Sub Command2_Click() End (2) 编写Sub Main过程 Private Sub MAIN() Form1.Show Do While True '进入“闲置循环” x = DoEvents '把控制权交给系统去处理所发生的事件 '否则不能处理其他事件 Form1.Text1.Text = Time Loop
(3)把Sub Main设置为启动对象 程序运行后,进入闲置循环,此时将在文本框Text1中不断地显示系统时间。 由于加入DoEvents函数,则可以在执行闲置循环过程中执行其他操作,如重设窗体的大小及最大化/最小化,还能响应命令按钮Command1和Command2的单击事件等。 当其他操作完成后,又会回到闲置循环中继续执行
10.2 框架(Frame) 1. 框架的用途 作为容器放置其他控件对象,将这些控件对象分成可标识的控件组;框架内的所有控件将随框架一起移动、显示和消失。 2. 常用属性 Name属性和Caption属性 3. 事件 可以响应Click和Dblclick事件。 在应用程序中一般不需要编写有关框架的事件过程
例10.5 控制文本的字体、字号及颜色 设计步骤如下: (1)创建应用程序的用户界面和设置对象属性 例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 Text1.FontSize = 20 If Option5.Value Then Text1.ForeColor = RGB(0, 0, 255) Text1.ForeColor = RGB(255, 0, 0) End Sub
10.3 滚动条 1.滚动条的用途 为不能自动支持滚动的应用程序和控件提供滚动功能,也可作为数据输入的工具。 2. 常用属性 水平滚动条(HScrollBar)和垂直滚动条(VScrollBar) 最小值(Min),最大值(Max) ;移动滚动块时,代表的值随之改变 2. 常用属性 (1)Min、Max属性: Min属性的默认值为0,Max属性的默认值为32767。 (2)Value属性:设置滚动块在滚动条中的位置值 (3)SmallChange最小变动值属性 (4)LargeChange最大变动值属性
滚动条控件可以识别10个事件,其中最常用的是Scroll和Change事件 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() Private Sub HScroll3_Change()
10.4 图形方法和图形控件 4种图形控件:PictureBox控件、Image控件、Shape控件和Line控件;图形方法 10.4.1 坐标系 每个对象都定位于存放它的容器内 每个容器都有一个坐标系,它包括坐标原点,x坐标轴和y坐标轴,默认的坐标原点(0,0)在容器对象的左上角 默认单位为Twip(缇),还可以使用磅、像素、厘米等单位 窗体的实际可用的高度和宽度由ScaleHeight和ScaleWidth属性确定 CurrentX和CurrentY属性
10.4.2 图形方法 使用Pset(画点)、Line(画线)、Circle(画圆)等图形方法,可以方便地在窗体和图片框上绘制简单的图形 10.4.2 图形方法 使用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)
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 在窗体上画出一个扇形、圆、椭圆 Const PI = 3.14159 Show 例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
10.4.3 图片框(PictureBox) 2. 常用属性 Picture属性:用于设置在图片框中要显示的图像文件 1. 用途 图片框(PictureBox)和图像框(Image)都是用于显示图形。图片框可以作为其他控件的容器,还可以在图片框上面放置其他控件,这些控件随图片框的移动而移动 2. 常用属性 Picture属性:用于设置在图片框中要显示的图像文件 例如: Picture1.Picture=LoadPicture("图形文件名") Picture1.Picture=LoadPicture() ‘清除图片 Align属性:设置图片框在窗体中的显示方式 AutoSize属性:确定图片框如何与图形相适应
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
图像框(Image)控件的作用与图片框PictureBox控件相似,但它只能用于显示图形,不能作为其他控件的容器 10.4.5 Shape形状控件 VB提供了画图形的基本工具,如Shape(形状控件)、Line(线控件)。 Shape控件和Line控件只用于表面装饰,不支持任何事件。 10.4.6 Line直线控件 Line直线控件可用来在窗体、框架和图片框中绘制简单的线段。
例10.8 设计一个走动的时钟 (1)分析:本例分别以Second、Minite和Hour函数取得系统时间Time的秒、分和时数,再利用计时器控件,按一定时间间隔把时间数转换为图形指针位置和显示出来 (2)创建应用程序的用户界面 计时器(Timer1),形状控件(Shape1),三条线控件(LineS, LineM, LineH) ,四个标签(表示数字)
Timer1的Interval属性为1000(1秒) (3)设置对象属性 Timer1的Interval属性为1000(1秒) Shape1的Shape属性为3-Circle(圆形),FillStyle属性为0-Solid(实心) LineS, LineM, LineH的BorderWidth属性为1,2,4
Private len_S As Single, len_M As Single, len_H As Single (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
x2 = x1 + x = x1 + L * Cos(π/2 – k ) = x1 + L * Sink 计算指针位置的方法 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事件
例10.9 编一程序,进行两个操作数的算术运算练习 例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 '设置位数标记 Private Sub Mnu12_Click() sel1 = 10
Private Sub Mnu13_Click() sel1 = 100 End Sub Private Sub Mnu21_Click() sel2 = "+" '设置运算标记 Private Sub Mnu22_Click() sel2 = "-" Private Sub Mnu23_Click() sel2 = "*"
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 Sub Private Sub Mnu30_Click() ‘“退出”菜单命令 End
10.5.4 运行时改变菜单属性 1. 使菜单命令有效或无效 所有的菜单项都具有Enabled属性,当该属性为True(默认值)时,有效;若为False时,菜单项会变暗,菜单命令无效。 举例: Mnu30.Enabled = False 2. 显示菜单项的复选标记 使用菜单项的Checked属性,可以设置复选标记。 举例:Mnu31.Checked=True 3. 使菜单项不可见 举例:Mnu30.Visible=True
10.5.5 弹出式菜单 弹出式菜单又称为快捷菜单。单击鼠标右键。可以根据右击鼠标时的位置弹出不同的菜单。 10.5.5 弹出式菜单 弹出式菜单又称为快捷菜单。单击鼠标右键。可以根据右击鼠标时的位置弹出不同的菜单。 使用VB提供的菜单编辑器,把某个菜单设置成隐藏。 创建快捷菜单的步骤如下: (1)使用菜单编辑器设计菜单 (2)设置顶层菜单项为不可见,即不选中菜单编辑器里的“可见”选项或在属性窗口中设定Visible属性为False (3)编写与弹出式菜单相关联的MouseUp(释放鼠标)事件过程。格式为: [对象] PopupMenu 菜单名 [, 位置常数][, 横坐标[, 纵坐标]]]
例10.10 在例10.9的基础上,把“位数”菜单改为快捷菜单 例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控件简介 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) 工具栏为用户带来比用菜单更为快速的操作 (1)添加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
状态栏(StatusBar)通常位于窗体的底部,主要用于显示应用程序的各种状态信息。StatusBar控件属于ActiveX控件 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”(即显示大小写状态)
(8)要在运行中使第1个窗格显示“正在运行中”,可在Form_Load()事件过程中加入如下代码: (7)设置第3个窗格(索引为3),其“工具提示文本”为“时间”,“样式”为“5-sbrTime”(即按系统格式显示时间)。 单击“确定”按钮。 (8)要在运行中使第1个窗格显示“正在运行中”,可在Form_Load()事件过程中加入如下代码: StatusBar1.Panels.Item(1)= "正在运行中" 运行程序
10.7 键盘与鼠标事件 窗体和大多数控件都能响应键盘和鼠标事件 10.7.1 键盘事件 1. KeyPress事件 10.7 键盘与鼠标事件 窗体和大多数控件都能响应键盘和鼠标事件 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是一个按下键的代码(不区分大小写)
3. KeyUp事件:用户按下键盘上某个键后释放时触发此事件。事件过程的语法格式类似于KeyDown事件 KeyDown和KeyUp事件除了可以识别KeyPress事件能识别的键,还可识别键盘上的大多数键,如功能键、编辑键、定位键和数字小键盘上的键
10.7.2 鼠标事件 包括:Click、DblClick、MouseMove、MouseDown和MouseUp等事件 10.7.2 鼠标事件 包括: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表示被按下或释放 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
当移动鼠标时发生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 ´启动“拖动”操作 Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, Text1.Drag 2 ´结束“拖动”操作
例10.15 把文本框中的选定文本,拖放到图片框内显示出来 例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 ´在图片框中显示文本框中的选定内容 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)预定义对话框 10.8 对话框 对话框(DialogBox)是应用程序与用户进行交互的主要途径。三种对话框: (1)预定义对话框 使用函数InputBox和MsgBox来实现 (2)通用对话框 (3)用户自定义对话框
10.8.1 通用对话框 通用对话框是一种ActiveX控件,利用它能够很容易地创建下列六种标准对话框:打开(Open),另存为(Save As),颜色(Color),字体(Font),打印机(Printer)和帮助(Help)对话框 1.添加通用对话框控件 在使用之前,应选择“工程”菜单中的“部件”命令先将其添加到工具箱中 当程序运行时,通用对话框是不可见的 通用对话框不仅本身具有一组属性,而且由它产生的各种标准对话框也拥有许多特定属性。 属性设置可以在属性窗口或程序代码中进行,也可以通过“属性页”对话框来设置 2.属性页
(2)Action属性:该属性直接决定打开哪种对话框 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
4. “打开”对话框 (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属性中获取选定的路径及文件名
6. “颜色”对话框 7. “字体”对话框 例10.17 “字体”对话框应用示例 5. “另存为”对话框 (1)建立用户界面及设置对象属性 例10.17 “字体”对话框应用示例 在文本框中输入一段文字,单击命令按钮后,通过“字体”对话框来设置文本框中显示的字体、大小、字形、样式等 (1)建立用户界面及设置对象属性
8. “打印”对话框 9. “帮助”对话框 (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