1、VB教程提高篇VB教程提高篇提 高 篇第四章 基本控件你知道为什么把VB称为可视化编程?答案在于VB提供了许许多多的控件,这些控件是构成程序的元素,只要我们把这些控件安排好,设置好它们的属性,编写相应的触发事件,一个VB程序的设计就水到到渠成了。下面,我们就介绍几种常用的控件。图4-1 常用控件图标4.1 图片框PictureBox和图像框Image将图片框或图像框拖放到窗体上,设置它们的picture属性,就可以把硬盘中的一幅图片载入到框中。或者借助LoadPicture函数来实现图片载入。装入图片和卸载图片 图4-2 载入图片和卸载图片Private Sub Command1_Click(
2、 ) 装入图片,图片来自当前目录下的habbit.gif Picture1.Picture = LoadPicture(App.Path & habbit.gif) app.path 指的是当前VB工程所在目录End SubPrivate Sub Command2_Click( ) 卸载图片 Picture1.Picture = LoadPicture()End Sub 图片框Picturebox和图像框Image的区别在于,Image控件只支持Picturebox控件的一部分属性、事件和方法。但Image控件有一个特有的属性Stretch,它能让装入的图片适应Image的大小。 图4-3 I
3、mage控件显示图像时的两种方式4.2 定时器顾名思义,这个控件和时间有关系。它有一个Interval属性,通过它可以设置触发定时事件的时间间隔。它的单位是毫秒。假设我们要定时器每隔1秒触发内部事件,我们可以把Interval设为1000。定时的内部事件是Timer事件,这一事件会每隔Interval毫秒执行一次。走马灯往窗体内拖放一个标签和一个定时器,标签上任写一段话,我们的走马灯就是让这一段话从左到右飘移,移出窗体右界后,还能从窗体左边出现。图4-5 走马灯Private Sub Timer1_Timer() 让标签右移,就是让它的水平坐标增大 Label1.Left = Label1.L
4、eft + 100 如果水平坐标过了窗体右界4800,标签就移动最左端 If Label1.Left 4800 Then Label1.Left = -2000 End IfEnd Sub4.3 滚动条 (HscrollBar、VscrollBar)滚动条有三个属性值得注意:* Value属性:滚动条的当前位置值,该值介于Max和Min属性值之间。* max属性:当滚动块移到滚动条最右端或最底端时,滚动条的VALUE时等于Max值。* min属性:当滚动块移到滚动条最左端或最顶端时,滚动条的VALUE时等于Min值。系统默认,min属性值为0,而max属性值为32767调色器图4-6 调色器P
5、rivate Sub HScroll1_Change()Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)End SubPrivate Sub HScroll2_Change()Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)End SubPrivate Sub HScroll3_Change()Picture1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Va
6、lue)End Sub4.4 单选框(OptionButton)和复选框(CheckBox)单选框用于提供一个可以打开或关闭的选项。在使用时一般将几个单选框组成一组,在同一组中,用户只能选择其中一项。在Frame控件、PictureBox或窗体这样的容器控件中绘制单选框,就可以把这些控件分组。同一容器中的单选框为一个组,运行时,选择一个单选框后,同组中其它单选框就会自动取消选择。用于表示单选框或复选框选中状态的属性是Value。对于单选框而言,Value值为True表示选中该选项;Value值为False表示未选择该选项。对于复选框而言,Value值为1表示选中该选项;Value值为0表示未选
7、择该选项;Value值为2将使复选框处于灰色状态,常用这种状态表示不确定或部分选中状态。图4-7 置于两个容器中的单选框组字体字形的修饰图4-8 字型、字号Private Sub Check1_Click() Text1.FontBold = True 加粗End SubPrivate Sub Check2_Click() Text1.FontItalic = True 倾斜End SubPrivate Sub Check3_Click() Text1.FontUnderline = True 下划线End SubPrivate Sub Option1_Click() Text1.FontSi
8、ze = 10End SubPrivate Sub Option2_Click() Text1.FontSize = 20End SubPrivate Sub Option3_Click() Text1.FontSize = 30End Sub4.5 组合框(Combo)和列表框(List)组合框和列表框的作用相似,只是组合框控件将文本框和列表框的特性结合在一起,既可以在控件的文本框(编辑域)部分输入信息,也可以在控件的列表框部分选择一项。另外,组合框可以将列表项折叠起来,使用时再通过下拉列表进行选择,所以使用组合框比使用列表框更节省界面空间。两者都共同具有一些重要属性:* List属性:返回
9、或设置列表部分的项目,在运行时,列表的第一项为List(0),第二项为List(1).。* ListIndex属性:返回当前选中的列表项的索引,比如有5个列表项,若选择了第3项,则ListIndex的值为2,如果未选取任何一项,则ListIndex值为-1* ListCount属性:返回列表项目总个数。两者都使用的一些方法有:* AddItem 方法:向组合框或列表框中增加新的项目,使用格式为:.AddItem ,索引格式中表示要添加的位置。* RemoveItem 方法:在组合框或列表框中移除指定项目,使用格式为.RemoveItem 字形、字体、字号图4-9 字形、字体、字号Private
10、 Sub Check1_Click() If Check1.Value = 1 Then Label1.FontBold = True Else Label1.FontBold = FalseEnd SubPrivate Sub Check2_Click() If Check2.Value = 1 Then Label1.FontItalic = True Else Label1.FontItalic = FalseEnd SubPrivate Sub Check3_Click() If Check3.Value = 1 Then Label1.FontUnderline = True Els
11、e Label1.FontUnderline = FalseEnd SubPrivate Sub Combo1_click() Label1.FontName = Combo1.TextEnd SubPrivate Sub Form_Load() Label1.Caption = 无边落木潇潇下, & vbCrLf & 不尽长江滚滚来。End SubPrivate Sub List1_Click() Label1.FontSize = (List1.ListIndex + 1) * 10End Sub第五章 图形设计你知道如何用计算机语言来绘制图形吗?你想在窗体上画出双曲线、抛物线、正弦曲线吗
12、?你想利用了解屏幕保护程序是如何实现的吗?那就让我们进入VB的坐标系统来了解一下VB绘图的基本知识吧。 图5-1 图形设计样例5.1 VB系统中的坐标系VB中的窗体或是图片框、框架(Frame)都可称为容器控件,因为不论是窗体、还是图片框,其中都要放置其它控件,比如命令按钮、单选框。如下图所示的窗体中,左边是框架控件,内含两个单选框;右边是个图片框,内含2个直线和4个标签(Label)。图5-2 容器控件:窗体、框架、图片框这些含在容器控件内的控件,如何来描述自己的位置呢?其实,每个容器控件建立后,就会就其内部形成坐标系。比如图片框控件,它的坐标系就是以图标框左上角这一点为原点的坐标系,如图5
13、-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为欲画点位置的坐标;
14、 颜色是可选项,默认黑色;可以用RGB函数或QBcolor函数来返回颜色值。 或者选用以下VB常量来表示颜色: vbRed、vbYellow、vbWhite、vbBlack 、vbGreen、vbBlue、vbCyan(青色)、vbMagenta(洋红色) 例:Pset (3,1) -在(3,1)处画一黑点 Pset (2,5),vbYellow-在(2,5)处画一黄点 在窗体中增加一个按钮,在按钮单击事件中增加下面语句,会有什么效果? Sub Command1_click() Scale (-5,5)-(5,-5) pSet (0,0),vbred end Sub 上面的例子中,Comman
15、d1的作用在于在新坐标系原点处产生一个红点,大家发现这一红点了没有?得眼力很好才能发现这个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 画直线三、清
16、屏 CLS用来把屏幕上的点、线抹除。 坐标轴的显示和隐藏你能实现单击窗体出现当前坐标系的X轴和Y轴及原点,双击窗体则清屏吗?试试看,请参考图5-6的程序效果图来实现你的程序。图5-6 坐标轴的显示和隐藏_5.4 曲线的绘制一、正弦曲线想想看,怎么在窗体上产生这样的一条正弦曲线?大家一定明白这样一个道理吧,线是点的集合。实际上这条曲线是由1000个点构成的。我们的程序实现这一曲线的原理,就是用循环语句把这1000个正弦点依次描绘出来。 循环语句: for x= -5 to 5 step 0.01 即从坐标系左端-5处到右端+5处,每隔0.01,产生一个正弦点,把这一正弦点描出来。 图5-7 画正
17、弦曲线 Private Sub Command1_Click( ) Scale (-5,5)-(5,-5) For x= -5 to 5 step 0.01 Y=sin(x) Pset (x,y),vbBlue Next End Sub 同样的道理,我们可以绘制余弦曲线,双曲线等解析几何上的曲线。 抛物线的绘制在窗体上绘制 y=2x2+x+1所确定的曲线,设x在-5到5之间图5-8 画抛物线_二、用参数方程绘制曲线 有这样的参数方程: (0t2) 请试着在窗体上绘出它的函数图像。 分析:根据方程可以确定x,y取值范围在-1到1之间,因此用Scale定义的坐标系为: Scale(-1,1)-(1
18、,-1) 以t为循环变量,t的初值和终值题目已给出了,选择适当的间隔,求出每一对x,y,将这么多个点显示出来就形成了这一星形曲线。程序如下: 图5-9 星形曲线 Sub Command3_click Scale (-1, 1)-(1, -1) For t = 0 To 2 * 3.14159 Step 0.001 x = Sin(2 * t) * Cos(t) y = Sin(2 * t) * Sin(t) PSet (x, y), vbWhiteNext End Sub这一节课我们介绍了VB的绘图系统,坐标系如何重设,如果置点,画线,以及利用曲线方程来绘制几何曲线。下面几幅图是学生的作品,你
19、们知道是如何实现的吗?动动手,也许你能找到更好的图案,到时,别忘了和我们大家一起分享哟! 图5-10 其它几何曲线第六章 键盘响应大家玩过打字游戏吗?这个可爱的游戏可以认识我们在键盘上按的键,并把我们按的键的内容显示出来,因为VB中拥有响应键盘的事件,可以轻松实现打字游戏的制作,你想试试吗?6.1 键盘响应事件VB中的键盘响应事件可以分成三种:Key_Press、Key_Down、Key_Up。其中KeyPress是用于接受键盘中大小写字母、数字、空格等键,而Key_Down和Key_Up它们接受的键盘上所有键,除了字母、数字等常用键外,也接受功能键(F1、F2等)、控制键(CTRL、ALT)
20、、光标移动键()等所有在键盘上能找到的键。一般来说窗体(FORM)、命令按钮(COMMAND)、图片框(PICTURE)都拥有键盘响应事件。下面我们先以窗体响应事件为例,分别介绍三种键盘响应事件。6.2 Key_Press事件前面说过,KeyPress是用于接受键盘中大小写字母、数字、空格等主要键,更准确的说,它接受的是ASCII表上所有的键值,这就意谓的有一些功能键,控制键不能通过它的识别。图6-1 AscII表以窗体为响应事件的对象为例:Private Sub Form_KeyPress (KeyAscii As Integer)这里的KeyAscii就是指用户按的键,当然这个键限于字母键
21、、数字键等表中能找到的键。当用户按了字母A,字母A对应的ASCII值65就赋值给KeyAscii,由KeyAscii带入键盘响应的事件处理中。比如:Private Sub Form_KeyPress(KeyAscii As Integer) Print KeyAsciiEnd Sub上面这个程序,就把用户按下键的ASCII值显示在窗体上。图6-2 显示按键的ASCII值当然,我们借助CHR这个函数,把这些KeyAscii转为字母、数字。一个打字游戏的制作在窗体上,增加一个标签Label1和一个定时器(Timer1),将Timer1的Interval属性设为1000毫秒。增加如下代码,试试看。
22、你成功了吗?你对这个程序感兴趣吗?是否想过扩展它的功能,比如加入一个计分功能,或者随着游戏的进行,下落的速度会越来越快,或者说出现多个字母,让玩家疲于应赴,只要你能想到的,没有什么是实现不了的,不是吗?6.3 KeyUp事件和KeyDown事件这两个事件主要区别在于何时触发事件,一个是在键盘按下时触发事件,而另一个是在键盘抬起时触发事件。它们能区别并接受键盘上101个按键,因此,它们过程中的参数用KeyCode,而非KeyAscii。Private Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)键盘上每一个按键都有唯一对应一个Ke
23、yCode。比如左移光标键对应的KeyCode值为0x25,而右移光标键为0x26。为了帮助我们编程,VB定义了一系列的常数来代替这些键值。比如:常数值描述vbKeyLeft 0x25左移光标键VbKeyUp0x26上移光标键VbKeyRight0x27右移光标键VbKeyDown0x28下移光标键VbKeyReturn0xDENTER 键VbKeyShift0x10SHIFT 键vbKeyControl0x11CTRL 键VbKeySpace0x20空格键VbKeyA65A 键vbKey0480 键vbKeyNumpad00x60小键盘上的数字0 键vbKeyF10x70F1 键KeyDow
24、n和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 贪吃猪游戏什么是贪吃猪游戏,看看下面的游戏界面就知道了,开始时小猪的脸庞很小,移动键盘上光标移动键,就可以吃到包子,每
25、吃一个包子,脸庞就增大1.2倍,一旦这只笨猪碰到窗体的四个边界,游戏就结束了。在窗体上加入两个图片控件,Image1用于装入猪,Image2用于装入包子,在窗体的KeyDown事件中加入以下代码。 你看到游戏的效果了吗?当然这个程序还存在很多不足,它没有交待游戏何时结束,没有计分,一切都等你来完善,还犹豫什么,开动你的脑筋,试着做出一个独一无二的贪吃猪来!6.4 KeyPreview属性大家在应用键盘响应事件,可能会遇到一个麻烦,如果窗体上没有命令按钮、图片框时,窗体可以接受到键盘的按键,一旦窗体上加入这些控件,窗体就不再接受来自键盘的命令了。这是因为命令按钮和图片框本身都有键盘响应事件。Pr
26、ivate Sub Command1_KeyPress(KeyAscii As Integer)Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As Integer)它们在接受键盘信息时,拥有优先权。如果我们要把窗体接受键盘信息的位置摆在最前,就要把窗体的KeyPreview的属性定为True。 简单计算器的制作这个简单的计算器,就是利用小键盘上进行简单的四则运算的小程序,要实现它,可以在一个窗体中,装入一个标签LABEL1,然后在窗体的KeyDown事件中加入以下代码,就可以实现一个计算器的小程序。 我们把编程思路说明一下,这个窗体中
27、只需要一个标签LABEL控件用于显示一排数字,窗体中表格区实际上是图像,起到的只是装饰性效果,用户输入时还是借助101键盘上的小键盘区来完成加减乘除的计算。所以,所有的程序语句都写在Form_KeyDown事件中,侦测用户键入的键值,如果在96到105之间,则说明用户按的是数字键,此时应往LABEL的最后塞入用户键入的数字,这个数字即键值-96。当用户按的是加减乘除这四个键后,首先要清除LABEL上的数字,以便用户输入加减或乘除后的第二个数。当然,清除数字前需把第一个数记下来,也要记得当前的运算符是什么。当用户按回车时,即展开运算,把第一个数和当前LABEL中的数进行加减乘除计算,结果显示到标签上。好了,看完这个程序,先回答一个问题:为什么要把YSF和First_Num设为全程变量?你看出这个程序存在哪些不足的地方吗?请写在下面。_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1