北京电大VisualBasic程序设计第4章VB高级语言技巧_第1页
北京电大VisualBasic程序设计第4章VB高级语言技巧_第2页
北京电大VisualBasic程序设计第4章VB高级语言技巧_第3页
北京电大VisualBasic程序设计第4章VB高级语言技巧_第4页
北京电大VisualBasic程序设计第4章VB高级语言技巧_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualBasic

程序设计第4章VB高级语言技巧14.1多功能计算器任务4.1.1任务描述在第三章简单计算器的基础,增加以下功能:1.将计算结果转换为十六进制。2.就数字键设置为命令按钮组,使“0”~“9”数字按键的Index属性分别为0、1、2、3、4、5、6、7、8、9。3.禁止键盘在文本框中输入数据。4.使计算器总是悬浮在其它窗体上。界面如下页所示。234.1.2界面设计1.添加“十六进制”和“数字大写”两个文本框,分别命名为txtHex和txtBig。2.删除原来的“0”~“9”数字按钮控件,并重新放置一个命令按钮控件,将其Caption属性设置为“0”。3.复制该数字命令按钮。4.在数字区框架控件上,粘贴该数字命令按钮,系统询问是否创建一个控件数组,回答“是”。将它的Caption属性改为“1”,Index属性值设置为1。按照上述方法粘贴数字按钮控件“2”~“9”。5、此时得到一个按钮控件数组“0”~“9”,它们的Index书香依次为“0”~“9”。6、将TxtBig的ToolTipText属性设置为“大写数字”。44.1.3代码设计1.用API函数实现“总在前面”效果(1)程序代码在代码编辑器的“通用”部分声明SetWindowPos函数及相关常数:PrivateDeclareFunctionSetWindowPosLib"user32"_(ByValhwndAsLong,ByValhWndInsertAfterAsLong,_ByValxAsLong,ByValyAsLong,ByValcxAsLong,_ByValcyAsLong,ByValwFlagsAsLong)AsLongPrivateConstHWND_TOPMOST=-1PrivateConstSWP_NOMOVE=&H2PrivateConstSWP_NOSIZE=&H1然后在Form的Load事件中加入以下代码:SetWindowPoshwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVEOrSWP_NOSIZE5(1)API函数调用的一般方法要在VB中使用API函数,首先要在工程的标准模块(Module)或窗体的代码的“通用”部分中声明它,然后可以按照调用VB其它函数一样来使用它。获得函数声明的一般方法:在安装VB系统后,通常会在VB程序组中看到“API文本浏览器”的应用程序。步骤如下:沿[开始]-[程序]-[MicrosoftVisualStudio6.0]-[MicrofoftViaualStodio6.0Tools]-[APITextWiewer]找到API浏览器。67第1步:启动“API文本浏览器”89第2步:选择“文件-加载文本文件”菜单项10加载WinAPI.txt文件。11第3步:选择API类型:声明12第4步:选择立刻用项SetWindowPos,将声明范围设置为“私有”。13按添加按钮。14第5步:就选定项下的VB代码复制15第5步:将复制的VB代码粘贴到窗体代码编辑器中的“通用-声明”部分。16习题P115一、单项选择题2.能够实现“窗体总在最前端”界面效果的API函数是()。A.SetWindowPosB.SetWindowAPIC.SetWindowShapeD.DeclareAPI答案:A172.数字区命令按钮的Click事件PrivateSubCommand1_Click(IndexAsInteger)'使用Str函数将Index转换为字符串,然后使用Trim函数去掉前后空格IftxtLabel.Text=""ThentxtFirst.Text=txtFirst.Text+Trim(Str(Index))ElsetxtSecond.Text=txtSecond.Text+Trim(Str(Index))EndIfEndSub183.禁止用户在文本框中输入数字PrivateSubtxtResult_KeyDown(KeyCodeAsInteger,ShiftAsInteger)KeyCode=0'禁止所有的键盘输入(除BackSpace退格键外)EndSubPrivateSubtxtResult_KeyPress(KeyAsciiAsInteger)KeyAscii=0'禁止BackSpace退格键EndSub19习题P116二、填空题1.通常可将文本框控件的

属性设置为True,以禁止键盘输入。答案:Locked204.修改“计算结果”按钮的Click事件代码'“计算结果”命令按钮的Click事件PrivateSubCommand17_Click()'定义一个Double类型的变量DimMyResultAsDouble'以txtLable.Text的值为多重分支条件SelectCasetxtLabel.TextCase"+"'当txtLabel.Text的值为"+"时MyResult=Val(txtFirst.Text)+Val(txtSecond.Text)Case"-"'当txtLabel.Text的值为"-"时MyResult=Val(txtFirst.Text)-Val(txtSecond.Text)Case"×"'当txtLabel.Text的值为"×"时MyResult=Val(txtFirst.Text)*Val(txtSecond.Text)Case"÷"'当txtLabel.Text的值为"÷"时MyResult=Val(txtFirst.Text)/Val(txtSecond.Text)EndSelect

214.修改“计算结果”按钮的Click事件代码txtResult.Text=MyResult'显示计算结果'将计算结果转换为十六进制数字txtHex.Text=Hex(MyResult)'将计算结果转换为大写数字,(采用函数功能完成)txtBig.Text=ChangeMe(MyResult)EndSub225.编写ChangeMe函数代码PrivateFunctionChangeMe(FirstAsDouble)AsString'声明变量DimstrFirstAsStringDimstrBig(9)AsString'声明一个字符串数组DimstrTempAsStringDimi,jAsInteger

'设置数组变量的值strBig(0)="零":strBig(1)="壹":strBig(2)="贰":_strBig(3)="叁":strBig(4)="肆":strBig(5)="伍":_strBig(6)="陆":strBig(7)="柒":strBig(8)="捌":strBig(9)="玖"235.编写ChangeMe函数代码'将Double型的参数First转换为字符串型strFirst=Trim(Str(First))strTemp=""'开始数字转换Fori=1ToLen(strFirst)'取出第i位的字符数字,并将它转换为数值型j=Val(Mid(strFirst,i,1))'通过数组完成大写转换strTemp=strTemp+strBig(j)Nexti'将转换结果返回ChangeMe=strTempEndFunction(演示)24习题P116三、问答题5.请简述多功能计算器与第3章计算器在功能上的区别。答:区别有以下几点:1)能将计算结果转换为十六进制。2)将数字键设置为命令按钮组,使“0”~“9”数字按键的Index属性分别为0、1、2、3、4、5、6、7、8、9。用按键的Index来识别输入的数字。3)禁止键盘在文本框中输入数据。4)使计算器总是悬浮在其它窗体上。254.2数组的使用4.2.1数组1.数组的概念VB把一组具有同一名字、不同下标的变量称为数组,它实际上是一组具有相同类型的变量的集合。根据下标的个数可分为一维数组、二维数组、多维数组。例如:'设置数组变量的值strBig(0)="零":strBig(1)="壹":strBig(2)="贰":_strBig(3)="叁":strBig(4)="肆":strBig(5)="伍":_strBig(6)="陆":strBig(7)="柒":strBig(8)="捌":strBig(9)="玖"262.声明静态数组数组分为静态数组和动态数组。定义静态数组的方法与变量的声明方法基本相同。有两种声明方法:(1)方法1Dim数组名(上界)As数据类型这种定义方法,默认情况下数组的下界从0开始,因此数组元素的个数等于上界+1。数组的全部元素都初始化为0(数值型)或空字符串(字符串型)例如定义一维数组:DimA(5)AsInteger数组A包括6个数组元素:A(0)、A(1)、……、A(5)。27(2)方法2Dim数组名(下界To上界)采用这种方法可以根据需要设置下标的起始和结束值,即上界和下界。例如DimA(1To5)AsInteger该数组包括5个元素:A(1)、A(2)、……、A(5)。也可定义二维数组。例如:DimA(1To5,1To5)AsInteger该数组包括A(1,1),A(1,2),…、A(1,5),…,A(5,1),A(5,2),…,A(5,5)又如:DimA(5,5)AsInteger该数组包括36个元素:A(0,0),A(0,1),A(0,2),…,A(0,5),…,A(5,0),A(5,1),A(5,2),…,A(5,5)283.动态数组如果事先不能确定数组元素的个数,可以采用动态数组声明技术,主要方法是:(1)首先声明一个静态数组,只定义其数组名,不指定数组的大小。例如DimAAsInteger(2)在程序执行过程中,使用ReDim语句修改数组的大小或数组的上界,例如:ReDimA(20)AsIntegerReDimA(1To20)AsInteger29习题P115一、单项选择题1.DimA(1To6,1To5)定义的数组包含的元素个数是()。A.30B.25C.42D.动态变化答案:A30习题P116二、填空题4.DimA(1To6)定义的数组包含

