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

前端之家收集整理的这篇文章主要介绍了【Visual Basic】纯代码不拖控件,利用动态生成控件的方式完成一个简单的四则运算计算器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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则自动为你生成注册这些控件。如果控件少的情况下,这种生成方式,显然不够拖控件的方式快,但是,如果控件多,要配合循环生成,这是一种解决方案。

猜你在找的VB相关文章