《其他常用控件及语句.ppt》由会员分享,可在线阅读,更多相关《其他常用控件及语句.ppt(48页珍藏版)》请在三一办公上搜索。
1、第8章 其他常用控件及语句控件在VB程序设计中扮演着重要的角色,它是VB程序的基本组成部分。合理恰当地使用各种不同的控件,熟练掌握各个控件的属性设置,是进行VB程序设计的基础。,8.1 框架,8.1.1 框架(Frame)控件概述框架(Frame)控件是容器类控件,它作为容器放置其它控件对象,将这些控件对象分成可标识的控件组,因此,通常框架控件是一个左上角有标题文字的方框。她它的主要作用是对窗体上的控件进行视觉上的分组,使窗体上的内容更加有条理,便于总体的激活或相互屏蔽。在窗体上创建框架及其内部的控件时,必须先创建框架,然后在其中建立各控件,这样才能使框架和其中的控件捆绑在一起。如果需要用框架
2、对现有的控件分组,则可选定所有控件,将它们剪切到剪切板上,然后选定框架并执行“粘贴”命令,将剪切板上的内容粘贴回框架中。,8.1.2 常用属性1Name属性、Left属性、Top属性、Width属性、Height属性、Visible属性、Enabled属性框架控件的这些属性含义及使用方法和其它控件相同。注意:当框架Enabled属性设置为False时,则运行时框架呈现为灰色,框架内的所有对象均被屏蔽,用户不能对它们进行操作;若框架Visible属性设置False时,则运行时框架及其内部的所有控件全部不可见。2Caption属性框架左上角的标题文字。可以使用“&”建立快捷键。如果此属性值设置为空
3、,则框架为封闭矩形形状。3BorderStyle属性属性值为0:框架不显示边框和标题文字。属性值为1:正常显示,框架显示边框和标题文字(默认值)。,8.1.3 常用事件事件包括Click事件、DblClick事件。框架控件支持Click事件和DblClick事件,用法与其他控件一样。但是框架主要是用于对控件分组,一般情况下是不会对其编写事件代码。【例8.1】编写程序,通过字体样式的选择使文本框中的文本信息以某种样式显示,4种字体样式只能选择其中一种;同时实现对文本的字体大小的控制;另外实现文本的表现效果(如下划线、删除线)。,【例8.1】属性设置,程序代码如下:Private Sub Chck
4、Effect_Click(Index As Integer)If ChckEffect(0).Value=1 Then Txtvb.FontUnderline=True Else Txtvb.FontUnderline=False End If If ChckEffect(1).Value=1 Then Txtvb.FontStrikethru=True Else Txtvb.FontStrikethru=False End IfEnd SubPrivate Sub CmdExit_Click()EndEnd SubPrivate Sub OptSize_Click(Index As Inte
5、ger)Select Case Index Case 0 Txtvb.FontSize=6 Case 1 Txtvb.FontSize=8 Case 2 Txtvb.FontSize=10 Case 3 Txtvb.FontSize=12 End SelectEnd Sub,Private Sub OptStyle_Click(Index As Integer)Select Case Index Case 0 Txtvb.FontBold=False Txtvb.FontItalic=False Case 1 Txtvb.FontBold=True Txtvb.FontItalic=False
6、 Case 2 Txtvb.FontBold=False Txtvb.FontItalic=True Case 3 Txtvb.FontBold=True Txtvb.FontItalic=True End SelectEnd Sub,8.2 滚动条,8.2.1 滚动条(ScrollBar)控件滚动条分为水平滚动条(HScrollBar)和垂直滚动条(VScrollBar),这两个滚动条控件除了类型名不同、放置的方向不同外,其他都一样。如图所示。水平滚动条和垂直滚动条常常与需要浏览信息、但又不支持滚动功能的控件(如图片框)配合使用,为它们提供滚动浏览信息的功能。当然,滚动条也可作为用户信息输入
7、的控件,实现连续地调整数据。这两种滚动条在外观上很相似,都是由一个滚动滑块和两端的滚动箭头组成,只不过水平滚动条水平放置,而垂直滚动条垂直放置。用户可以通过改变滚动滑块在滚动条中的位置,从而改变滚动条当前的取值。缺省情况下,水平滚动条的值从左向右递增,垂直滚动条从上向下递增。它们有着许多相同的属性、方法和事件。,8.2.2 常用属性1Value属性Value属性是滚动条最重要的属性,它反映了滚动条的当前值,滚动滑块的位置大体能反映这个值,这个值是一个整数。对于水平滚动条,当滚动滑块处于最左边时,该属性取最小值,当滚动滑块处于最右边时,该属性取最大值;对于垂直滚动条,当滚动滑块处于最上边时,该属
8、性取最小值,当滚动滑块处于最下边时,该属性取最大值。当滚动滑块处于中间的某个位置时,Value的值界于最小值和最大值之间,并严格按照比例设定滚动滑块在滚动条中的位置。改变滚动条Value属性的方法有4种:(1)直接在属性窗口中设定Value值。(2)鼠标单击滚动条两端的箭头键可改变滚动滑块的位置。(3)将滚动滑块沿滚动条拖动到某个位置。(4)鼠标单击滚动条中滚动滑块与两端箭头键之间的空白部分,使滚动滑块快速移动。,2Min属性Min属性用于设定滚动条Value属性的最小取值。3Max属性Max属性用于设定滚动条Value属性的最大取值。缺省情况下,若未对Max和Min属性进行设置,Value属
9、性的取值在-3276832767之间。默认设置值:Max为32767,Min为0。若希望垂直滚动条的滚动滑块向上移动时Vlue属性值递增,可以设定Max属性值小于Min属性值。4SmallChange属性SmallChange属性值确定用户用鼠标单击滚动条两端箭头键时,Vlaue属性值的变化量。5LargeChange属性LargeChange属性值确定用户用鼠标滚动条中滚动滑块与两端箭头键之间的空白部分时,Vlaue属性值的变化量。SmallChange属性和LargeChange属性的取值范围为132767之间的整数。缺省情况下,两个属性值都为1。一般情况下,LargeChange属性值的
10、设置应大于SmallChange属性值。,8.2.3 常用事件1Change事件当滚动条Value属性值发生变化时,触发Change事件。2Scroll事件当滚动滑块的位置发生变化时,触发Scroll事件。两个事件触发的不同在于:如果拖动滚动滑块的位置,就会触发Scroll事件,但是不会触发Change事件;但是当松开鼠标键时,就会触发Change事件。,【例8.2】在一个文本框中显示出当前滚动滑块的位置(所代表的数据)。,【例8.2】属性设置,程序代码如下:Private Sub HScroll1_Change()Text1.Text=HScroll1.ValueEnd SubPrivate
11、 Sub HScroll1_Scroll()Text1.Text=HScroll1.ValueEnd Sub,【例8.3】设计一个通过滚动条调整显示区域颜色的程序。设置控件属性在窗体上建立3个水平滚动条、3个标签、1个框架和1个文本框。,【例8.3】属性设置,程序代码如下:Private Sub Form_Load()changecolorEnd SubSub changecolor()Text1.BackColor=RGB(HScroll1.Value,_ HScroll2.Value,HScroll3.Value)Label1.Caption=红色值:&HScroll1.Value Lab
12、el2.Caption=绿色值:&HScroll2.Value Label3.Caption=蓝色值:&HScroll3.ValueEnd SubPrivate Sub HScroll1_Change()changecolorEnd SubPrivate Sub HScroll1_Scroll()changecolorEnd SubPrivate Sub HScroll2_Change()changecolorEnd SubPrivate Sub HScroll2_Scroll()changecolorEnd SubPrivate Sub HScroll3_Change()changecolo
13、rEnd SubPrivate Sub HScroll3_Scroll()changecolorEnd Sub,8.3 图形方法和图形控件,VB提供了相当丰富的图形功能,既可通过图形控件进行图形操作,也可通过图形方法在窗体或图片框上输出文字或图形。灵活使用这些图形控件和图形方法,不仅可以完成许多特殊的功能,而且可以Windows的程序界面增加活力。8.3.1 度量系统由于显示器种类多样,为了使应用程序不依赖设备,必须对分辨率进行某种抽象。VB使用的缺省度量单位是Twip(缇),1英寸等于1440Twip。但是Twip不一定对每个程序都合适(例如对于位图绘制的程序“像素点”是最好的度量单位,像素
14、点是屏幕上最小的点)。VB支持多种度量单位,以备不同度量的需要。窗体、图片框或打印对象中的任何对象 必须使用它的ScaleMode属性来指定度量单位。每个窗体、图片框或打印对象的缺省度量单位都是Twip。表8-4列出了ScaleMode设置值与度量单位对应关系。ScaleMode=0是vbVB提供给设计者的自定义的度量单位,当用户ScaleTop、ScaleLeft、ScaleWidth、ScaleHeight中的一个或多个改变时,ScaleMode属性值将自动设为0。,8.3.2 坐标系统绘图语句所绘制的图形,通常是通过容器控件(窗体、图片框)输出的,而每个容器控件都有一个坐标系统,坐标系是
15、在容器控件中绘图必备的条件。一个坐标系包括坐标度量单位、坐标原点、坐标轴的长度与方向等要素。由坐标的原点、长度和方向3个要素确定绘制的图形在容器中的位置。VB坐标系统是以屏幕左上角为原点(0,0),而坐标轴x、y轴分别是以向右、向下方向增加。每个对象定位于存放它的“容器”中,对象的Top、Left属性确定了该对象左上角在“容器”中的位置。,对象的坐标系统允许由用户自定义,有2种方法用于坐标系统的定义。1通过对象的ScaleTop、ScaleLeft、ScaleWidth和ScaleHeight属性来实现属性ScaleTop、ScaleLeft的值用于控制对象左上角坐标,所有对象的ScaleTo
16、p、ScaleLeft属性的缺省值为0,坐标原点在对象的左上角。当改变ScaleTop或ScaleLeft的值后,坐标系的x轴或y轴按此值平移形成新的坐标原点。右下角坐标值为(ScaleLeft_ScaleWidth ScaleLeft+ScaleWidth,ScaleTop+ScaleHeight)。根据左上角和右下角坐标值的大小自动设置坐标轴的正向。x轴和y轴的度量单位分别为1/ScaleWidth和1/ScaleHeight。,【例8.4】定义一个系统坐标,其原点为(0,0),使原点在窗体的中央位置。程序代码如下:Private Sub Form_Load()Form1.ScaleLef
17、t=-100 Form1.ScaleTop=100 Form1.ScaleHeight=-200 Form1.ScaleWidth=200 Line(0,100)-(0,-100)Line(100,0)-(-100,0)End Sub,2采用Scale方法设置坐标系统Scale方法是用户建立坐标系统最方便的方法,其格式如下:对象Scale(xLeft,yTop)(xRight,yButton)其中:对象可以是窗体、图片框或打印机。如果缺省该项,则指具有焦点的窗体对象。(xLeft,yTop)表示左上角的坐标值,(xRight,yButton)表示右下角的坐标值,均为单精度数值。系统会根据给定的
18、坐标参数自动计算出ScaleLeft、SclaeTop、ScaleWidth、ScaleHeight的值:ScaleLeft=xLeftScaleTop=yTopScaleWidth=xRight-xLeftScaleHeight=yBotton-yTop,8.3.3 绘图属性除了坐标系之外,与绘图相关的容器属性也要了解,这样才能输出所需的图形。1CurrentX、CurrentY属性CurrentX、CurrentY属性给出在容器内绘图时的当前横坐标、纵坐标,这两个属性只能在程序中设置。CurrentX、CurrentY属性的设置格式:对象 CurrentX=x对象 CurrentY=y功能
19、:设置对象的CurrentX和CurrentY的值。2DrawWidth(线宽)属性窗体、图片框或打印机的DrawWidth属性给出这些对象上所画线的宽度或点的大小。DrawWidth属性格式:对象DrawWidth=n功能:设置容器输出的线宽。其中:n为数值表达式,其范围为132767,该值以像素为单位表示线宽。默认值为,即1个像素宽。3DrawStyle(线型)属性窗体、图片框或打印机的DrawStyle属性给出这些对象上所画线的形状,以上线型仅当DrawWidth属性值为时才能为1时才能产生。当DrawWidth属性值大于1且DrawStyle属性值为14时,都只能产生实线效果。当Dra
20、wWidth的值大于1,而DrawStyle属性值为6时,所画的内收实线仅当是封闭线时起作用。,4AutoRedraw属性AutoRedraw属性用于设置和返回对象或控件是否能自动重绘。若AutoRedraw属性值为True时,使Form对象或PictureBox控件的自动重绘有效,否则对不接收重绘事件(Paint).5FillStyle和FillColor属性封闭图形的填充方式由FillStyle和FillColor属性决定。FillColor属性指定填充图案的颜色,缺省的颜色ForeColor相同。FillStyle属性指定填充的图案,共有8种内部图案,,6色彩VB默认采用对的前景色(Fo
21、reColor属性)绘图,也可通过以下方式指定。(1)RGB函数RGB函数通过红、绿、蓝3基色混合产生某种颜色,其函数格式为:RGB(a,b,c)其中:a、b、c代表红、绿、蓝3色成分,取值范围为0255之间的整数。例如RGB(0,0,0)返回黑色,RGB(255,255,255)返回白色。(2)QBColor函数QBColor函数QuickBasic所使用的16种颜色,其函数格式为:QBColor(x)其中:x称之为颜色代码,取值范围为015之间的整数,每个颜色代码代表一种颜色。(3)用长整型代码RGB函数与QBColor函数实际上都返回一个十六进制的长整数。这个数从左到右,每2位一组代表一
22、种基色,它们的顺序是蓝绿红。因此也可直接使用6位的十六进制颜色代码。在色彩的属性设置框中可以看到这些代码(例如&H000000&表示黑色,&H0000FF&表示红色等)。,8.3.4 图形控件为了在应用程序中创作图形效果,VB提供了4个控件以简化与图形有关的操作,它们是PictureBox控件、Image控件、Shape控件、Line控件,每一个控件都适用于一个特定的目的。Image、Shape和Line控件需要较少的系统资源,且包含PictureBox中可用的属性、方法和事件的子集,因此,比PictureBox控件显示得快。图形控件的优点是,创建图形所用的代码比图形方法用的少。例如Circl
23、e方法要求在运行时用代码创建圆;而用形状控件,只需在设计时简单地将它拖到窗体上,并设置其属性即可。VB提供的图片框和图像框可以显示位图、图标、图元文件中的图形,也可处理GIF和JPEG格式的图形文件。,1Line(直线)控件在设计时可以用Line控件来画线,长度、宽度、颜色、虚实线等属性均可设置。画线操作的步骤如下:(1)单击工具箱上的Line控件图标;(2)移动鼠标到需要画线的起始位置;(3)按下鼠标左键并拖曳鼠标到需要画线的结束位置,放开鼠标即可。2Shape(形状)控件Shape控件可用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。当Shape控件放置到窗体时显示为一个矩形,通过Sh
24、ape属性可确定所需的几何形状。,【例8.5】产生Shape控件的6种形状,如图。在窗体上添加一Shape控件,Index属性设置为0。程序代码如下:Private Sub Form_Activate()Dim i As Integer,r As Integer r=50 Print 0 1 2 3 4 5 Shape1(0).Shape=0:Shape1(0).FillStyle=2 Shape1(0).FillColor=vbRed For i=1 To 5 Load Shape1(i)Shape1(i).Left=Shape1(i-1).Left+600 Shape1(i).Shape=
25、i Shape1(i).FillStyle=i+2 Shape1(i).FillColor=RGB(r+i*30,0,0)Shape1(i).Visible=True Next iEnd Sub,3PictureBox(图片框)控件PictureBox控件的主要作用是为用户显示图片,也可作为其它控件的容器。实际显示的图片由Picture属性决定。Picture属性可设置被显示的图片文件名(包括可选的路径名)。在代码中可以LoadPicture()在图片框中装载图形文件,其格式如下:Picture=LoadPicture(图形文件名)为了在运行时从图片框中删除一个图片,可用以下方式实现:Pict
26、ure=LoadPicture()Picture控件不提供滚动条。也不能伸展被装入的图片以适应控件的大小,但是可以用图片框AutoSize属性调整图片框的大小以适应图片的大小。当AutoSize设置True时,图片框能够自动调整大小与显示的图片相匹配;当当AutoSize设置False时,图片框不能自动调整大小来适应其中的图片,加载到图片框中的图片保持原始尺寸,这就意味着如果图片比图片框大,则超过的部分将被剪裁掉。4Image(图像框)控件在窗体上使用图像框的步骤与图片框相同,但是图像框比图片框占用更少的内存,描绘得更快,与图片框不同的是图像框内不能放置其它控件。图像框没有AutoSize属性
27、,但有Stretch属性。Stretch属性设置为False时,图像框可自动改变大小以适应其中的图片;Stretch属性设置为True时,加载到图像框的图片可自动调整尺寸以适应图像框的大小。如果图像框内装入的图形较大,在Forme比较小的情况下,图像框的边界会被窗体的边界截断。,8.3.5 图形方法1Pset方法Pset方法用于画点,其格式如下:对象Pset Step(x,y),颜色功能:在由指定的容器内,在坐标为(x,y)的位置上画一个点;若省略,则默认为窗体。说明:关键字Step表示采用当前作图位置的相对值;采用背景颜色可清除某个位置上的点;利用Pset方法可以画任意曲线。,【例8.6】利
28、用Pset方法绘制阿基米德螺线。程序代码如下:Private Sub Form_Resize()Dim i As Integer,j As Single Dim x As Single,y As Single DrawWidth=2 For i=0 To 5000 PSet(i,600),vbRed Next i For j=0 To 20 Step 0.01 y=30*j*Cos(j)+600 x=50*j*Sin(j)+1200 PSet(x,y),RGB(0,0,255)Next jEnd Sub,2Line方法Line方法用于画直线或矩形,其格式如下:对象名Line Step(x1,y
29、1)-(x2,y2),颜色,BF功能:在由指定的容器内,在坐标系中以(x1,y1)为起点,(x2,y2)为终点画一条线段或一个矩形。说明:(1)(x1,y1)为线段的起点坐标或矩形的左上角坐标,(x2,y2)为线段的终点坐标或矩形的右上角坐标;(2)关键字Step表示采用当前作图位置的相对值;(3)“B”表示画矩形,“F”表示用画矩形的颜色来填充矩形。缺省F,则矩形的颜色由FillColor和FillStyle属性决定;例如:Line(100,100)-(1000,1000),vbRed 画红色线段Line(100,100)-(1000,1000),vbRed,B 画红色矩形框Line(100
30、,100)-(1000,1000),vbRed,BF 画红色矩形块,3Circle方法Circle方法用于画圆、椭圆、圆弧或扇形,其格式如下:对象名Circle Step(x,y),半径,颜色,起始角,终止角,长短轴比率功能:在由指定的容器内,在坐标系中以(x,y)为圆心画圆、椭圆、圆弧或扇形。说明:(1)缺省,则默认为当前窗体;(2)(x,y)为圆心坐标,关键字Step表示采用当前作图位置的相对值;(3)圆弧和扇形通过“起始角”、“终止角”控制。当“起始角”、“终止角”取值在02时为圆弧;当在“起始角”、“终止角”取值前加一个负号时,画出扇形,负号表示画圆心到圆弧的径向线。(4)椭圆通过长短
31、轴的比率控制,比率为1(缺省值),则画圆;比率大于1,则画沿水平方向拉长的椭圆;比率小于1,则画沿垂直方向拉长的椭圆;比率应大于0。,【例8.7】Circle方法的应用。程序代码如下:Private Sub Form_Paint()Const pi=3.14159 ScaleMode=3:DrawWidth=2 Circle(50,40),30 Circle(120,40),30,0.5 Circle(180,40),30,1.5 Circle(50,120),30,-pi,-pi/4 Circle(120,120),30,vbRed,pi/2,1.5*pi Circle(180,120),3
32、0,vbRed Circle(180,120),30,vbRed,0.25 Circle(180,120),30,vbRed,1.75End Sub,4Paint事件如果在程序代码中有图形方法的绘图语句,使用Paint事件将很有用,最有效的方法是将所有的绘图方法(Pset、Line等)都放在Paint事件中,否则,可能会发生一些不希望发生的情况。例如图形控件会被重叠、丢失或以错误的顺序排列。窗体和PictureBox控件都有Paint事件,通过使用Paint事件过程,可以保证必要的图形都得以重现(如窗体最小化后,恢复到正常大小时,窗体内所有图形都得重画)。当AutoRedraw属性True,时
33、,将自动重画,Paint事件不起作用。在Resize事件过程中使用Refresh方法,可在每次调整窗体大小时强制对所有对象Paint事件进行重画。,【例8.8】设计一应用程序,当程序运行时将画出一个与窗体各边的中点相交的菱形,当随意调整窗体的大小时,窗体中的菱形也随着自动调整。程序代码如下:Private Sub Form_Paint()Dim x,y x=ScaleLeft+ScaleWidth/2 y=ScaleTop+ScaleHeight/2 Line(ScaleLeft,y)-(x,ScaleTop)Line-(ScaleWidth+ScaleLeft,y)Line-(x,Scale
34、Height+ScaleTop)Line-(ScaleLeft,y)End SubPrivate Sub Form_Resize()RefreshEnd Sub,8.4 键盘与鼠标事件,8.4.1 键盘事件多数情况下,用户只需要使用鼠标就可操纵Windows应用程序,但有时也需要使用键盘进行处理,尤其是对于接受文本输入的控件(如文本框),需要控制和处理输入的文本,这时就更需要对键盘事件进行编程。VB提供3种事件处理键盘操作,即KeyPress、KeyDown、KeyUp事件,这些事件可用于窗体和其它可接收键盘输入的控件。,1KeyPress事件当按下键盘上的某个键时,将触发KeyPress事件
35、。该事件只能处理ASCII字符有关的键盘操作。其格式如下:KeyPress(KeyAscii As Integer)其中:KeyAscii的值是一个字符码,即所按下键ASCII码。2KeyDown和KeyUp事件在按下某键过程中,除了触发KeyPress事件外,还会触发另两种事件:KeyDown和KeyUp事件,即按下键时触发KeyDown事件,松开键时触发KeyUp事件,其格式如下:KeyDown(KeyCode As Integer,Shift As Integer)KeyUp(KeyCode As Integer,Shift As Integer)其中:KeyCode的值是一个字符码,即
36、所按下键在键盘上的位置编码。Shift的值是一个整数,该值指示Shift、Ctrl、Alt三个控制键是否按下。,说明:(1)KeyCode是按键的实际的ASCII码,该码以“键”为准,而不是以“字符”为准,即大写字母与小写字母使用的是同一个键,他们KeuCode相同。(2)在默认情况下,当用户对当前具有焦点的控件进行操作时,该控件KeyPress、KeyDown、KeyUp事件都可以被触发,但是窗体的KeyPress、KeyDown、KeyUp事件不会发生。为了启动窗体的这3个事件,必须将窗体KeyPreview属性设置True,而该属性的默认值为False。如果窗体KeyPreview属性设
37、置True,则首先触发窗体的这3个事件。(3)Shift的值代表着Shift、Ctrl、Alt的状态,这3个键分别以二进制形式表示,每个键有3位,即Shift键为001,Ctrl键为010,Alt键为100。因此Shift参数共有8种取值可能,,【例8.9】设计一个窗体,显示按键KeyAscii码和KeyCode码。程序代码如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Text1_KeyDown(KeyCode As _ Integer,Shift As Integer)Text3.Text=KeyCodeEnd SubPrivate
38、 Sub Text1_KeyPress(KeyAscii As _ Integer)Text2.Text=KeyAscii Text1.Text=:Text1.SetFocusEnd Sub,8.4.2 鼠标事件鼠标事件是指由于用户操作鼠标而引发的事件。其实在前面我们已经使用到了常用的鼠标事件Click事件。此外还提供了MouseUp、MouseDown、MouseMove三个常用的鼠标事件。它们的格式如下:MouseMove(Button As Integer,Shift As Integer,X As Integer,Y As Integer)MouseUp(Button As Integ
39、er,Shift As Integer,X As Integer,Y As Integer)MouseDown(Button As Integer,Shift As Integer,X As Integer,Y As Integer)功能:MouseMove事件是鼠标移动到对象上时触发的事件,MouseDown事件是鼠标按下时触发的事件,MouseUp事件是鼠标按下再松开时触发的事件。其中:Button的值是一个整数,该值指示按下鼠标的状态。X、Y表示鼠标光标的当前位置.,说明:(1)对于MouseDown、MouseUp来说,Button表示被按下的鼠标键,可以取3个值。(2)Shift表示
40、Shift、Ctrl、Alt键的状态,Shift的值与键盘的KeyDown和KeyUp事件相同。(3)对于MouseMove来说,可以通过Button参数判断按下或同时按下两个、三个键,Button可以取8个值。,【例8.10】利用鼠标画圆。使用MouseDown事件记录圆心的坐标,使用MouseUp事件记录半径端点的坐标,计算半径,再利用Circle方法在窗体上画圆。程序代码如下:Option ExplicitDim StartX As Integer,StartY As IntegerPrivate Sub Form_MouseDown(Button As _ Integer,Shift
41、As Integer,X As Single,_ Y As Single)StartX=X:StartY=YEnd SubPrivate Sub Form_MouseUp(Button As _ Integer,Shift As Integer,X As Single,_ Y As Single)Dim r As Integer,color As Integer Dim EndX As Integer,EndY As Integer EndX=X:EndY=Y color=Int(16*Rnd)r=Sqr(EndX-StartX)2+(EndY-StartY)2)Form1.Circle(St
42、artX,StartY),r,QBColor(color)End Sub,【例8.11】设计一个窗体,显示鼠标的轨迹。在窗体上安置1个形状控件Shape1、1个时钟控件Timer1。程序代码如下:Dim x1,y1Private Sub Form_Load()Dim i As Integer For i=1 To 20 Load Shape1(i)Shape1(i).Visible=False Next iEnd SubPrivate Sub Form_MouseMove(Button As Integer,_Shift As Integer,X As Single,Y As Single)x
43、1=X:y1=Y Timer1.Enabled=TrueEnd SubPrivate Sub Timer1_Timer()Static i As Integer Shape1(i).Visible=True Shape1(i).Move x1,y1 i=i+1 If i 20 Then i=0End Sub,8.5 其它常用语句,8.5.1 枚举类型当一个变量只有几种可能的取值时,可以定义为枚举类型,所谓的“枚举”就是指将变量的值一一列举出来,从而该变量的取值只限于所列举出来的值,这不仅能提高程序的阅读性,而且可以减少错误。1枚举数据类型的定义枚举数据类型在使用之前须先定义,枚举数据类型可以在
44、窗体模块、标准模块或类模块的通用声明段中定义,其定义格式如下:Public|Private Enum=End Enum,其中:(1)关键字Public或Private省略时,系统默认为Public,表示所定义Enum类型在整个工程中都是可见的、有效的;若Private关键字,则表示所定义Enum类型只在所声明的模块中可见及有效。(2)“枚举类型名”的取名规则与变量名的取名规则相同;“成员名”是枚举类型中所包含的各个成员,这些成员是常量(即枚举类型的各个取值)。(3)“常量表达式”是可选的,它的值是长整数类型。如省略常量表达试,则默认第一个枚举成员的值是0,其后的枚举成员的值比前面的成员的值大1
45、。(4)可以用赋值语句显示地为枚举中的成员赋值,即不省略“常量表达式”。所赋的值可以是任何的长整数(包括负数)。如果希望用小于0的常量代表出错条件,则可以为枚举成员赋一个负值。(5)当对一个枚举中的成员赋值时,可以使用另一个枚举中的成员的值。,2定义枚举类型的变量当程序中定义了枚举类型后,就可以利用象定义一个基本数据类型的变量那样定义一个枚举类型的变量。例如:Dim mywork As Days 定义变量mywork为Days枚举类型Mywork=Tuesday 将枚举成员Tuesday(值为2)赋给mywork变量Print mywork 输出变量mywork的值,结果为2,8.5.2 闲置
46、循环与DoEvents语句一般情况下,只有发生事件时才执行相应的事件过程,也就是说,如果没有事件发生,应用程序将处于“闲置”状态;另一方面,当执行一个过程时,将停止对其它事件的响应,直到执行过程结束为止。为了改变这种执行顺序,VB提供了闲置循环和DoEvents语句。所谓闲置循环,就是指当应用程序处于闲置状态时,用一个循环执行其它的操作。或者说,闲置循环是在闲置状态下执行的循环。不过当执行闲置循环时,将占用全部的CPU时间,不允许执行其它的事件过程,将是系统处于无限循环之中而无任何反应。为此VB系统提供了DoEvents语句,当执行闲置循环时,可用它将控制权交给周围环境去处理,然后回到原来的程
47、序继续执行。其格式如下:窗体号=DoEvents()功能:在闲置循环中,DoEvents语句将控制权交给系统去处理所发生的事件。说明:此语句也可作为函数使用。当作为函数使用时,DoEvents返回当前装入窗体的窗体号。当作为语句使用时,可省略前、后的可选项。,【例8.12】测试一个书是否为素数。当除数是2时,执行闲置循环,在该循环中有DoEvents函数,并发出声响,此时可执行其他的处理。程序代码如下:Private Sub Form_Click()Dim x As Integer x=InputBox(请输入一个数:)Print x;is;valvar=prime(x)End SubFunc
48、tion prime(inputvar As Integer)As Integer Dim bool As Boolean,char As String For i=2 To inputvar-1 If inputvar Mod i=0 Then bool=True Exit For End If If inputvar Mod i=2 Then For j=1 To 10000 Beep dummy=DoEvents()Next j End If Next i prime=inputvar If bool Then char=Composite Else char=Prime End If Print charEnd Function,8.6 程序举例,见教材,