个元素。答案:631习题P116三、问答题3.什么是数组,如何声明,使用数组有什么好处?答:VB把一组具有同一名字、不同下标的变量称为数组,它实际上是一组具有相同类型的变量的集合。

数组分为静态数组和动态数组。定义静态数组的方法与变量的声明方法基本相同。有两种声明方法:方法1:Dim数组名(上界)As数据类型方法2:Dim数组名(下界To上界)As数据类型。使用数组可以使程序代码更清晰、简洁。,可以方便灵活地组织数据。324.2.2控件数组控件数组是一种特殊的数组,与普通数组的主要区别是,它的数据类型为控件类型。每个数组元素都是一个控件对象,这些控件对象共用一个相同的名字,即所有的元素的Name属性值相同,各控件元素用Index属性表示数组下标。33数字区命令按钮的Click事件PrivateSubCommand1_Click(IndexAsInteger)'使用Str函数将Index转换为字符串,然后使用Trim函数去掉前后空格IftxtLabel.Text=""ThentxtFirst.Text=txtFirst.Text+Trim(Str(Index))ElsetxtSecond.Text=txtSecond.Text+Trim(Str(Index))EndIfEndSub34数字区命令按钮的Click事件也可编写如下:PrivateSubCommand1_Click(IndexAsInteger)SelectCaseIndexCase0IftxtLabel.Text=""ThentxtFirst.Text=txtFirst.Text+“0”ElsetxtSecond.Text=txtSecond.Text+“0”EndIfCase1IftxtLabel.Text=""ThentxtFirst.Text=txtFirst.Text+“1”ElsetxtSecond.Text=txtSecond.Text+“1”EndIf35……Case9IftxtLabel.Text=""ThentxtFirst.Text=txtFirst.Text+“9”ElsetxtSecond.Text=txtSecond.Text+“9”EndIfEndSelectEndSub

利用Select或If选择结构,通过对Index属性值的判断,响应不同按钮元素的单击事件。36习题P116一、单项选择题3.如果创建了命令按钮数组控件,那么Click事件的参数是()。A.IndexB.CaptionC.TagD.没有参数答案:A37习题P116二、填空题2.在程序运行过程中可以使用

语句修改数组的上下界。答案:ReDim384.2.3枚举及自定义数据类型1.枚举当一个变量只可能取几个值时,可将其定义为枚举型,比如一个变量取1~7之间的整数来表示星期几,则可以把这个变量定义为枚举型。枚举类型只能有一个元素。要定义枚举型变量,须先用关键字Emum定义一个枚举类型。例如:PublicEnumenmDay星期日=1星期一=2……星期五=6星期一=7EndEmun394.2.3枚举及自定义数据类型该语句定义了一个名为enmDay的枚举变量。注意emnDay本身并不是一个变量,它只是用户自己定义的新的数据类型。一经定义,就可以像VB提供的标准数据类型(如String、Integer)一样使用。例如:DimMydayAsemnDay’声明一个变量Myday,其数据类型为enmDayMyday=星期日’为变量赋值,即Myday=1使用枚举型时应注意几点:(1)枚举类型中的元素只能表示长整型常数。(2)枚举类型应在模块级别中定义。(3)当定义时没有给枚举成员赋值时,系统自动为第一个成员赋值0,以后的成员值依次加1。402.自定义类型自定义类型与枚举类型一样,也是一种构造型数据,称为记录类型。使用方法如下:(1)定义PublicTypeStudent学号AsString*10姓名AsString*10年龄AsInteger籍贯AsStringEndType该语句定义了一个名为Student的数据类型。(2)声明变量

DimxAsStudent

