您的位置:首页 > 编程语言 > VB

【Visual Basic】纯代码不拖控件,利用动态生成控件的方式完成一个简单的四则运算计算器

2015-05-26 20:55 267 查看
vb6是一个典型的拖控件加代码的编程代表,因此也一直被认为难登大雅之堂,但是,在vb6中可以完全纯粹地使用代码控制这个窗体与窗体的控件。这样生成出来的控件位置摆放精确无比,无须拖好控件之后,再利用工具栏的“格式”菜单慢慢地调整大小。这种方式的确定是声明一个控件要耗费大量的代码,但其实Java中的Swing,HTML+CSS排放控件,比这好不了多少。

当然,比vc6中mfc的代码简单了不少,具体见《【mfc】基本对话框程序——加法器》(点击打开链接

一、基本目标

利用纯粹代码,不拖控件的方式,完成如下的一个简单的四则运算器:



如果用户输入的两个项都是数,并且选择好相应的运算,点击等于按钮,则显示结果。否则,弹出告警框。

二、基本布局



如上图,此乃一个宽750px高100px的窗体。里面有两个输入文本框,一个下拉菜单,一个等于号,一个标签文本用来显示运算结果。

组件与组件之间有10px的留白。

其中两个输入文本框与下拉菜单,显示结构的标签文本的宽度分别为150px.

vb的标题栏为40px,在高100px的窗体里面,上下留白10px之后,每一个组件的高度为40px,除了已经给vb6设定为只读的下拉菜单,不能调整高度。

另外,等于按钮的高度与宽度皆为40px

三、***过程

有了上面的设定之后,就开始利用纯粹的代码***这个小程序。

1、首先,由于vb6设定了最大化按钮是不可以用代码去修改的。因此只能一开始在Form1的属性栏的MaxButton属性设置为False,禁用最大化按钮。则按F7唤出代码窗口。



2、一开始,在开头先声明一下自己需要动态生成的组件。这些声明不要写在Form_Load()函数之后。

让所有动态生成的控件作为全局变量,以致于这个组件可以被调用。

由于这些组件并不是拖出来的。vb6根本就不会为你在系统内注册这些组件。

其中输入文本框Text1,Text2,下拉菜单Combo1,标签文本Label1皆没有事件,只是其它事件需要获取其属性,因此普通声明即可。

而Command1由于是有点击事件的,因此必须这样声明,Command1才拥有CommandButton控件的所有事件过程。

Dim Text1 As TextBox
Dim Combo1 As ComboBox
Dim Text2 As TextBox
Dim WithEvents Command1 As CommandButton
Dim Label1 As Label
3、之后是Form1的初始化函数,这个函数其实就是一直在声明各个组件与各个组件该有的属性,核心就一句Set xx=Controls.Add,把某某组件加入到Form1里面。值得注意的是vb6代码与代码之间的分割是一个回车,而不是;之类的。

Private Sub Form_Load()
'设置窗体的标题,尺寸为750px x 100px
Form1.Caption = "四则运算"
Form1.Width = 7500
Form1.Height = 1000
'初始化输入框1
Set Text1 = Controls.Add("VB.TextBox", "Text1", Form1)
Text1.Text = ""
Text1.Width = 1500
'vb窗体的标题栏长40px,其整个窗体为100px高,那么上下留白10px,再搞个100px高的控件就对了
Text1.Height = 400
Text1.Top = 100
Text1.Left = 100
'动态创建的控件默认都是不显示的,必须有这行
Text1.Visible = True
'初始化下拉列表
Set Combo1 = Controls.Add("VB.ComboBox", "Combo1", Form1)
Combo1.Width = 1500
'ComboBox的高度是固定,不可以设置,因此这里就不进行设置了
Combo1.Top = 100
Combo1.Left = 1700
Combo1.Visible = True
Combo1.AddItem "+"
Combo1.AddItem "-"
Combo1.AddItem "*"
Combo1.AddItem "/"
Combo1.Text = "+"
'初始化输入框2
Set Text2 = Controls.Add("VB.TextBox", "Text2", Form1)
Text2.Text = ""
Text2.Width = 1500
Text2.Height = 400
Text2.Top = 100
Text2.Left = 3300
Text2.Visible = True
'初始化按钮
Set Command1 = Controls.Add("VB.CommandButton", "Command1", Form1)
Command1.Caption = "="
Command1.Width = 400
Command1.Height = 400
Command1.Top = 100
Command1.Left = 4900
Command1.Visible = True
'初始化结果标签
Set Label1 = Controls.Add("VB.Label", "Label1", Form1)
Label1.Width = 1500
Label1.Height = 400
Label1.Top = 100
Label1.Left = 5400
Label1.Visible = False
'由于一开始没有结果,因此无须显示Label1
End Sub
4、最后是Command1的点击过程。我们还需要写一个vb的过程Command1_Click(),这个过程逻辑很简单,先获取Text1与Text2的控件里面的东西,用IsNumeric()函数判断其是否是数,如果不是,则用MsgBox弹窗给出提示。如果是,则利用Select case的条件结构,给出各项结构。这个条件结构就是C、Java等语言的Switch...case结构,但这里无须加上break;使用val()函数,把组件中的值转换成函数,这里与vbscript的编程也就是asp基本上是一样的。

Private Sub Command1_Click()
'先判断用户输入的是否是数
If (IsNumeric(Text1.Text)) And (IsNumeric(Text2.Text)) Then
'如果是数,则取下拉列表的值,进行运算
Select Case Combo1.Text
Case "+":
Label1.Caption = Val(Text1.Text) + Val(Text2.Text)
Label1.Visible = True
Case "-":
Label1.Caption = Val(Text1.Text) - Val(Text2.Text)
Label1.Visible = True
Case "*":
Label1.Caption = Val(Text1.Text) * Val(Text2.Text)
Label1.Visible = True
Case "/":
Label1.Caption = Val(Text1.Text) / Val(Text2.Text)
Label1.Visible = True
End Select
'如果输入的不是数,则弹出提示
Else
MsgBox "你输入的,任意一个不是数"
End If
End Sub


四、总结
至此,整个vb6利用代码动态生成控件的方式已经说完,这里,阐述了在vb6如果动态生成控件,并为这些动态生成的控件绑定事件的方法。其核心是,注意在开头为这些组件声明全局变量。如果你手工拖控件,vb6则自动为你生成并注册这些控件。如果控件少的情况下,这种生成方式,显然不够拖控件的方式快,但是,如果控件多,要配合循环生成,这是一种解决方案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: