《vb编程技术用户定义与枚举类型》由会员分享,可在线阅读,更多相关《vb编程技术用户定义与枚举类型(56页珍藏版)》请在金锄头文库上搜索。
1、第第9 9章章 用户定义与枚举类型用户定义与枚举类型 第第9章章 用户定义与枚举类型用户定义与枚举类型 9.1 用户定义类型用户定义类型 9.2 枚举类型枚举类型 9.3 滚动条控件滚动条控件 习题九习题九 第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.1 用户定义类型用户定义类型 9.1.1用户定义数据类型的概念在VB中,可以用系统提供的标准类型定义变量,它们都是计算机处理的基本数据项。但在实际工作中,常见的并不是孤立的数据项,而是由两个或两个以上的基本项组成的组合项。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 表9-1学生成绩表第第9 9章章 用户定义与枚举类型用户定
2、义与枚举类型 9.1.2创建用户定义类型记录与数组一样由多个数据项目组成,但是,记录与数组最大的不同就是数组中的每一元素必须具有相同的数据类型,而记录中的每一个数据项目却可以具有不同的数据类型。在VB中提供了定义记录结构的语句,称这种语句为用户定义数据类型(userdefineddatatype)。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 用户可以用Type语句来定义自己的数据类型,其格式为Public|PrivateType用户类型名字段名1As类型名1字段名2As类型名2字段名nAs类型名nEndType第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.1.3建立和使用
3、用户定义类型变量1.建立用户定义类型变量用户数据类型定义后,可以用Dim、Redim、Static建立一个具有这种数据类型的变量。例如定义一个具有studentrec类型的变量stu:DimstuASstudentrec用户定义数据类型也可以作为数组元素的数据类型。例如,定义一个拥有20个记录元素的数组student:Dimstudent(1To20)Asstudentrec第第9 9章章 用户定义与枚举类型用户定义与枚举类型 2.使用用户定义类型变量如果要存取用户数据类型变量中的某个字段的数据,其格式如下:用户数据类型变量名.字段名第第9 9章章 用户定义与枚举类型用户定义与枚举类型 【例9
4、-1】把数据值分别赋给stu变量中的各个字段。设计步骤如下:(1)建立应用程序用户界面并设置对象属性,如图9.1所示。(2)在窗体模块的通用段创建用户定义类型:第第9 9章章 用户定义与枚举类型用户定义与枚举类型 PrivateTypestudentrecstunumAsString*7学号元素为7个字符的定长字符串namesAsString*8 姓名元素为8个字符的定长字符串creditAsInteger学分元素为整型avgAsSingle平均成绩为单精度型EndType第第9 9章章 用户定义与枚举类型用户定义与枚举类型 编写命令按钮的Click事件代码为PrivateSubCommand
5、1_Click()DimstuAsstudentrec定义一个具有studentrec类型的变量stustu.stunum=2000108stu.names=欧阳美丽第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.1程序运行结果第第9 9章章 用户定义与枚举类型用户定义与枚举类型 stu.credit=70stu.avg=88.5Text1.Text=stu.stunumText2.Text=stu.namesText3.Text=stu.creditText4.Text=stu.avgEndSub程序运行结果如图9.1所示。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9
6、.1.4用户定义类型数组如果一个数组中元素的数据类型是用户定义类型,则称其为用户定义类型数组或记录数组(Array ofrecords)。存取记录数组元素中某个字段数据的语法为记录数组元素.字段名第第9 9章章 用户定义与枚举类型用户定义与枚举类型 【例9-2】假设某班有40位学生,每位学生一个记录,定义一个包含40个元素的用户定义数组,并给第10位学生赋值。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 首先在窗体模块的通用段创建用户定义类型:PrivateTypestudentrecstunumAsString*7namesAsString*8creditAsIntegeravgAs
7、SingleEndType第第9 9章章 用户定义与枚举类型用户定义与枚举类型 编写命令按钮的Click事件代码为PrivateSubCommand1_Click()Dimstudent(1To40)Asstudentrec定义记录数组student(10).stunum=2000010student(10).names=孙小京student(10).credit=55student(10).avg=78.5Text1.Text=student(10).stunum第第9 9章章 用户定义与枚举类型用户定义与枚举类型 Text2.Text=student(10).namesText3.Text
8、=student(10).creditText4.Text=student(10).avgEndSub程序运行结果如图9.2所示。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.2用户定义类型数组示例第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.1.5程序举例【例9-3】输入学生的姓名、学号、语文分数、英语分数、数学分数,计算每名学生的平均成绩,并显示各科成绩。设计方法如下:(1)选择新建工程,进入窗体设计器。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.3建立用户界面和设计对象第第9 9章章 用户定义与枚举类型用户定义与枚举类型 (2)编写代码。首先在窗
9、体的通用段创建用户定义类型并声明变量:PrivateTypestudentrecnaAsString*6姓名变量定义为6个字符长度noAsString*5学号变量定义为5个字符长度chAsSingle语文变量定义为单精度数enAsSingle英语变量定义为单精度数maAsSingle数学变量定义为单精度数agAsSingle平均成绩定义为单精度数第第9 9章章 用户定义与枚举类型用户定义与枚举类型 EndTypeDimstu()Asstudentrec定义记录数组窗体的Load事件代码为PrivateSubForm_Load()ReDimstu(0)EndSub“输入”按钮Command1的C
10、lick事件代码为PrivateSubCommand1_Click()n=UBound(stu)ReDimstu(n+1)第第9 9章章 用户定义与枚举类型用户定义与枚举类型 Withstu(n+1).no=Text1(0).Text.na=Text1(1).Text.ch=Val(Text1(2).Text).en=Val(Text1(3).Text).ma=Val(Text1(4).Text).ag=Int(.ch+.en+.ma)/3)求个人平均成绩cc=Format(.ch,)&Format(.en,)&_第第9 9章章 用户定义与枚举类型用户定义与枚举类型 Format(.ma,)&
11、Format(Str(.ag),)List1.AddItemFormat(RTrim(.no),)&Format(RTrim(.na),)&ccEndWithText1(0).SetFocusEndSub“删除”按钮Command2的Click事件代码为PrivateSubCommand2_Click()IfList1.ListIndex=-1Then第第9 9章章 用户定义与枚举类型用户定义与枚举类型 MsgBox请选定欲删除的项!ExitSubEndIfn=List1.ListIndex+1Fori=nToUBound(stu)-1stu(i)=stu(i+1)NextList1.Remo
12、veItemn-1移除项目Text1(0).Text=stu(1).noText1(1).Text=stu(1).na第第9 9章章 用户定义与枚举类型用户定义与枚举类型 Text1(2).Text=stu(1).chText1(3).Text=stu(1).enText1(4).Text=stu(1).maEndSub“结束”按钮Command3的Click事件代码为PrivateSubCommand3_Click()UnloadMeEndSub列表框List1的Click事件代码为PrivateSubList1_Click()n=List1.ListIndex+1第第9 9章章 用户定义与
13、枚举类型用户定义与枚举类型 Text1(0).Text=stu(n).noText1(1).Text=stu(n).naText1(2).Text=stu(n).chText1(3).Text=stu(n).enText1(4).Text=stu(n).maEndSub另外编写文本框组的事件代码,使之方便输入PrivateSubText1_GotFocus(IndexAsInteger)Text1(Index).SelStart=0第第9 9章章 用户定义与枚举类型用户定义与枚举类型 Text1(Index).SelLength=Len(Text1(Index).Text)EndSubPriv
14、ate Sub Text1_KeyPress(Index As Integer, KeyAscii AsInteger)IfKeyAscii=13Theni=IIf(Index=4,0,Index+1)Text1(i).SetFocusEndIfEndSub程序运行结果如图9.4所示。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.4输入学生情况,计算平均分并显示各科成绩第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.2 枚枚 举举 类类 型型 9.2.1枚举类型的概念前面已经介绍了VB的基本数据类型,包括整型数、单精度数、浮点数等。在程序设计中,有些数据无法直接用整型或
15、实型数来表示,必须经过某种转换,把本来不是简单地用整数来表示的问题用几个整数去描述,从而降低了程序的可读性。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.2.2定义枚举类型枚举类型放在窗体模块、标准模块或共用模块中的声明部分,通过Enum语句来定义。定义枚举类型的语法为Public|PrivateEnum类型名称成员名=常数表达式成员名=常数表达式EndEnum第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.5建立用户界面和设置对象属性第第9 9章章 用户定义与枚举类型用户定义与枚举类型 【例9-4】利用枚举类型编写程序,要求输入一个数字表示星期,判断输出是否为工作日。
16、设计步骤如下:(1)建立应用程序用户界面并设置对象属性,如图9.5所示。(2)编写事件代码。用“文件”菜单中的“新建工程”命令建立一个新工程,然后执行“工程”菜单中的“添加模块”命令,在代码窗口中输入下面的枚举类型定义:第第9 9章章 用户定义与枚举类型用户定义与枚举类型 PublicEnumWorkdaysSunday值为0Monday值为1Tuesday值为2Wednesday值为3Thursday值为4Friday值为5Saturday值为6Invalid=-1EndEnum第第9 9章章 用户定义与枚举类型用户定义与枚举类型 编写“判断”命令按钮Command1的Click事件过程为P
17、rivateSubCommand1_Click()DimMydayAsWorkdays 定义Myday为枚举类型WorkdaysText1.SetFocusMyday=Val(Text1.Text)IfMyday=0OrMyday=6Then 星期日或星期六MsgBox休息吧!,0,非工作日!第第9 9章章 用户定义与枚举类型用户定义与枚举类型 ElseMsgBox请咬紧牙关,努力工作!,0,工作日!EndIfEndSub第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.6测试工作日第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.7VB自动显示Workdays枚举的常数第
18、第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.3 滚滚 动动 条条 控控 件件滚动条(ScrollBar)通常用来附在窗体上协助观察数据或确定位置,也可用来作为数据输入的工具。无论何时,只要应用程序或控件所包含的信息超过当前窗口(或者在ScrollBars属性被设置成True时的文本框和MDI窗体)所能显示的信息,滚动条就会自动出现。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 滚动条有水平和垂直两种,可以通过水平滚动条(HScrollBars)和垂直滚动条(VScrollBars)工具来建立,如图9.8所示。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.8水平
19、滚动条和垂直滚动条第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.3.1滚动条的属性1.Min、Max属性返回或设置滚动条所能代表的最小、最大值,其取值范围为-3276832767。Min属性的默认值为0,Max属性的默认值为32767。2.Value属性返回或设置滚动条的当前位置,其返回值始终介于Max和Min属性值之间,包括这两个值。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 3.LargeChange属性返回和设置当用户单击滚动框和滚动箭头之间的区域时,滚动条控件Value属性值的改变量。4.SmallChange属性返回和设置当用户单击滚动箭头时,滚动条控件Valu
20、e属性值的改变量。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.3.2滚动条的事件滚动条可以识别多种事件,但最重要的是Change和Scroll事件。在程序运行过程中,每当滚动条的Value属性发生变化时,就发生Change事件。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.3.3滚动条的应用【例9-5】水平滚动条应用示例。建立一个水平滚动条,其Max属性为100,Min属性为0,SmallChange属性为2,LargeChange属性为10。另有一个文本框,它显示滑块当前位置所代表的值,如图9.9所示。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.9水
21、平滚动条应用示例第第9 9章章 用户定义与枚举类型用户定义与枚举类型 【例9-6】利用滚动条控制色彩,还可以返回色彩的RGB值。(1)建立应用程序用户界面并设置对象属性。选择“新建”工程,进入窗体设计器。首先增加一个框架Frame1,激活Frame1后,在其中增加一个图片框Picture1,一个文本框Text1,一个水平滚动条控件数组HScroll1(0)HScroll1(2)和一个标签控件数组Label1(0)Label1(2),并设置其属性如表9-2所示。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 表9-2属性设置第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.10建
22、立用户界面第第9 9章章 用户定义与枚举类型用户定义与枚举类型 (2)编写事件代码。水平滚动条HScroll1的事件代码为PrivateSubHScroll1_Change(IndexAsInteger)Picture1.BackColor=RGB(HScroll1(0),HScroll1(1),HScroll1(2)r=LTrim(Str(HScroll1(0)g=LTrim(Str(HScroll1(1)b=LTrim(Str(HScroll1(2)Text1.Text=Color=RGB(&r&,&g&,&b&)EndSub第第9 9章章 用户定义与枚举类型用户定义与枚举类型 文本框Te
23、xt1的GotFocus事件代码为PrivateSubText1_GotFocus()Text1.SelStart=10EndSub文本框Text1的KeyPress事件代码为PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Thena=InStr(10,Text1.Text,)b=InStr(a+1,Text1.Text,)c=InStr(b+1,Text1.Text,)第第9 9章章 用户定义与枚举类型用户定义与枚举类型 HScroll1(0)=Val(Mid(Text1.Text,11,a-10)HScroll1(1)=Val
24、(Mid(Text1.Text,a+1,b-a)HScroll1(2)=Val(Mid(Text1.Text,b+1,c-b-1)EndIfEndSub第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.11程序运行结果第第9 9章章 用户定义与枚举类型用户定义与枚举类型 习习 题题 九九9.1为例9-3增加计算全班平均成绩的功能。9.2为例9-3增加按某科成绩排序的功能。9.3为例9-3增加按姓名查找的功能。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 9.4设计一个通过滚动条调整颜色的程序。程序启动后的界面如图9.12所示,当用户单击3个滚动条两端的箭头按钮、直接拖动滚动条上的滑块或单击滚动条的滑杆时,可以调整RGB函数中对应的颜色值,从而使“颜色区”中显示出不同的颜色。第第9 9章章 用户定义与枚举类型用户定义与枚举类型 图9.12滚动条的应用