(3)使用x.学号=“2004001”x.姓名=“张红”41枚举和自定义类型是一种有效的数据组织方式。尽管不使用它们也照样可以开发出功能强大的应用程序,但有效地应用这两种方式,可以使程序代码更清晰、简洁。如果要使用这两种方式,最好能在模块中用Public定义,以便整个应用程序使用。424.3过程和函数的定义和调用VB窗体和控件的每一个事件都是一个过程,称为事件过程,它们总是与特定的控件对象相关联,所以被认为是私有(Private)过程。此外,VB还提供了一些内置的由系统预先编好的函数,比如Trim,Str和Val函数等。在VB中,将Sub……EndSub定义的子程序称为Sub过程(子过程),而将Function……EndFuction定义的函数称为Function过程(函数过程)。434.3.1为什么要编写自定义过程函数过程是一种代码分块技术,采用这种技术将应用程序划分为多个程序模块,其好处是:1.过程规模小,容易调用和维护。2.过程可以被反复调用,避免了重复编码,加强了可重用性。3.过程是由处理某一特定功能的代码组成,是一个相对独立的实体,将应用程序划分为这样一个实体,会使程序结构简洁,便于阅读维护。44习题P116三、问答题1.为什么要编写自定义过程?因为自地那以过程有以下好处:1.过程规模小,容易调用和维护。2.过程可以被反复调用,避免了重复编码,加强了可重用性。3.过程是由处理某一特定功能的代码组成,是一个相对独立的实体,将应用程序划分为这样一个实体,会使程序结构简洁,便于阅读维护。454.3.2Sub过程1.定义一般应在窗体代码编辑器的“通用”部分定义私有的Sub过程,一经定义则可以在窗体的所有地方调用它。46如果希望定义整个应用程序均可以使用的公有过程,则最好在标准模块(Module)进行。472.调用调用过程的方法非常简单,如图所示。48习题P116一、单项选择题4.如果要在窗体代码编辑器的“通用”部分定义私有Sub过程,则正确的语句是()。A.PublicSubB.PublicFnctionC.PrivateSubD.PrivateFunction答案:C494.3.3Fucttion函数1.定义Function过程以一个返回值表示执行结果,也有公有的和私有的两种作用范围。例如,在窗体中定义一个返回整型数据的私有Function函数:

PrivateFunctionPlusXY(xAsInteger,yAsInteger)AsIntegerPlusXY=x+yEndFunction

2.调用Function过程的调用方法如下:DimIAsIntegerI=PlusXY(1,2)504.3.4参数传递机制简介

大部分过程都含有参数。将Sub过程或Function过程定义中出现的变量名称为形式参数,而在调用时传递给Sub过程和Function过程的常量、变量或表达式称为实际参数。将参数以变量形式传递的过程称为参数传递。VB中参数传递机制有两种:一种是引用参数传递(默认),另一种是按值传递参数。511.引用传递参数这种方式将参数变量的内存地址传递给Sub或Function过程,过程通过内存地址访问实际参数的内容,从而可以方便地改变实际参数的值。52PrivateSubChange(xAsInteger,yAsInteger)’本程序将参数x,y的值互换DimtAsIntegert=xx=yy=t’在窗体是输出结果Print“x=”;x,”y=”;yEndSubPrivateSubForm_Click()DimaAsIntegerDimbAsIntegera=3:b=4Changea,bPrint“a=”;a,”b=”;bEndSub(演示)运行结果:x=4,y=3A=4,b=3我们发现,调用Change过程后,实际参数a,b的值也发生了变化。这就是引用传递参数的执行结果。532.按值传递参数按值传递参数是只把参数的数值传递给过程,也称传值方式。即传递给过程的只是实际参数的副本,即使过程调用时改变了形式参数的值,实际参数也不会改变。如果按值传递参数,需要在定义过程时在形式参数前面加是G关键字ByVal,例如上例中:PrivateSubChange(ByValxAsInteger,ByValyAsInteger)DimtAsIntegert=xx=yy=t’在窗体是输出结果Print“x=”;x,”y=”;yEndSub运行结果:x=4,y=3a=3,b=4544.4键盘和鼠标使用技巧驱动VB应用程序运行的主要动力是事件响应。在VB响应的所有事件中,数目最多也最重要的是对键盘和鼠标的响应事件,因为键盘和鼠标是用户和应用程序交互的主要工具。下面系统介绍鼠标和键盘常用事件的使用技巧和原理。55习题P116三、问答题2.简述参数传递机制。答:VB中参数传递机制有两种:一种是引用参数传递(默认),另一种是按值传递参数。引用参数传递是将参数变量的内存地址传递给Sub或Function过程,过程通过内存地址访问实际参数的内容,从而可以方便地改变实际参数的值。按值传递参数是只把参数的数值传递给过程,也称传值方式。即传递给过程的只是实际参数的副本,即使过程调用时改变了形式参数的值,实际参数也不会改变。如果按值传递参数,需要在定义过程时在形式参数前面加是G关键字ByVal。564.4.1响应键盘事件常用的键盘事件主要有KeyPress,KeyUp和KeyDown。KeyPress事件:用户按下某ASCII字符的键,因此它不是对所有的键盘码均响应,比如键盘上的删除键。KeyDown和KeyUp事件:按下或释放键盘上的任意键时均会触发该事件,包括Delete删除键。571.焦点处理窗体或控件(对象)的焦点是对象活动的标志,在Windows应用中,可以同时运行几个应用程序,但只有具有焦点的应用程序才有活动标题栏,才能接受用户输入。在同一窗体中,也只有具有焦点的的TextBox文本框才能接受键盘输入。总之只有获得焦点的窗体或控件才能接受键盘事件。所以在处理键盘事件嵌,应首先对焦点进行处理。58实现控件焦点的两种方法(1)SetFocus方法在程序运行时,通过鼠标选择操作或控件的SetFocus方法实现。VB所提供的标准控件一般都有一个SetFocus方法。通过该方法可以把焦点赋予指定的控件,是一种灵活的焦点控制方法。比如希望在程序运行期的某个阶段,使某个控件后得焦点被激活,可使用以下代码:

