VB教程提高篇.docx
《VB教程提高篇.docx》由会员分享,可在线阅读,更多相关《VB教程提高篇.docx(24页珍藏版)》请在冰豆网上搜索。
![VB教程提高篇.docx](https://file1.bdocx.com/fileroot1/2023-4/16/04557888-2c62-4ee6-9bc6-1988bd0e765d/04557888-2c62-4ee6-9bc6-1988bd0e765d1.gif)
VB教程提高篇
VB教程提高篇
提高篇
第四章基本控件
你知道为什么把VB称为可视化编程?
答案在于VB提供了许许多多的控件,这些控件是构成程序的元素,只要我们把这些控件安排好,设置好它们的属性,编写相应的触发事件,一个VB程序的设计就水到到渠成了。
下面,我们就介绍几种常用的控件。
图4-1常用控件图标
4.1图片框PictureBox和图像框Image
将图片框或图像框拖放到窗体上,设置它们的picture属性,就可以把硬盘中的一幅图片载入到框中。
或者借助LoadPicture函数来实现图片载入。
装入图片和卸载图片
图4-2载入图片和卸载图片
PrivateSubCommand1_Click()
'装入图片,图片来自当前目录下的habbit.gif
Picture1.Picture=LoadPicture(App.Path&"\habbit.gif")
'app.path指的是当前VB工程所在目录
EndSub
PrivateSubCommand2_Click()
'卸载图片
Picture1.Picture=LoadPicture()
EndSub
图片框Picturebox和图像框Image的区别在于,Image控件只支持Picturebox控件的一部分属性、事件和方法。
但Image控件有一个特有的属性Stretch,它能让装入的图片适应Image的大小。
图4-3Image控件显示图像时的两种方式
4.2定时器
顾名思义,这个控件和时间有关系。
它有一个Interval属性,通过它可以设置触发定时事件的时间间隔。
它的单位是毫秒。
假设我们要定时器每隔1秒触发内部事件,我们可以把Interval设为1000。
定时的内部事件是Timer事件,这一事件会每隔Interval毫秒执行一次。
走马灯
往窗体内拖放一个标签和一个定时器,标签上任写一段话,我们的"走马灯"就是让这一段话从左到右飘移,移出窗体右界后,还能从窗体左边出现。
图4-5走马灯
PrivateSubTimer1_Timer()
'让标签右移,就是让它的水平坐标增大
Label1.Left=Label1.Left+100
'如果水平坐标过了窗体右界4800,标签就移动最左端
IfLabel1.Left>4800Then
Label1.Left=-2000
EndIf
EndSub
4.3滚动条(HscrollBar、VscrollBar)
滚动条有三个属性值得注意:
*Value属性:
滚动条的当前位置值,该值介于Max和Min属性值之间。
*max属性:
当滚动块移到滚动条最右端或最底端时,滚动条的VALUE时等于Max值。
*min属性:
当滚动块移到滚动条最左端或最顶端时,滚动条的VALUE时等于Min值。
系统默认,min属性值为0,而max属性值为32767
调色器
图4-6调色器
PrivateSubHScroll1_Change()
Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)
EndSub
PrivateSubHScroll2_Change()
Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)
EndSub
PrivateSubHScroll3_Change()
Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)
EndSub
4.4单选框(OptionButton)和复选框(CheckBox)
单选框用于提供一个可以打开或关闭的选项。
在使用时一般将几个单选框组成一组,在同一组中,用户只能选择其中一项。
在Frame控件、PictureBox或窗体这样的容器控件中绘制单选框,就可以把这些控件分组。
同一容器中的单选框为一个组,运行时,选择一个单选框后,同组中其它单选框就会自动取消选择。
用于表示单选框或复选框选中状态的属性是Value。
对于单选框而言,Value值为True表示选中该选项;Value值为False表示未选择该选项。
对于复选框而言,Value值为1表示选中该选项;Value值为0表示未选择该选项;Value值为2将使复选框处于灰色状态,常用这种状态表示不确定或部分选中状态。
图4-7置于两个容器中的单选框组
字体字形的修饰
图4-8字型、字号
PrivateSubCheck1_Click()
Text1.FontBold=True'加粗
EndSub
PrivateSubCheck2_Click()
Text1.FontItalic=True'倾斜
EndSub
PrivateSubCheck3_Click()
Text1.FontUnderline=True'下划线
EndSub
PrivateSubOption1_Click()
Text1.FontSize=10
EndSub
PrivateSubOption2_Click()
Text1.FontSize=20
EndSub
PrivateSubOption3_Click()
Text1.FontSize=30
EndSub
4.5组合框(Combo)和列表框(List)
组合框和列表框的作用相似,只是组合框控件将文本框和列表框的特性结合在一起,既可以在控件的文本框(编辑域)部分输入信息,也可以在控件的列表框部分选择一项。
另外,组合框可以将列表项折叠起来,使用时再通过下拉列表进行选择,所以使用组合框比使用列表框更节省界面空间。
两者都共同具有一些重要属性:
*List属性:
返回或设置列表部分的项目,在运行时,列表的第一项为List(0),第二项为List
(1)......。
*ListIndex属性:
返回当前选中的列表项的索引,比如有5个列表项,若选择了第3项,则ListIndex的值为2,如果未选取任何一项,则ListIndex值为-1
*ListCount属性:
返回列表项目总个数。
两者都使用的一些方法有:
*AddItem方法:
向组合框或列表框中增加新的项目,使用格式为:
<对象名>.AddItem<项目>[,索引]
格式中<索引>表示要添加的位置。
*RemoveItem方法:
在组合框或列表框中移除指定项目,使用格式为
<对象名>.RemoveItem<索引>
字形、字体、字号
图4-9字形、字体、字号
PrivateSubCheck1_Click()
IfCheck1.Value=1ThenLabel1.FontBold=TrueElseLabel1.FontBold=False
EndSub
PrivateSubCheck2_Click()
IfCheck2.Value=1ThenLabel1.FontItalic=TrueElseLabel1.FontItalic=False
EndSub
PrivateSubCheck3_Click()
IfCheck3.Value=1ThenLabel1.FontUnderline=TrueElseLabel1.FontUnderline=False
EndSub
PrivateSubCombo1_click()
Label1.FontName=Combo1.Text
EndSub
PrivateSubForm_Load()
Label1.Caption="无边落木潇潇下,"&vbCrLf&"不尽长江滚滚来。
"
EndSub
PrivateSubList1_Click()
Label1.FontSize=(List1.ListIndex+1)*10
EndSub
第五章图形设计
你知道如何用计算机语言来绘制图形吗?
你想在窗体上画出双曲线、抛物线、正弦曲线吗?
你想利用了解屏幕保护程序是如何实现的吗?
那就让我们进入VB的坐标系统来了解一下VB绘图的基本知识吧。
图5-1图形设计样例
5.1VB系统中的坐标系
VB中的窗体或是图片框、框架(Frame)都可称为容器控件,因为不论是窗体、还是图片框,其中都要放置其它控件,比如命令按钮、单选框。
如下图所示的窗体中,左边是框架控件,内含两个单选框;右边是个图片框,内含2个直线和4个标签(Label)。
图5-2容器控件:
窗体、框架、图片框
这些含在容器控件内的控件,如何来描述自己的位置呢?
其实,每个容器控件建立后,就会就其内部形成坐标系。
比如图片框控件,它的坐标系就是以图标框左上角这一点为原点的坐标系,如图5-3所示。
图5-3图片框内部坐标系和窗体的坐标系
5.2自定义坐标系
上面的坐标系,可以用来描述某个控件在容器中的位置,但却难以让我们使用解析几何的知识来绘绘制曲线。
为此,我们必须把系统默认的坐标系变为我们熟悉的直角坐标系。
VB中可以用Scale方法来实现。
[对象名.]Scale(x1,y1)-(x2,y2)
其中如果容器是窗体的话,其对象名可以省略。
(x1,y1)决定新坐标系中左上角的坐标值,(x2,y2)决定新坐标系中右下角的坐标值。
例如
Scale(-5,5)-(5,-5)
图5-4自定义坐标系
5.3图形绘制的基本方法
一、画点Pset(x,y)[,颜色]
其中x,y为欲画点位置的坐标;颜色是可选项,默认黑色;可以用RGB函数或QBcolor函数来返回颜色值。
或者选用以下VB常量来表示颜色:
vbRed、vbYellow、vbWhite、vbBlack、vbGreen、vbBlue、vbCyan(青色)、vbMagenta(洋红色)
例:
Pset(3,1)------在(3,1)处画一黑点
Pset(2,5),vbYellow-----在(2,5)处画一黄点
在窗体中增加一个按钮,在按钮单击事件中增加下面语句,会有什么效果?
SubCommand1_click()
Scale(-5,5)-(5,-5)
pSet(0,0),vbred
endSub
上面的例子中,Command1的作用在于在新坐标系原点处产生一个红点,大家发现这一红点了没有?
得眼力很好才能发现这个1个象素大小的原点。
如何改变圆点的大小呢?
这就要借助DrawWidth这一属性。
将窗体的DrawWidth属性改为10,再看看上面的程序,原点就不难找了。
二、画线段Line(x1,y1)-(x2,y2)[,颜色]
在初等几何学中,我们就学过这样的定理两点决定一条直线,同样一条线段也可以通过提供(x1,y1)、(x2,y2)来决定。
同画点一样,线段的颜色是可选的。
例如:
画一条过(0,-2)、(3,1)两点的线段。
Scale(-5,5)-(5,-5)
Line(0,-2)-(3,1)
图5-5画直线
三、清屏CLS
用来把屏幕上的点、线抹除。
坐标轴的显示和隐藏
你能实现单击窗体出现当前坐标系的X轴和Y轴及原点,双击窗体则清屏吗?
试试看,请参考图5-6的程序效果图来实现你的程序。
图5-6坐标轴的显示和隐藏
_______________________________________________________
_______________________________________________________
_______________________________________________________
_______________________________________________________
_______________________________________________________
_______________________________________________________
_______________________________________________________
_______________________________________________________
5.4曲线的绘制
一、正弦曲线
想想看,怎么在窗体上产生这样的一条正弦曲线?
大家一定明白这样一个道理吧,线是点的集合。
实际上这条曲线是由1000个点构成的。
我们的程序实现这一曲线的原理,就是用循环语句把这1000个正弦点依次描绘出来。
循环语句:
forx=-5to5step0.01
即从坐标系左端-5处到右端+5处,每隔0.01,产生一个正弦点,把这一正弦点描出来。
图5-7画正弦曲线
PrivateSubCommand1_Click()
Scale(-5,5)-(5,-5)
Forx=-5to5step0.01
Y=sin(x)
Pset(x,y),vbBlue
Next
EndSub
同样的道理,我们可以绘制余弦曲线,双曲线等解析几何上的曲线。
抛物线的绘制
在窗体上绘制y=2x2+x+1所确定的曲线,设x在-5到5之间
图5-8画抛物线
_____________________________________________________
_____________________________________________________
______________________________________________________
______________________________________________________
______________________________________________________
______________________________________________________
二、用参数方程绘制曲线
有这样的参数方程:
(0≤t≤2π)
请试着在窗体上绘出它的函数图像。
分析:
根据方程可以确定x,y取值范围在-1到1之间,因此用Scale定义的坐标系为:
Scale(-1,1)-(1,-1)
以t为循环变量,t的初值和终值题目已给出了,选择适当的间隔,求出每一对x,y,将这么多个点显示出来就形成了这一星形曲线。
程序如下:
图5-9星形曲线
SubCommand3_click
Scale(-1,1)-(1,-1)
Fort=0To2*3.14159Step0.001
x=Sin(2*t)*Cos(t)
y=Sin(2*t)*Sin(t)
PSet(x,y),vbWhite
Next
EndSub
这一节课我们介绍了VB的绘图系统,坐标系如何重设,如果置点,画线,以及利用曲线方程来绘制几何曲线。
下面几幅图是学生的作品,你们知道是如何实现的吗?
动动手,也许你能找到更好的图案,到时,别忘了和我们大家一起分享哟!
图5-10其它几何曲线
第六章键盘响应
大家玩过打字游戏吗?
这个可爱的游戏可以认识我们在键盘上按的键,并把我们按的键的内容显示出来,因为VB中拥有响应键盘的事件,可以轻松实现打字游戏的制作,你想试试吗?
6.1键盘响应事件
VB中的键盘响应事件可以分成三种:
Key_Press、Key_Down、Key_Up。
其中KeyPress是用于接受键盘中大小写字母、数字、空格等键,而Key_Down和Key_Up它们接受的键盘上所有键,除了字母、数字等常用键外,也接受功能键(F1、F2等)、控制键(CTRL、ALT)、光标移动键(←↑→↓)等所有在键盘上能找到的键。
一般来说窗体(FORM)、命令按钮(COMMAND)、图片框(PICTURE)都拥有键盘响应事件。
下面我们先以窗体响应事件为例,分别介绍三种键盘响应事件。
6.2Key_Press事件
前面说过,KeyPress是用于接受键盘中大小写字母、数字、空格等主要键,更准确的说,它接受的是ASCII表上所有的键值,这就意谓的有一些功能键,控制键不能通过它的识别。
图6-1AscII表
以窗体为响应事件的对象为例:
PrivateSubForm_KeyPress(KeyAsciiAsInteger)
这里的KeyAscii就是指用户按的键,当然这个键限于字母键、数字键等表中能找到的键。
当用户按了字母"A",字母A对应的ASCII值65就赋值给KeyAscii,由KeyAscii带入键盘响应的事件处理中。
比如:
PrivateSubForm_KeyPress(KeyAsciiAsInteger)
PrintKeyAscii
EndSub
上面这个程序,就把用户按下键的ASCII值显示在窗体上。
图6-2显示按键的ASCII值
当然,我们借助CHR这个函数,把这些KeyAscii转为字母、数字。
一个打字游戏的制作
在窗体上,增加一个标签Label1和一个定时器(Timer1),将Timer1的Interval属性设为1000毫秒。
增加如下代码,试试看。
你成功了吗?
你对这个程序感兴趣吗?
是否想过扩展它的功能,比如加入一个计分功能,或者随着游戏的进行,下落的速度会越来越快,或者说出现多个字母,让玩家疲于应赴,只要你能想到的,没有什么是实现不了的,不是吗?
6.3KeyUp事件和KeyDown事件
这两个事件主要区别在于何时触发事件,一个是在键盘按下时触发事件,而另一个是在键盘抬起时触发事件。
它们能区别并接受键盘上101个按键,因此,它们过程中的参数用KeyCode,而非KeyAscii。
PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
键盘上每一个按键都有唯一对应一个KeyCode。
比如左移光标键对应的KeyCode值为0x25,而右移光标键为0x26。
为了帮助我们编程,VB定义了一系列的常数来代替这些键值。
比如:
常数
值
描述
vbKeyLeft
0x25
左移光标键
VbKeyUp
0x26
上移光标键
VbKeyRight
0x27
右移光标键
VbKeyDown
0x28
下移光标键
VbKeyReturn
0xD
ENTER键
VbKeyShift
0x10
SHIFT键
vbKeyControl
0x11
CTRL键
VbKeySpace
0x20
空格键
VbKeyA
65
A键
vbKey0
48
0键
vbKeyNumpad0
0x60
小键盘上的数字0键
vbKeyF1
0x70
F1键
KeyDown和KeyUp能替代打字游戏的KeyPress事件吗?
为什么?
这里的Shift值,指的是按键的同时是否按下了CTRL、ALT这两个控制键,比如我们常用的复制快捷键Ctrl+C,或回复消息时用的快捷键Alt+S,要侦测类似的组合键时,看Shift值了。
如果是Shift类组合键其Shift值为1;如果是Ctrl类的组合键其Shift值为2;如果是Ctrl类的组合键其Shift值为4;当然如果用户如果同时按下Ctrl和Alt键,其Shift值则是两者相加为6
贪吃猪游戏
图6-3贪吃猪游戏
什么是贪吃猪游戏,看看下面的游戏界面就知道了,开始时小猪的脸庞很小,移动键盘上光标移动键,就可以吃到包子,每吃一个包子,脸庞就增大1.2倍,一旦这只笨猪碰到窗体的四个边界,游戏就结束了。
在窗体上加入两个图片控件,Image1用于装入猪,Image2用于装入包子,在窗体的KeyDown事件中加入以下代码。
你看到游戏的效果了吗?
当然这个程序还存在很多不足,它没有交待游戏何时结束,没有计分,一切都等你来完善,还犹豫什么,开动你的脑筋,试着做出一个独一无二的贪吃猪来!
6.4KeyPreview属性
大家在应用键盘响应事件,可能会遇到一个麻烦,如果窗体上没有命令按钮、图片框时,窗体可以接受到键盘的按键,一旦窗体上加入这些控件,窗体就不再接受来自键盘的命令了。
这是因为命令按钮和图片框本身都有键盘响应事件。
PrivateSubCommand1_KeyPress(KeyAsciiAsInteger)
PrivateSubPicture1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
它们在接受键盘信息时,拥有优先权。
如果我们要把窗体接受键盘信息的位置摆在最前,就要把窗体的KeyPreview的属性定为True。
简单计算器的制作
这个简单的计算器,就是利用小键盘上进行简单的四则运算的小程序,要实现它,可以在一个窗体中,装入一个标签LABEL1,然后在窗体的KeyDown事件中加入以下代码,就可以实现一个计算器的小程序。
我们把编程思路说明一下,这个窗体中只需要一个标签LABEL控件用于显示一排数字,窗体中表格区实际上是图像,起到的只是装饰性效果,用户输入时还是借助101键盘上的小键盘区来完成加减乘除的计算。
所以,所有的程序语句都写在Form_KeyDown事件中,侦测用户键入的键值,如果在96到105之间,则说明用户按的是数字键,此时应往LABEL的最后塞入用户键入的数字,这个数字即"键值-96"。
当用户按的是加减乘除这四个键后,首先要清除LABEL上的数字,以便用户输入加减或乘除后的第二个数。
当然,清除数字前需把第一个数记下来,也要记得当前的运算符是什么。
当用户按回车时,即展开运算,把第一个数和当前LABEL中的数进行加减乘除计算,结果显示到标签上。
好了,看完这个程序,先回答一个问题:
为什么要把YSF和First_Num设为全程变量?
你看出这个程序存在哪些不足的地方吗?
请写在下面。
____________________________________________________________________
____________________________________________________________________
_____________