VB入门教程-第五章 按钮(一)

[复制链接]
查看2478 | 回复5 | 2006-4-23 22:49:00 | 显示全部楼层 |阅读模式

第四章 按钮(一)

  从本章开始我们将正式进入VB的编程世界,但这还仅仅是个开端,要编出功能强大的软件,还要学很多东西,那就要看以后的VB高级教程了,我也得努力学啊!

  按钮是我们在Windows操作见到最多的控件,它们有着各种各样的功能:“确认”、“取消”、“下一步”等等,这些都是按钮的表现,另外还有很多图形话的按钮,其实它们并没什么不同,所有的按钮都是通过单击(click)事件实现的,只不过是在外表不同罢了。下面就让我们建立一个最简单的按钮,双击工具箱的CommandButton,将在窗体上建立一个形如图4-1的按钮,它的缺省名(Name属性)为Command1,我们可以把它改名为cmdExit,把Caption属性设为“退出”,然后双击,按钮填写代码:

Private Sub cmdExit_Click()

Unload Me

End Sub

  按下F5或者工具条上的播放按钮,运行程序。图4-2当你按下退出按钮的时候,就会自动退出程序,原因是当你单击按钮时激活了它的Click事件,执行“Unload Me”语句,使得窗体被卸载。

  上面举了一个比较简单的例子,下面的例子稍微复杂些:

  新建窗体,控件布局如图4-3所示,包括一个List控件,一个Text控件和两个按钮(Command1和Command2), (比较简单的程序我们都采用缺省名),对它们属性做如下修改:

List1

Caption=“请输入你的名字”

Text1

Text=“”(空字符串)

Button1

Caption=“复原”

Enabled=False

Button2

Caption=“清除”

  把使用Button1的Enabled属性设为False(假),是使程序在初始时,无法单击Command1。按F5,运行程序,图4-4,复原按钮成为灰色,不可选。

当然现在程序还什么也不能做,下面我们在程序中添加代码:

首先在General里声明全局变量:

Dim StoreString As String 用来储存字符串

※注意:为什么用全局变量?

VB里每一个小过程都相当于一个程序,程序里的变量称为局部变量,是只能在程序内部使用的,而当程序调用结束后,由于从内存中被清除,所以变量储存的值也就消失了,这里的全局变量是用来在过程中传递字符串。

接着填写以下代码:

Private Sub Command1_Click()

Text1.Text = StoreString
Command1.Enabled = False

End Sub

 

Private Sub Command2_Click()

StoreString = Text1.Text
Text1.Text = ""
清除
Command1.Enabled = True

End Sub

  运行程序,如图4-5。按下“清除”,文本框被清除,按下“复原”,文本有被恢复,许多程序中的Undo/Redo就是利用这个原理实现的,现在知道为什么内存越多越好了吧。

  我们在把程序修改一下,把Button2删除,Button1的Enabled属性改为True,Caption改为“清除”,填写代码:

Private Sub Command1_Click()

If Command1.Caption = "清除" Then

StoreString = Text1.Text
Text1.Text = ""
清除
Command1.Caption = "复原"

Else

Text1.Text = StoreString
Command1.Caption = "清除"

End If

End Sub

  同样可以上面的功能,但是却少用了一个控件,控件使用少的程序启动会快些。

  下面的例子要更加复杂些,大家一定都用过Windows附件中的计算器,它是一个标准的科学计算器,利用VB我们也可以做到,只是没有那么复杂,四则运算而已。

  先建立一个新的项目文件,里面包含一个Form1的窗体。然后,添加控件,包括一个Text框(Text1),和17个按钮,这17个按钮使用的名称都是Command1,只是Index属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建立一个按钮(Command1),然后在Command1上击鼠标右键,选择复制(Copy),然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组,选择“是”,重复上面步骤,直至创立17个按钮为止。各控件属性如下表:

Text1

BackColor=&H00C0FFFF&

Text=“0.”

Command1

Index 0――16

Index 0――9 Caption=“0”-“9”

Index 10 Caption=“.”

Index 11 Caption=“=”

Index 12 Caption=“+”

Index 13 Caption=“-”

Index 14 Caption=“×”

Index 15 Caption=“÷”