控件名.SeFocus59实现控件焦点的两种方法(2)利用Tab控制键VB所有可被设置焦点的控件均具有一个TabIndex属性。默认情况些,在窗体上创建的第一个控件的TabIndex的值为0,第一个控件的TabIndex的值为1,移此类推。可按预先设计好的顺序,改变控件的TabIndex的值。这样就可以在程序运行期间,通过Tab键使焦点按TabIndex的值,从小到大在众多控件中切换。如果不希望使某些控件获得焦点,就可以把该控件的TabStop属性值设置为False。当然,如果控件不可视(Visible=False)或不可用(Enabled=False),也不可能获得焦点了。60习题P116二、填空题3.如果不希望某个控件获得焦点,则可以将它的

属性设置为False。答案:TabStop61习题P116三、问答题4.什么是焦点,设置控件焦点有哪些方法?答:窗体或控件(对象)的焦点是对象活动的标志,只有获得焦点的窗体或控件才能接受键盘事件。设置控件焦点的两种方法:①SetFocus方法:控件名.SeFocus②按预先设计好的顺序,改变控件的TabIndex的值。622.窗体的键盘事件如果希望无论何时按下某个键,都会同时执行同一操作,而不管此时到底哪个控件具有焦点的话,就可以使用窗体的键盘事件。具体方法是:首先将窗体的KeyPreview属性设置为True,然后再编写相应的键盘事件处理程序。631.KeyDown和KeyUp事件分析

