资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,10,其他常用的,语句及控件,VB中的控件分为两类:一是标准控件,二是ActiveX控件。,默认情况下工具箱中只有标准控件,用户也可通过“工程”菜单中的“部件”命令添加所需的ActiveX控件。,第10章,其他常用的语句及控件,框架(Frame),滚动条(ScrollBar),图形方法和图形控件,菜单设计,工具栏和状态栏,键盘与鼠标事件,对话框,通用/自定义,文件系统控件,其他常用语句,本,章,主,要,内,容,1. 框架的用途,作为容器放置其他控件对象,将这些控件对象分成可标识的控件组;框架内的所有控件将随框架一起移动、显示和消失。,(框架例如:“幻灯片放映“设置放映方式对话框),例10.1 控制文本的字体、字号及颜色,在窗体上设置3个框架Frame1、Frame2和Frame3,框架(Frame),框架,Frame3,框架,Frame2,框架,Frame1,(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.2,滚动条,为不能自动支持滚动的应用程序和控件提供滚动功能,也可作为数据输入的工具。,水平滚动条,(HScrollBar)和,垂直滚动条,(VScrollBar),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.3),用其背景颜色属性BackColor值的改变实现合成颜色的调色,Label1.BackColor = RGB(R, G, B),其值分别由3,个滚动条控制,标签Label1,说明:根据调色原理,根本颜色有红、绿、蓝三种,选择这三种颜色的不同比例,可以合成所需要的任意颜色,(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.3.1 坐标系,每个对象都定位于存放它的容器内,每个容器都有一个坐标系,它包括坐标原点,x坐标轴和y坐标轴,默认的,坐标原点,(0,0)在容器对象的左上角,默认单位为,Twip,(缇),还可以使用磅、像素、厘米等单位,图形方法和图形控件,Y,X,Top,Height,Left,Width,使用Pset(画点)、Line(画线)、Circle(画圆)等图形方法,可以在窗体和图片框上绘制简单的图形,1. Pset(画点)方法,格式:对象名. Pset Step(x,y),颜色,功能:在对象的指定位置(x,y)上按选定的颜色画点,例如:以下语句能在坐标位置(500,900)处画一个红点:,Pset (500,900),RGB(255,0,0),2. Line(画线)方法,格式:对象名. Line (x1,y1)-(x2,y2),颜色,功能:在两个坐标点之间画一条线段。,例如,以下语句可在窗体上画一条斜线,Line (600,600)-(2000,3000),3. Circle(画圆)方法,格式:对象名. Circle Step(x,y),半径,颜色,起点,终点,纵横比,功能:在对象上画圆、椭圆或圆弧,图形方法,图片框(PictureBox)和图像框(Image)都是用于显示图形。图片框可以作为其他控件的容器。,例如,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.3 图片框(PictureBox),图像框(Image),图像框(Image)控件的作用与图片框PictureBox控件相似,但它只能用于显示图形,不能作为其他控件的容器。,10.3.5 Shape形状控件,VB提供了画图形的根本工具,如Shape(形状控件)、Line(线控件)。Shape控件和Line控件只用于外表装饰,不支持任何事件,Shape控件画出矩形、正方形、圆形等图形。,10.3.6 Line直线控件,Line直线控件可用来在窗体、框架和图片框中绘制简单的线段。,(1)分析:本例分别以Second、Minite和Hour函数取得系统时间Time的秒、分和时数,再利用计时器控件,按一定时间间隔把时间数转换为图形指针位置和显示出来,(2)创立应用程序的用户界面,计时器(Timer1),形状控件(Shape1),三条线控件(LineS, LineM, LineH) ,四个标签(表示数字),设计一个走动的时钟,(3)设置对象属性,Timer1的Interval属性为1000(1秒),Shape1的Shape属性为3-Circle(圆形),FillStyle属性为0-Solid(实心),LineS, LineM, LineH的BorderWidth属性为1,2,4,(4)编写程序代码,Option Explicit,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 = 2s / 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,指针,指针末位置,x坐标值,指针始位置,x坐标值,指针长度,窗体左边界,窗体和大多数控件都能响应键盘和鼠标事件,10.4.1 键盘事件,有三种事件处理键盘操作,1. KeyPress事件,2. KeyDown事件:,用户按下键盘上某个键时触发此事件,3. KeyUp事件:,用户按下键盘上某个键后释放时触发此事件,键盘与鼠标事件,Click、DblClick、MouseMove、MouseDown和MouseUp,事件,当移动鼠标时发生MouseMove事件,当按下鼠标任意键时发生MouseDown事件,放开鼠标键时发生MouseUp事件,后三种事件可以区分鼠标的左、右、中键与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),Shift参数,表示当鼠标键被按下或释放时,Shift、Ctrl、Alt键的按下或释放状态。用0、1、2位表示Shift、Ctrl、Alt键,(3),X,Y,表示鼠标指针的当前坐标位置,2 1 0 位,左键,右键,中键,鼠标事件,MouseMove、MouseDown或MouseUp,10.5 菜单设计,应用程序通过菜单为用户提供一组命令,菜单一般分为两种:下拉式菜单和弹出式菜单,10.5.1 下拉式菜单,1.下拉式菜单的构造,下拉式菜单根本构造包括:顶层菜单、菜单项和子菜单,子菜单项,子菜单提示符,访问键,快捷键,分隔线,复选标记,菜单项,顶层菜单,菜单编辑器,设计菜单的工具菜单编辑器,菜单编辑器分为上、下两局部,上半局部用来设置属性,下半局部是菜单显示区,用来显示用户输入的菜单内容。,10.5.3 菜单的Click事件,除分隔线以外的所有菜单元素都能识别Click事件,例10.8 编一程序,进展两个操作数的算术运算练习,设计步骤如下:,(1)创立应用程序的用户界面和设置对象属性 菜单栏向用户提供功能选择,包括运算数的位数,运算符类型(加、减、乘)和退出程序,菜单设计,各个菜单项名称,(2)编写程序代码,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),Text1.Text = Str(a) + sel2 + Str(b) + “= 根据操作数及运算类型组成算式,Select Case sel2 根据运算类型,求运算结果r1,Case +,r1 = a + b,Case -,r1 = a - b,Case *,r1 = a * b,End Select,Text2.Text = ,End Sub,菜单操作后,Sel1 指定位数,= 1 一位数,= 10 二位数,= 100 三位数,Sel2 指定运算类型,= “+ 加法,= “- 减法,= “* 乘法,Private Sub Command2_Click() 答题按钮单击事件,Dim r2 As Long,If Text2.Text = Then,MsgBox 请输入答案,Exit Sub,End If,r2 = Val(Text2.Text) 读取用户的答案,If r1 = r2 Then 判断答案,MsgBox 正确,Else,MsgBox 错误,End If,End Sub,Private Sub Mnu30_Click() “退出菜单命令,End,End Sub,弹出式菜单,弹出式菜单又称为快捷菜单。可以根据右击鼠标时的位置弹出不同的菜单。,使用VB提供的菜单编辑器,把某个菜单设置成隐藏。,创立快捷菜单的步骤如下:,(1)使用菜单编辑器设计菜单,(2)设置顶层菜单项为不可见,即不选中菜单编辑器里的“可见选项或在属性窗口中设定Visible属性为False, (3)编写与弹出式菜单相关联的MouseUp(释放鼠标)事件过程。格式为:,对象 PopupMenu 菜单名 , 位置常数, 横坐标, 纵坐标,例10.9 在例10.8的根底上,把“位数菜单改为快捷菜单,(1)翻开例10.8的应用程序,选定窗体,然后在菜单编辑器中将“位数菜单标题的“可见框中的“取消(即不选中),(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,弹出式,菜单,工具栏和状态栏,分别通过Active X控件ToolBar和StatusBar来实现,10.6.1 Active X控件简介,VB中使用的控件有三类:标准控件、ActiveX控件和可插入对象(如Word文档、Excel工作表等,可当作控件使用),Active X控件是一段可重复使用的程序代码和数据。由Active X技术创立的,可以作为VB工具箱的扩大局部。,Active X控件以单独的文件存在(.ocx),工具栏(ToolBar),工具栏为用户带来比用菜单更为快速的操作,为窗体添加工具栏,应使用工具条(ToolBar)控件和图像控件列表(ImageList)控件(不是标准控件) ,创立工具栏的大致步骤:,(1)添加ToolBar控件和ImageList控件,(2)用ImageList控件保存要使用的图形,(3)创立ToolBar控件,并将ToolBar控件与ImageList控件相关联,创立Button对象,(4)编写Button的Click事件过程。,单击工具栏控件时触发Click事件,单击工具栏上按钮时触发ButtonClick事件,并返回一个Button参数(说明按下哪个按钮),例10.10 使用工具栏,在例10.8的根底上,增加一个工具栏,使之能快速提供“加法、“减法和“乘法运算类型,ImageList控件,存放工具栏所需的图像,工具栏控件,(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),Case 1,sel2 = +,Case 2,sel2 = -,Case 3,el2 = *,End Select,End Sub,10.6.3 状态栏,状态栏(StatusBar)通常位于窗体的底部,主要用于显示应用程序的各种状态信息。StatusBar控件属于ActiveX控件,StatusBar控件由假设干个面板(Panel)组成,每一个面板包含文本和图片。StatusBar控件最多能分成16个Panel对象,使用状态栏,在例10.10的根底上,在窗体底部添加一个状态栏,用于显示当前时间、键盘大小写状态及运行状态。,10.7 对话框,对话框(DialogBox)是应用程序与用户进展交互的主要途径。,三种对话框:,(1)预定义对话框,使用函数InputBox和MsgBox来实现。,(2)通用对话框,通用对话框是一种ActiveX控件,在使用之前,应选择“工程菜单中的“部件命令先将其添加到工具箱中,(选中“Microsoft Common Dialog Control 6.0 ),利用通用对话框能够创立以下六种标准对话框(指定相应的参数,P233):,翻开(Open),另存为(Save As),颜色(Color),字体(Font),打印机(Printer),帮助(Help),(3)用户自定义对话框,建立一个窗体,把窗体设置成对话框特性没有控制菜单框、最大化及最小化按钮,不能改变其大小,见表10.3,在窗体上根据需要放置控件,文件系统控件,VB工具箱中提供了三种文件系统控件:,驱动器列表框(DriveListBox):选择一个驱动器,文件夹列表框(DirListBox):显示一个磁盘的文件夹构造,文件列表框(FileListBox):显示当前文件夹下的所有文件名,这三种控件可以单独使用,也可以组合使用,10.9.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.9 其他常用语句,10.9.2 定义变量类型,格式:Def类型标志 字母范围,例如:DefInt m-P,10.9.3 自定义数据类型,用户可以利用Type语句定义自己的数据类型,Private|Public Type 数据类型名,元素名1 As 类型名1 ,End Type,10.9.4 定义枚举类型,将变量的值一一列举出来,变量的值只限于列举出来的值,Public|Private Enum 枚举类型名,成员名1 =常数表达式 ,End Enum,定义类型语句,包括GoTo语句和On.GoTo语句,1. GoTo语句,语法格式:GoTo 行号|标号,功能:改变程序的执行顺序,跳转到程序中指定的行开场执行,例10.15 应用GoTo语句例如,Private Sub Form_Load(),Show,Print 整型数,GoTo Line1 跳转到标号Line1指定的行,Print 单精度数,Line1:,Print 字符串,End Sub,GoTo型控制,On.GoTo语句用来实现分支选择控制(类似于Select.End Select),语法格式:On 数值表达式 GoTo 行号表|标号表,功能:根据“数值表达式的值,控制转移到几个指定的语句行中的一个语句行。,例如,On K GoTo Line1, Line2, Line3,执行过程:将K四舍五入取整,如果其值为1,那么转移到Line1标号行;如果为2,那么转移到Line2标号行;如果为3,那么转移到Line3标号行。如果K的值等于0或大于3,那么自动执行本语句的下一个语句,2. On.GoTo语句,1. 直接输出,把信息直接送往打印机,格式:Printer.Print 表达式表,(1)Page属性:设置当前页号,(2)NewPage方法:实现换页操作,(3)EndDoc方法:完毕文件打印,格式:Printer.EndDoc,例10.16 在打印机上打印文字“计算机程序设计,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.9.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(),Do While True 进入“闲置循环,x = DoEvents 把控制权交给系统去处理所发生的事件,否那么不能处理其他事件,Form1.Text1.Text = Time,Loop,End Sub,例10.17 闲置循环和DoEvents应用例如,(3)把Sub Main设置为启动对象,程序运行后,进入闲置循环,此时将在文本框Text1中不断地显示系统时间。,由于参加DoEvents函数,那么可以在执行闲置循环过程中执行其他操作,如重设窗体的大小及最大化/最小化,还能响应命令按钮Command1和Command2的单击事件等。,当其他操作完成后,又会回到闲置循环中继续执行,
展开阅读全文