运行程序,如图4-5。按下“清除”,文本框被清除,按下“复原”,文本有被恢复,许多程序中的Undo/Redo就是利用这个原理实现的,现在知道为什么内存越多越好了吧。
我们在把程序修改一下,把Button2删除,Button1的Enabled属性改为True,Caption改为“清除”,填写代码: Private Sub Command1_Click() If Command1.Caption = \清除\ 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,
15
只是Index属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建立一个按钮(Command1),然后在Command1上击鼠标右键,选择复制(Copy),然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组,选择“是”,重复上面步骤,直至创立17个按钮为止。各控件属性如下表:
Text1 BackColor=&H00C0FFFF& Text=“0.” Command1 Index 0――16 Index 0――9 Caption= Index 10 Caption= Index 11Caption= Index 12 Caption= Index 13 Caption= Index 14 Caption= Index 15 Caption= Index 16 Caption=“清除” 如果想改变一些其他的属性,比如字体,可以自己定义一下Font属性,如果相对多个控件的共同属性进行改变,可以在窗体上按下鼠标,拖动,把多个控件一起选定,然后对它们的共同属性进行修改。
16
别看这个东西小,还费了近我两个小时呢,不觉大叹手生,里面也有些地方很绕弯子,我尽量解释清楚。
在编写程序之前,我们先来回顾一下计算器的使用。
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
17
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 = \FirstNum = False Else
StrNum1 = StrNum1 + \ End If
18
Else’已有小数点 Exit Sub’则退出单击事件 End If
PointFlag = True Text1.Text = StrNum1
1.5 4-2
第四章 按钮(二)
下面会复杂一些,我们先跳过等号,而来处理四则运算: 先在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清空
19