计算机键盘上的每一个键均有一个键码,称为键码。KeyCode参数返回了键盘的键码值。通过它判断用户按下哪个键。既可以用数字也可以利用VB提供的键码常数进行判断处理,比如vbKeyF1(F1键)、vbKeyHome(Home键)、vbKeyA(A和a键)等。例如:IfKeyCode=vbKeyBackThenIfKeyCode=vbKeyDeleteThen64(2)Shift参数通过该参数判断用户是否按下了Shift、Ctrl或Alt键。例如:IfShift=vbShiftMaskThenIfShift=vbCtrlMaskThenIfShift=vbAlttMaskThenIf(Shift=vbAltMask)And(KeyCode=VbKeyA)Then653.KeyPress事件KeyPress事件发生于KeyDown和KeyUp之间,它只有一个KeyAscii参数,反映了用户通过键盘输入的字符的ASCII码。当需要处理标准ASCII字符时可使用这个事件,但要处理扩展字符键、组合键和定位键时,则只能使用KeyDown和KeyUp事件。例如:PrivateSubText1_KeyPress(IndexAsInteger,KeyAsciiAsInteger)’只允许输入数字,其中用到的数字48和57分别表示字符0和9的ASCII码If(KeyAscii<48)Or(KeyAscii>57)ThenKeyAscii=0EndIfEndSub66常用键盘码与ASCII码的对应关系按键键码常数ASCII码数字是否相等BackSpacevbKeyBack8是EntervbKeyReturn13是SpacevbKeySpace33是TabvbKeyTab9是EscvbKeyEscape27是A~ZvbKeyA~vbKeyZ65~90是a~zvbKeyA~vbKeyZ97~122否.vbKeyDecimal46否0~9vbKey0~vbKey948~57是DeletevbKeyDelete————F1~!F16vbKeyF1~vbKeyF16————键码未必都有对应的ASCII码。A和a的ASCII码不同,但它们在键盘上是一个按键,因此键码是一样的。67习题P116一、单项选择题5.键盘事件的执行顺序是()。A.KeyPress,KeyDown,KeyUpB.KeyDown,KeyPress,KeyUpC.KeyUp,KeyDown,KeyPressD.KeyUp,KeyPress,KeyDown答案:B68习题P116四、程序设计题2.键盘按键程序。请使用MsgBox过程对窗体的KeyDown和KeyPress事件编程,以显示按下、放开一个键时事件的发生过程。比如,当按下了A键时程序界面如图所示。69代码设计:PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)MsgBox"KeyDown事件发生了,KeyCode的值是:"_&KeyCode&Chr(13)&_"Shift参数的值是:"&Shift,0,"键盘按键程序"EndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)MsgBox"KeyPress事件发生了,KeyAscii的值是:"_&KeyAscii,0,"键盘按键程序"EndSubPrivateSubText1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)MsgBox"KeyUp事件发生了,KeyCode的值是:"_&KeyCode&Chr(13)&_"Shift参数的值是:"&Shift,0,"键盘按键程序"EndSub(演示)704.SendKeys过程利用SendKeys 可以将一个或多按键消息发送到湖动窗口,就如同在键盘上湿润一样。比如:SendKeys“{Tab}”SendKeys“{A10}”SendKeys“{Enter}”SendKeys“{Left3}”SendKeys“{F1}”SendKeys“{CapsLock}”71例:在所示界面中,为了加快用户的输入速度,希望每当用户按完回车键后,控制焦点自动移到下一个,就可以在文本框控件数组中加入以下代码:PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenSendKeys"{tab}"EndIfEndSub72PrivateSubText2_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenSendKeys"{tab}"EndIfEndSubPrivateSubText3_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenSendKeys"{tab}"EndIfEndSub(演示)73习题P116四、程序设计题1.焦点切换程序。在一窗体上创建一文本框控件数组,并设置好它们的TabIndex属性,然后使用SendKeys语句编写文本框事件的KeyPress事件。运行时,当按下回车键后,空间的焦点自动切换。第一步:设计界面第二步:设计代码74PrivateSubText1_KeyPress(IndexAsInteger,KeyAsciiAsInteger)SelectCaseIndexCase0IfKeyAscii=13ThenSendKeys"{tab}"EndIfCase1IfKeyAscii=13ThenSendKeys"{tab}"EndIfCase2IfKeyAscii=13ThenSendKeys"{tab}"EndIfCase3IfKeyAscii=13ThenSendKeys"{tab}"EndIfEndSelectEndSub754.4.2响应鼠标事件1.改变鼠标的形状每个窗体和控件都具有MousePointer属性,可通过它赋予它0~15间的不同值改变鼠标形状。既可在设计阶段进行,也可以在程序代码中改变设置。2.使用自定义鼠标形状如果将MousePointer属性的值设置为99,则可以使用自定义鼠标形状。方法是:首先找一些光标(*.cur)或(*.ico)文件,然后通过MouseIcon属性完成设置。764.4.2响应鼠标事件3.MouseDown和MouseUp事件这两个事件主要有两个参数:(1)Button参数可用来区分当前鼠标的左、中、右按键,0表示按下左键,1表示按下右键,2表示按下中间键。(2)Shift参数可用来区分鼠标与键盘的组合,它的值等于1,表示Shift键按下,2表示Ctrl键,4表示Alt键。(3)x,y参数返回鼠标指针当前的位置,计量单位由窗体的ScaleMode决定。它们的值被限定在caleHeight,ScaleWidth,ScaleLeft和ScaleTop属性所建立的坐标系内。77习题P116四程序设计题4.随机序列排序程序。使用第三章学过的Ren函数生成10个1~99之间的随机整数,并按从小到大的顺序排序,最后在列标框控件中输出。本程序主要使用数组、自定义过程、引用传递参数等知识。78代码设计:PrivateSubMyRnd(B()AsInteger)DimiAsIntegerRandomizeFori=1To10B(i)=Int(Rnd*100)MsgBox“产生的第”&i&“个随机数是”&_B(i),0,"当前产生的随机数"NextiEndSub79代码设计:PrivateSubCommand1_Click()DimA(1To10)AsIntegerDimiAsIntegerMyRndAFori=1To10Forj=i+1To10IfA(i)>A(j)Thent=A(i)A(i)=A(j)A(j)=tEndIfNextjNextiList1.ClearFori=1To10List1.AddItemA(i)NextiEndSub80实验4鼠标、键盘、API函数调用一、键盘错位程序1.实验要求通过对文本框控件的鼠标KeyPress事件的编程,使得键盘按键发生错位,比如电脑感按下“A”键时,在文本框中将显示字母“B”,依次类推。2.实验步骤第1步:界面设计81实验4鼠标、键盘、API函数调用一、键盘错位程序第1步:代码设计82实验4鼠标、键盘、API函数调用二、实用的键盘使用技巧1.实验要求利用键盘的KeyPress事件进行编程,使控件焦点轮流在三文本框和“确定”按钮之间转换。83实验4鼠标、键盘、API函数调用二、实用的键盘使用技巧1.实验步骤第1步:进行界面设计Text1为文本框数组,自上而下索引号(Index)依次为0,1,2。Texe1(0),Text1(1),Text1(2),Command1的TabIndex属性依次设置为0,1,2,3。84实验4鼠标、键盘、API函数调用一、实用的键盘使用技巧1.实验步骤第1步:进行代码设计'编写Form_Load事件代码PrivateSubForm_Load()'当Form启动时,对Text1控件数组赋初值Fori=0ToText1.Count-1Text1(i).Text=""NextEndSub85'编写Text1控件数组的KeyPress事件代码PrivateSubText1_KeyPress(IndexAsInteger,KeyAsciiAsInteger)'当键入户车键时(ASCII码为13),发送Tab键IfKeyAscii=13ThenSendKeys"{tab}"EndIf

'如果当前的焦点是Text1(2),则只允许用户输入数字IfIndex=2ThenIf(Chr(KeyAscii)<"0"OrChr(KeyAscii)>"9")AndKeyAscii<>8ThenKeyAscii=0EndIfEndIfEndSub86'编写Command1的Click事件代码PrivateSubCommand1_Click()'显示输出结果,其中vbcr等效于Chr(13)DimstrSQLAsStringstrSQL="根据你的输入值,拼写SQL语句如下:"+vbCrstrSQL=strSQL+"INSERTINTO学生表(学号,姓名,年龄)"+vbCrstrSQL=strSQL+"VALUES('"+Text1(0).Text+"','"+Text1(1).Text+"','"+Text1(2).Text+"')"MsgBoxstrSQL,vbQuestion+vbOKOnly,"信息提示"'使得Text1(0)重新获得焦点Text1(0).SetFocusEndSub'编写Command2的Click事件代码PrivateSubCommand2_Click()EndEndSub87实验4鼠标、键盘、API函数调用三、鼠标事件应用1.实验要求利用鼠标的MouseMove事件进行编程,使Label1控件的Caption”欢迎进入VisualBasic世界“跟随鼠标移动,同时字体的颜色页也会不断变化。88实验4鼠标、键盘、API函数调用三、鼠标事件应用2.实验步骤第1步:界面设计89实验4鼠标、键盘、API函数调用三、鼠标事件应用2.实验步骤第2步:代码设计PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)'随机改变Label1空间的前景色Label1.ForeColor=RGB(Rnd*255,Rnd*255,Rnd*255)'根据鼠标当前的X,Y坐标设置Label1控件的Top和Left属性Label1.Top=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论