3按钮.docx
- 文档编号:30726925
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:14
- 大小:27.09KB
3按钮.docx
《3按钮.docx》由会员分享,可在线阅读,更多相关《3按钮.docx(14页珍藏版)》请在冰豆网上搜索。
3按钮
按钮是我们在Windows操作见到最多的控件,它们有着各种各样的功能:
“确认”、“取消”、“下一步”等等,这些都是按钮的表现,另外还有很多图形话的按钮,其实它们并没什么不同,所有的按钮都是通过单击(click)事件实现的,只不过是在外表不同罢了。
下面就让我们建立一个最简单的按钮,双击工具箱的CommandButton,将在窗体上建立一个形如图4-1
的按钮,它的缺省名(Name属性)为Command1,我们可以把它改名为cmdExit,把Caption属性设为“退出”,然后双击,按钮填写代码:
PrivateSubcmdExit_Click()
UnloadMe
EndSub
按下F5或者工具条上的播放按钮,运行程序。
图4-2当你按下退出按钮的时候,就会自动退出程序,原因是当你单击按钮时激活了它的Click事件,执行“UnloadMe”语句,使得窗体被卸载。
上面举了一个比较简单的例子,下面的例子稍微复杂些:
新建窗体,控件布局如图4-3所示,包括一个List控件,一个Text控件和两个按钮(Command1和Command2),(比较简单的程序我们都采用缺省名),对它们属性做如下修改:
List1
Caption=“请输入你的名字”
Text1
Text=“”(空字符串)
Button1
Caption=“复原”
Enabled=False
Button2
Caption=“清除”
把使用Button1的Enabled属性设为False(假),是使程序在初始时,无法单击Command1。
按F5,运行程序,图4-4,复原按钮成为灰色,不可选。
当然现在程序还什么也不能做,下面我们在程序中添加代码:
首先在General里声明全局变量:
DimStoreStringAsString'用来储存字符串
※注意:
为什么用全局变量?
VB里每一个小过程都相当于一个程序,程序里的变量称为局部变量,是只能在程序内部使用的,而当程序调用结束后,由于从内存中被清除,所以变量储存的值也就消失了,这里的全局变量是用来在过程中传递字符串。
接着填写以下代码:
PrivateSubCommand1_Click()
Text1.Text=StoreString
Command1.Enabled=False
EndSub
PrivateSubCommand2_Click()
StoreString=Text1.Text
Text1.Text=""'清除
Command1.Enabled=True
EndSub
运行程序,如图4-5。
按下“清除”,文本框被清除,按下“复原”,文本有被恢复,许多程序中的Undo/Redo就是利用这个原理实现的,现在知道为什么内存越多越好了吧。
我们在把程序修改一下,把Button2删除,Button1的Enabled属性改为True,Caption改为“清除”,填写代码:
PrivateSubCommand1_Click()
IfCommand1.Caption="清除"Then
StoreString=Text1.Text
Text1.Text=""'清除
Command1.Caption="复原"
Else
Text1.Text=StoreString
Command1.Caption="清除"
EndIf
EndSub
同样可以上面的功能,但是却少用了一个控件,控件使用少的程序启动会快些。
下面的例子要更加复杂些,大家一定都用过Windows附件中的计算器,它是一个标准的科学计算器,利用VB我们也可以做到,只是没有那么复杂,四则运算而已。
先建立一个新的项目文件,里面包含一个Form1的窗体。
然后,添加控件,包括一个Text框(Text1),和17个按钮,这17个按钮使用的名称都是Command1,只是Index属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建立一个按钮(Command1),然后在Command1上击鼠标右键,选择复制(Copy),然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组,选择“是”,重复上面步骤,直至创立17个按钮为止。
各控件属性如下表:
Text1
BackColor=&H00C0FFFF&
Text=“0.”
Command1
Index0――16
Index0――9Caption=“0”-“9”
Index10Caption=“.”
Index11Caption=“=”
Index12Caption=“+”
Index13Caption=“-”
Index14Caption=“×”
Index15Caption=“÷”
Index16Caption=“清除”
如果想改变一些其他的属性,比如字体,可以自己定义一下Font属性,如果相对多个控件的共同属性进行改变,可以在窗体上按下鼠标,拖动,把多个控件一起选定,然后对它们的共同属性进行修改。
别看这个东西小,还费了近我两个小时呢,不觉大叹手生,里面也有些地方很绕弯子,我尽量解释清楚。
在编写程序之前,我们先来回顾一下计算器的使用。
1.按下数字键在液晶屏上会出现数字,这是最基本的功能。
2.第一次按下运算键,再按下数字键,将重新输入第二个数字,再次按下运算键,将算出前两个数的结果,然后按下数字键,将又重新输入新的数字。
3.输入数字后,按下“等于键”将仍输出原来的数字,输入运算符和第二个数字后在按下“等于”,将得到二者的结果。
然后又重复第二、三步。
4.按下“清除”,数据被全部清除。
了解了这些,我们一步一步实现。
先实现数据的输入,请看代码。
与未创立组的控件相比,它的事件里多了Index参数,组里所有的对象都使用同一个事件。
先在General里声明窗体级全局变量:
DimNum1,Num2AsSingle
DimStrNum1,StrNum2AsString
DimFirstNumAsBoolean'判断是否是数字开头
因为Text1里是存放字符串的,所以要把输入的数据进行运算,必须把字符型变量转变为实型变量,分别用Num1、Num2和StrNum1、StrNum2进行存放。
在Form_Load事件里给变量初赋值:
Num1=0
Num2=0
StrNum1=""
StrNum2=""
FirstNum=True
因为17个按钮使用的是同一事件,所以我们用一个SelectCase语句区分各个按钮,双击任意按钮输入代码:
PrivateSubCommand1_Click(IndexAsInteger)
SelectCaseIndex
Case0To9
IfFirstNumThen
StrNum1=Str(Index)’实型转字符型
FirstNum=False’初赋值为假
Else’非初赋值
StrNum1=StrNum1+Str(Index)
EndIf
Text1.Text=StrNum1’显示
<还有其他语句,等待插入>
EndSelect
EndSub
运行程序的话已经可以输入数据,下面我们来处理小数点。
在General里声明新的变量:
DimPointFlagAsBoolean'判断是否已有小数点
我们知道小数点只能输入一次,一个数据中不能有多个小数点存在,所以需要一个布尔变量做判断。
在Form_Load里进行初赋值:
PointFlag=False
在Command的单击事件里接着上面输入新的代码:
Case10
IfNotPointFlagThen’如果没有小数点
IfFirstNumThen’如果是第一个字符
StrNum1="0."
FirstNum=False
Else
StrNum1=StrNum1+"."
EndIf
Else’已有小数点
ExitSub’则退出单击事件
EndIf
PointFlag=True
Text1.Text=StrNum1
下面会复杂一些,我们先跳过等号,而来处理四则运算:
先在General里声明新变量:
DimRunsignAsInteger'储存运算符号
DimSignFlagAsBoolean'判断是否已有运算符号
然后在Form_Load中进行初赋值:
Runsign=0
SignFlag=False
在接下的Command1_Click中继续输入代码:
Case12To15
FirstNum=True’使下一次可以输入新数据
PointFlag=False
'还原标记值
IfSignFlagThen’前面已有运算符未运算
CallRun
Else
SignFlag=True
StrNum2=StrNum1’把字符串1复制给字符串2
StrNum1=""’字符串1清空
EndIf
Runsign=Index-11‘储存键入的运算符
里面运算的部分我用了一个过程,是因为在按下等号时还会调用到运算过程,这样可以减少代码的输入,也使程序便于浏览。
建立过程(Procedure),可以在General部分直接输入,也可以通过菜单里的“AddProcedure”添加。
Run的代码如下:
SubRun()
Num1=Val(StrNum2)
Num2=Val(StrNum1)
SelectCaseRunsign
Case1’加
equal=Num1+Num2
Case2’减
equal=Num1-Num2
Case3’乘
equal=Num1*Num2
Case4’除
equal=Num1/Num2
EndSelect
StrNum2=Str(equal)
StrNum1=StrNum2
Text1.Text=StrNum2
EndSub
下面是其余的代码:
(在Command1_Click事件里,接着写)
Case11
IfNotSignFlagThen
Text1.Text=StrNum1
equal=Val(StrNum1)
FirstNum=True
PointFlag=False
Else
CallRun
SignFlag=False
EndIf
CaseElse’清除按钮
CallClearData
里面又用到了一个ClearData过程,实际上就是Form_Load里的变量初赋值,代码如下:
SubClearData()
Num1=0
Num2=0
StrNum1=""
StrNum2=""
FirstNum=True
PointFlag=False
Runsign=0
SignFlag=False
Text1.Text="0."
EndSub
这样完整的程序就完成了,本章介绍了VB的第一个控件――按钮,并且举例,希望你继续看下一章――菜单。
下面给出完整的程序代码:
DimNum1,Num2AsSingle
DimStrNum1,StrNum2AsString
DimFirstNumAsBoolean'判断是否是数字开头
DimPointFlagAsBoolean'判断是否已有小数点
DimRunsignAsInteger'储存运算符号
DimSignFlagAsBoolean'判断是否已有运算符号
SubClearData()
Num1=0
Num2=0
StrNum1=""
StrNum2=""
FirstNum=True
PointFlag=False
Runsign=0
SignFlag=False
Text1.Text="0."
EndSub
SubRun()
Num1=Val(StrNum2)
Num2=Val(StrNum1)
SelectCaseRunsign
Case1
equal=Num1+Num2
Case2
equal=Num1-Num2
Case3
equal=Num1*Num2
Case4
equal=Num1/Num2
EndSelect
StrNum2=Str(equal)
StrNum1=StrNum2
Text1.Text=StrNum2
EndSub
PrivateSubabout_Click()
MsgBox"Createby周晓阳。
1998/7/27",vbDefaultButton1,"VB教程第四章范例"
EndSub
PrivateSubCommand1_Click(IndexAsInteger)
SelectCaseIndex
Case0To9
IfFirstNumThen
StrNum1=Str(Index)
FirstNum=False
Else
StrNum1=StrNum1+Str(Index)
EndIf
Text1.Text=StrNum1
Case10
IfNotPointFlagThen
IfFirstNumThen
StrNum1="0."
FirstNum=False
Else
StrNum1=StrNum1+"."
EndIf
Else
ExitSub
EndIf
PointFlag=True
Text1.Text=StrNum1
Case12To15
FirstNum=True
PointFlag=False
'还原标记值
IfSignFlagThen
CallRun
Else
SignFlag=True
StrNum2=StrNum1
StrNum1=""
EndIf
Runsign=Index-11
Case11
IfNotSignFlagThen
Text1.Text=StrNum1
equal=Val(StrNum1)
FirstNum=True
PointFlag=False
Else
CallRun
SignFlag=False
EndIf
CaseElse
CallClearData
EndSelect
EndSub
PrivateSubForm_Load()
CallClearData
EndSub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 按钮