Index 16 Caption=“清除”

  如果想改变一些其他的属性,比如字体,可以自己定义一下Font属性,如果相对多个控件的共同属性进行改变,可以在窗体上按下鼠标,拖动,把多个控件一起选定,然后对它们的共同属性进行修改。

  别看这个东西小,还费了近我两个小时呢,不觉大叹手生,里面也有些地方很绕弯子,我尽量解释清楚。

  在编写程序之前,我们先来回顾一下计算器的使用。

  1. 按下数字键在液晶屏上会出现数字,这是最基本的功能。
  2. 第一次按下运算键,再按下数字键,将重新输入第二个数字,再次按下运算键,将算出前两个数的结果,然后按下数字键,将又重新输入新的数字。
  3. 输入数字后,按下“等于键”将仍输出原来的数字,输入运算符和第二个数字后在按下“等于”,将得到二者的结果。然后又重复第二、三步。
  4. 按下“清除”,数据被全部清除。

  了解了这些,我们一步一步实现。

  先实现数据的输入,请看代码。

  与未创立组的控件相比,它的事件里多了Index参数,组里所有的对象都使用同一个事件。

  先在General里声明窗体级全局变量:

Dim Num1, Num2 As Single
Dim StrNum1, StrNum2 As String
Dim FirstNum As Boolean
判断是否是数字开头

  因为Text1里是存放字符串的,所以要把输入的数据进行运算,必须把字符型变量转变为实型变量,分别用Num1、Num2和StrNum1、StrNum2进行存放。

  在Form_Load事件里给变量初赋值:

Num1 = 0
Num2 = 0
StrNum1 = ""
StrNum2 = ""
FirstNum = True

  因为17个按钮使用的是同一事件,所以我们用一个Select Case语句区分各个按钮,双击任意按钮输入代码:

Private Sub Command1_Click(Index As Integer)

Select Case Index

Case 0 To 9

If FirstNum Then

StrNum1 = Str(Index)’实型转字符型
FirstNum = False’初赋值为假

Else’非初赋值

StrNum1 = StrNum1 + Str(Index)

End If

Text1.Text = StrNum1’显示

<还有其他语句,等待插入>

End Select

End Sub

运行程序的话已经可以输入数据,下面我们来处理小数点。

在General里声明新的变量:

Dim PointFlag As Boolean 判断是否已有小数点

我们知道小数点只能输入一次,一个数据中不能有多个小数点存在,所以需要一个布尔变量做判断。

在Form_Load里进行初赋值:

PointFlag = False

在Command的单击事件里接着上面输入新的代码:

Case 10

If Not PointFlag Then’如果没有小数点

If FirstNum Then’如果是第一个字符

StrNum1 = "0."
FirstNum = False

Else

StrNum1 = StrNum1 + "."

End If

Else’已有小数点

Exit Sub’则退出单击事件

End If

PointFlag = True
Text1.Text = StrNum1

 

按钮(二)

  下面会复杂一些,我们先跳过等号,而来处理四则运算:

先在General里声明新变量:

Dim Runsign As Integer 储存运算符号

Dim SignFlag As Boolean 判断是否已有运算符号

然后在Form_Load中进行初赋值:

Runsign = 0

SignFlag = False

在接下的Command1_Click中继续输入代码:

Case 12 To 15

FirstNum = True’使下一次可以输入新数据
PointFlag = False
还原标记值

If SignFlag Then’前面已有运算符未运算

Call Run

Else

SignFlag = True
StrNum2 = StrNum1
’把字符串1复制给字符串2
StrNum1 = ""’字符串1清空

End If

Runsign = Index - 11 ‘储存键入的运算符

  里面运算的部分我用了一个过程,是因为在按下等号时还会调用到运算过程,这样可以减少代码的输入,也使程序便于浏览。建立过程(Procedure),可以在General部分直接输入,也可以通过菜单里的“Add Procedure”添加。Run的代码如下:

loveplc | 2006-4-23 22:50:00 | 显示全部楼层

Sub Run()

Num1 = Val(StrNum2)
Num2 = Val(StrNum1)

Select Case Runsign

Case 1’加

equal = Num1 + Num2

Case 2’减

equal = Num1 - Num2

Case 3’乘

equal = Num1 * Num2

Case 4’除

equal = Num1 / Num2

End Select

StrNum2 = Str(equal)
StrNum1 = StrNum2
Text1.Text = StrNum2

End Sub

下面是其余的代码:(在Command1_Click事件里,接着写)

Case 11

If Not SignFlag Then

Text1.Text = StrNum1
equal = Val(StrNum1)
FirstNum = True
PointFlag = False

Else

Call Run
SignFlag = False

End If

Case Else’清除按钮

Call ClearData

