实例2-4 枚举类型实例
该实例实现步骤如下。
1 创建窗体
在本章的项目chapter2中,用鼠标右键单击解决方案资源管理器中项目名下面对应节的文件夹“数据类型”,在弹出的快捷菜单中选择“添加”→“Windows窗体”菜单命令,在弹出的对话框中输入窗体名EnFrm,单击“添加”按钮,完成窗体的创建。
2 添加控件
在窗体上添加一个listbox控件,用来改变背景颜色。
添加一个textbox控件到Form窗体上,用于接收用户输入,将listbox背景改成指定的颜色。
添加一个Label控件用于说明。
3 添加代码
在窗体类中添加代码2-6中的代码。
代码中将7个颜色变量定义为枚举类型,并定义一个方法来判断其中的值以便修改listbox控件的背景颜色。
代码2-6 EnFrm.vb
01 Public Class EnFrm 02 Public Enum color '定义枚举类型 03 red 04 orange 05 yellow 06 green 07 blue 08 indigo 09 purple 10 End Enum 11 Private Function backcolor(ByVal c As color) 12 Select Case c 13 Case color.red '红色 14 Me.ListBox1.BackColor = Drawing.Color.Red 15 Case color.orange '橙色 16 Me.ListBox1.BackColor = Drawing.Color.Orange 17 Case color.yellow '黄色 18 Me.ListBox1.BackColor = Drawing.Color.Yellow 19 Case color.green '绿色 20 Me.ListBox1.BackColor = Drawing.Color.Green 21 Case color.blue '蓝色 22 Me.ListBox1.BackColor = Drawing.Color.Blue 23 Case color.indigo '靛 24 Me.ListBox1.BackColor = Drawing.Color.Indigo 25 Case color.purple '紫色 26 Me.ListBox1.BackColor = Drawing.Color.Purple 27 End Select 28 End Function 29 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged 30 Select Case Me.TextBox1.Text 31 Case Is = "红色" 32 backcolor(color.red) 33 Case Is = "橙色" 34 backcolor(color.orange) 35 Case Is = "黄色" 36 backcolor(color.yellow) 37 Case Is = "绿色" 38 backcolor(color.green) 39 Case Is = "蓝色" 40 backcolor(color.blue) 41 Case Is = "靛" 42 backcolor(color.indigo) 43 Case Is = "紫色"
44 backcolor(color.purple) 45 End Select 46 End Sub 47 End Class
代码2-6的执行步骤如下:
① 第2行到第10行代码定义一个枚举类型color,包含7个颜色变量;
② 第11行到第28行代码定义了一个backcolor()方法,用于判断方法参数,根据参数的不同,使listbox控件显示不同的背景颜色;
③ 第30行到第45行代码是判断用户输入的颜色,调用并指定backcolor ()方法的参数,显示相应的背景色。
4 运行结果
按F5键,运行该程序,结果如图2-9所示。
图2-9 实例2-4运行结果
2.1.5 结构类型
结构与类相似,但有差异。首先,类为引用类型,而结构为值类型;其次,结构使用Structure关键字来创建。
Structure语句只能在模块、命名空间或文件级出现。这就是说可以在源文件或模块、接口或类内部声明结构,但不能在过程内部进行声明。也可以在一个结构中定义另一个结构,但不能通过外部结构访问内部结构的成员,而必须声明一个内部结构的数据类型变量。
如果Option Strict值是On,则在每一个成员声明中还必须包含As子句。用Dim声明的成员默认为Public访问,未用As子句声明的成员默认为Object数据类型。
结构成员的作用范围是整个结构。
不能将结构的任何数据成员的值初始化,而必须通过结构上参数化的构造函数初始化数据成员,或者在创建了该结构的实例后将值赋给实例的成员。
结构支持的许多功能与类支持的一样。如结构可以拥有属性和方法,可以实现接口,也可以拥有参数化的构造函数。但是,在某些地方(如继承、声明和用法)结构和类之间存在着差异。
1.结构类型的声明
VB.NET中使用Structure语句作为结构声明的开始,并使用End Structure语句作为结构声明的结束。在这两条语句之间必须至少声明一个成员,还可以在结构中定义Function过程、属性和事件,如代码2-7所示的语句,在结构addstruct中,定义了三个整型变量a,b,c,还定义了一个Sub过程add,用来计算a加b的值并赋给c,再显示c的值。
代码2-7结构类型
Structure addstruct Dim a As Integer Dim b As Integer Dim c As Integer Sub add(ByVal a, ByVal b) c = a + b MessageBox.Show(c) End Sub End Structure
2.结构类型的使用
结构类型的使用和类一样,先声明一个变量为结构类型,然后再用New关键字实例化,或者直接声明并实例化。
使用结构中的成员,格式如下:
结构变量.结构字段或方法
如代码2-8所示语句在一个按钮的单击事件中使用代码2-7中的结构addstruct,并调用该结构中的方法add。
代码2-8使用结构
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a As addstruct a = New addstruct a.add(10, 30) End Sub
3.结构类型举例
下面以实例说明结构类型的使用。