您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > vb配套电子教案--VB11
本章主要内容:●类的创建●在程序中访问类第11章面向对象的编程11.1类的创建无论是简单的类还是复杂的类,其创建步骤基本一致,一般分为4个步骤:插入一个类模块、定义类的属性、添加类的方法、响应缺省事件和创建自定义事件。下面以一个工资卡(SalaryCar)为例,说明类的创建过程。设工资卡由银行于每月的15日将工资向卡内入账,持卡的职工随时可以通过自动取款机,在正确回答了密码后从卡中取款。根据工资卡的特点,新建类应有的属性为:账号(No)、密码(PassWord)、余额(Balance)、入账日期(AddDate)。新建类应具有的方法为:取款(Draw)、入账(Add)。用户定义事件有:一旦超过了入账日期,就要发出入账日期到的事件(DateUp)。11.1.1插入一个类模块插入一个类模块的步骤为:①创建一个标准EXE工程,执行“工程”菜单中的添加“类模块”命令,选择“新建”选项卡中的“类模块”。②单击“打开”按钮,如图11-1所示,即可在当前工程中插入一个类模块。在工程管理器中可以看到该类模块,如图11-2所示。其缺省名称为“Class1”,用户可以根据需要在属性窗口中进行更改。当保存工程时类模块的信息将保存在后缀为.cls的文件中。11.1.2定义类的属性1.使用公共变量创建属性最简单的方法就是使用公共变量,只要在类模块的声明段声明它们即可,其语法格式如下:Public〈属性名〉As〈类型〉例如:PublicNoAsString设置类的账号属性为字符型。2.使用属性过程在类中建立属性最安全、最灵活的方法是使用属性过程。属性过程具有封装功能,一般在应用于下列场合时应当使用属性过程:l属性为只读或一旦设置就不能更改的情况。l属性已设置的值需要合法性验证。l属性的设置可导致一些对象状态的改变或改变其他属性及内部变量值。尤其属性过程提供了建立只读属性的功能,这在使用公共变量时是不可能的。系统提供的3种可用的属性过程,见表11-1。表11-1可用的属性过程过程名说明PropertyGet返回属性的值,当用户读取属性值时执行PropertyLet设置属性的值,当用户写入属性值时执行PropertySet设置对象属性的值,这是PropertyLet的一个特例,当变量的类型为对象时使用建立属性过程可以执行“工具”菜单下的“添加过程”命令,选择“属性”,填入“名称”(这个名称将成为对象的属性名),本例填入了“DateAdd”表示入账日期,单击“确定”按钮完成添加操作,如图11-3所示。此时在类模块的代码窗口中将自动出现图11-4所示的属性代码框架。属性过程一般都是成对出现(具有相同属性名的PropertyGet过程和PropertyLet过程),表示该属性可读可写。如果只有PropertyGet过程,则表示该属性为只读属性,也就是说应用程序不能直接修改该属性的值,若要更改必须通过类方法编程来实现。缺省情况下,VB认为所有的属性及参数均为Variant类型,可以在代码窗口中进行修改,也可以不使用添加过程对话框而直接在代码窗口中输入。在本例中,属性PassWord和Balance为只读属性,持卡人不能直接更改,属性DateAdd可读可写,程序代码如下:PrivatemPassWordAsStringPrivateaddPassWordPrivatemDateAddAsDatePrivatemBalanceAsCurrencyPublicPropertyGetDateAdd()AsDateDateAdd=mDateAddEndPropertyPublicPropertyLetDateAdd(ByValNewDateAsDate)'规定每月15日为入账日期,同时要比较前次入账的日期关系,以避免同日重复入账IfNewDatemDateAddAndDay(NewDate)=15ThenmDateAdd=NewDateEndIfEndPropertyPublicPropertyGetBalance()AsCurrencyBalance=mBalanceEndPropertyPublicPropertyGetPassWord()AsStringPassWord=mPassWordEndProperty11.1.3添加类的方法类的方法定义了由类创建的全部对象的行为,每个对象可以随后执行这些行为。例如,PictureBox控件有Move方法,所以在窗体上的图片框可以调用该方法将对象移动到其他位置。对用户来说,完全不必关心Move方法的编程是怎么实现的,只要按照该方法规定的语法格式直接调用接口来使用,这就是被封装了的方法。用户需要为自定义类创建方法时,需要在类模块中添加公共过程。若该方法没有返回值则可以使用PublicSub子过程,否则就应当使用PublicFunction函数过程。在类模块内添加的PrivateSub或PrivateFunction过程,只能在模块内部调用,对类模块的使用者来说是不可见的。在下例中为Class1添加了取款(Draw)和入账(Add)两个方法。在Draw方法中,通过持卡人输入密码和取款额为参数,并且在取款时要对密码和取款额进行合法性检查。对Add方法按规定每月15日向持卡人加入新的款项,需要对当前日期进行合法性检验。在Add方法中验证银行工作人员输入入账密码,并控制当月工资额不能为0。符合条件时,添加存款余额并记录本次入账日期。有关过程如下:PublicSubDraw(ByValNewPassWordAsString,ByValDrawMoneyAsCurrency)IfNewPassWordmPassWordThenMsgBox密码错误,48,警告ExitSubEndIfIfDrawMoneymBalanceThenMsgBox本银行不允许透支,48,警告ExitSubEndIfmBalance=mBalance-DrawMoneyEndSubPublicSubAdd(ByValAddMoneyAsCurrency,ByValNewDateAsDate,ByValaPassWordAsString)'AddMoney用来返回工作人员输入的当月工资额,NewDate返回本次入账日期'aPassWord返回工作人员输入的入账密码IfaPassWordaddPassWordThenMsgBox密码错误,请重新输入,48,警告ExitSubEndIfIfAddMoney=0ThenMsgBox没有输入当月工资额,48,警告ExitSubEndIfIfDay(NewDate)=15AndNewDatemDateAddThen'验证入账日期的合法性mBalance=mBalance+AddMoneymDateAdd=NewDateElseMsgBox本月工资已入账,不得重复操作,48,警告EndIfEndSub当取款人输入的密码不正确或取款额超过了余额,均会产生一个错误。可以使用Err对象的Raise方法将错误传递回调用程序,这将生成一个可以被调用程序捕获的出错信息。这里为了方便使用了弹出信息框(MsgBox)的处理方法。11.1.4响应缺省事件和自定义事件1.响应缺省事件由系统创建的类模块缺省事件有两个:Initialize(初始化)和Terminate(结束)。前者在对象建立时被激发,领先于其他任何设置属性或执行方法的动作,后者则是在对象结束时激发。通常Initialize事件被应用于类属性的初始化,Terminate事件则往往用来处理类模块的结尾工作。可以在类模块代码窗口的左边对象列表中选择“Class”,在右边事件列表中选择对应的事件,选择后系统会自动创建该事件的代码框架。在本例中利用Initialize事件过程对密码、存款余额和入账日期进行初始化,代码如下:PublicSubClass_Initialize()mBalance=1000'设置存款余额aPassWord=123456'设置入账操作密码,由银行工作人员掌握mPassWord=abcdef'设置用户密码mDateAdd=#5/24/2005#'设置上次执行入账操作的日期EndSub当由类产生一个对象时,此对象首先要自动执行Initialize事件,使得持卡人的工资卡上对应属性得到赋值。2.自定义事件事件与属性、方法最大的区别在于属性和方法对应的代码是类模块的设计者预先设计好的,类模块的使用者调用什么方法,系统就自动调用相应的代码。而对于事件,类模块的设计者只能决定何时激发事件,对于事件本身应该执行一些什么操作,是有类模块的使用者来决定的。例如对于文本框控件TextBox来说,它的SetFocus方法是预先设计好的,而它的KeyPress事件是有TextBox的使用者自行处理的,使用者决定当该事件触发时执行什么操作。可以看出,对象的属性和方法的具体实现步骤均被封装在对象的内部,只有事件可以被发送到对象的外部。对象可以产生不同的事件,应用程序根据不同的事件做出不同的响应。在类模块中添加事件需要完成以下两项工作:l在类模块的声明段使用Event语句声明类中的公共事件。l在类模块代码的适当位置使用RaiseEvent语句激发该事件。在本例中,每月15日向工资卡中添加工资款到余额中,若超过日期一定天数(10天)尚未入账,则产生一个DateUp事件,通知银行执行入账操作,注意代码中有下划线的部分。程序代码如下:'在声明段声明事件过程PublicEventDateUp()'修改Draw(取款)方法,添加下面代码中加有下划线的部分PublicSubDraw(ByValNewPassWordAsString,ByValDrawMoneyAsCurrency)IfDate-mDateAdd10ThenRaiseEventDateUpIfNewPassWordmPassWordThenMsgBox密码错误,48,警告ExitSubEndIfIfDrawMoneymBalanceThenMsgBox本银行不允许透支,48,警告ExitSubEndIfmBalance=mBalance-DrawMoneyEndSub11.2在程序中访问类要使用一个类的新对象时,需要完成以下工作:l向工程中添加类模块l声明对象变量l创建对象l使用对象的属性、方法和响应对象的事件过程l释放对对象的引用下面以使用前面设计好的Class1类为例,创建一个工资卡管理应用程序。由于类没有可视化的界面,所以程序员必须在窗体上建立有关控件来建立程序界面。工资卡管理程序具有如下的功能:l对持卡人通过输入密码、取款额调用Draw(取款)方法。l对银行可在规定的日期(每月的15日)调用Add(入账)方法向卡中添加当月工资额,并同时对入账日期进行设置。l若超过10天还未入账,触发DateUp(过期)事件,自动执行入账操作。在利用类创建对象前首先应当创建一个标准EXE工程,而后执行“工程”菜单中的“添加类模块”命令,在“现存”选项卡中选择希望插入的类模块文件(如本例的“类使用示例.cls”)后,单击“打开”按钮,如图11-5所示。插入的类模块在工程管理器中可以看到,并可以使用右键快捷菜单对其进行相应的操作。在编写程序代码之前还应根据需要向窗体上添加必要的控件,设计出应用程序的界面。本例应用程序界面及相关属性设置如图11-6所示。11.2.1声明对象变量在窗体上添加必要的控件,创建了应用程序界面后,应在声明段声明一个对象变量,语法格式如下:Dim〈对象变量名〉As〈类名〉对应本例该语句为:DimmyClassAsClss1该语句声明了一个指向类Class1的对象变量名,在VB中称为引用(Reference)。对象变量中存放的是对象的地址,但在此声明语句中,它没有指向任何对象,也就是说此时没有任何对象被创建所以其值为“Nothing”。要判断一个对象变量是否指向了某一对象可以使用TypeName函数,其语法格式如下:TypeName(〈对象变量名〉)如果对象变量没有指向任何对象,则函数返回“Nothin
本文标题:vb配套电子教案--VB11
链接地址:https://www.777doc.com/doc-3824324 .html