里面又用到了一个ClearData过程,实际上就是Form_Load里的变量初赋值,代码如下:

Sub ClearData()

Num1 = 0
Num2 = 0
StrNum1 = \"\"
StrNum2 = \"\"
FirstNum = True
PointFlag = False
Runsign = 0
SignFlag = False
Text1.Text = \"0.\"

End Sub

这样完整的程序就完成了,本章介绍了VB的第一个控件――按钮,并且举例,希望你继续看下一章――菜单。

下面给出完整的程序代码:

Dim Num1, Num2 As Single

Dim StrNum1, StrNum2 As String

Dim FirstNum As Boolean 判断是否是数字开头

Dim PointFlag As Boolean 判断是否已有小数点

Dim Runsign As Integer 储存运算符号

Dim SignFlag As Boolean 判断是否已有运算符号

 

Sub ClearData()

Num1 = 0

Num2 = 0

StrNum1 = \"\"

StrNum2 = \"\"

FirstNum = True

PointFlag = False

Runsign = 0

SignFlag = False

Text1.Text = \"0.\"

End Sub

 

Sub Run()

Num1 = Val(StrNum2)

Num2 = Val(StrNum1)

Select Case Runsign

Case 1

equal = Num1 + Num2

Case 2

equal = Num1 - Num2

Case 3

equal = Num1 * Num2

Case 4

equal = Num1 / Num2

End Select

StrNum2 = Str(equal)

StrNum1 = StrNum2

Text1.Text = StrNum2

End Sub

 

Private Sub about_Click()

MsgBox \"Create by 周晓阳。1998/7/27\", vbDefaultButton1, \"VB教程第四章范例\"

End Sub

 

Private Sub Command1_Click(Index As Integer)

Select Case Index

Case 0 To 9

If FirstNum Then

StrNum1 = Str(Index)

FirstNum = False

Else

StrNum1 = StrNum1 + Str(Index)

End If

Text1.Text = StrNum1

Case 10

If Not PointFlag Then

If FirstNum Then

StrNum1 = \"0.\"

FirstNum = False

Else

StrNum1 = StrNum1 + \".\"

End If

Else

Exit Sub

End If

PointFlag = True

Text1.Text = StrNum1

Case 12 To 15

FirstNum = True

PointFlag = False

还原标记值

If SignFlag Then

Call Run

Else

SignFlag = True

StrNum2 = StrNum1

StrNum1 = \"\"

End If

Runsign = Index - 11

Case 11

If Not SignFlag Then

Text1.Text = StrNum1

equal = Val(StrNum1)

FirstNum = True

PointFlag = False

Else

Call Run

SignFlag = False

End If

 

Case Else

Call ClearData

 

End Select

End Sub

 

Private Sub Form_Load()

Call ClearData

End Sub

补充说明

按钮还有两个重要的属性Default([s:292]属性)和Cancel(取消属性),两个属性都以布尔赋值,把Default设为True,则在按下回车键时,不论焦点处于何处,都会触发该按钮的Click事件,而当Cancel属性被设为True,在按下ESC键时,该按钮的Click属性发生。下面举个例子:

建立一个新窗体和两个按钮,Name属性分别为cmdOKcmdCancel,把前者的Default设为True,后者的Cancel设为TrueCaption属性分别为OKCancel。如图48。填写代码后运行:

Private Sub cmdCancel_Click()

MsgBox \"Cancel按钮被按下\", vbDefaultButton1, \"提示\"

End Sub

 

Private Sub cmdOK_Click()

MsgBox \"OK按钮被按下\", vbDefaultButton1, \"提示\"

End Sub

结果如图49410

快捷键大家一定都知道,在VB如何实现呢。其实很简单,在刚才的例子里在建立一个按钮Command1,把它的Caption属性设为Click &ME,如图411,在M的下面有一条下划线,运行程序,当你按下Alt+M的时候就触发了Command1_Click事件:

Private Sub Command1_Click()

MsgBox \"Click ME 按钮被按下\", vbDefaultButton1, \"提示\"

End Sub

据我所知,有许多用户有使用快捷键的习惯,注意细节上的问题能够使将来你的程序得到更多人的欣赏,不是吗?

xuliang987 | 2007-5-16 20:31:00 | 显示全部楼层
学习中
gdzqhxm | 2007-9-14 19:19:00 | 显示全部楼层

谢谢楼主!

MUJIAN | 2007-9-23 12:52:00 | 显示全部楼层
[em04]
myele2008 | 2007-11-22 19:45:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则