340 likes | 465 Views
ç›®æ ‡ åœ¨è¿™ä¸€è¯¾é‡Œï¼Œä½ å°†å¦ä¹ : 在 Visual Basic .NET ä¸ä¸åŒç±»åž‹çš„过程 过程é‡è½½çš„é‡è¦æ€§ 过程覆盖的é‡è¦æ€§ 实现 MsgBox( ) 函数 实现 CommonDialog ç±». 过程 是一系列的程åºè¯å¥ï¼Œå®ƒé€šè¿‡è°ƒç”¨è¿‡ç¨‹åç§°æ¥æ‰§è¡Œ 。 是模å—化编程的关键 。它简化了维护和调试代ç 的任务。 对于执行å夿€§çš„任务(比如从一个数æ®åº“ã€æ–‡æœ¬æ–‡ä»¶æˆ–者控件ä¸å–得特定的记录的æ“作)是éžå¸¸æœ‰ç”¨çš„。 有三ç§ç±»åž‹ : Sub 过程 Function 过程 Property 过程. Sub 过程 是被 Sub å’Œ End Sub è¯å¥å°è£…的代ç å—。
E N D
目标 在这一课里,你将学习: • 在Visual Basic .NET中不同类型的过程 • 过程重载的重要性 • 过程覆盖的重要性 • 实现MsgBox( ) 函数 • 实现CommonDialog 类
过程 • 是一系列的程序语句,它通过调用过程名称来执行 。 • 是模块化编程的关键 。它简化了维护和调试代码的任务。 • 对于执行反复性的任务(比如从一个数据库、文本文件或者控件中取得特定的记录的操作)是非常有用的。 • 有三种类型: • Sub过程 • Function过程 • Property过程
Sub 过程 • 是被Sub 和End Sub语句封装的代码块。 • 没有返回值,但是它可以携带参数(如常量、变量和表达式),这些参数由调用代码传递。 例子 Public Sub Check_Acct_Status (ByVal CustAcct As Integer, ByVal Amount As Single) ’The statements of the Sub procedure are given here. End Sub
Sub 过程 (续) • 能够在一个模块、类或者结构体中定义 。 • 具有下列访问标识符: • Public • Protected • Friend • Protected Friend • Private
Sub 过程 (续) • 能够携带参数。你可以通过指定参数名称和数据类型来声明过程的参数。 • 能够携带可选参数。可选参数必须声明在参数列表的最后并带有默认值。 • 通过使用Call关键字并为所有不可选的参数提供值来进行调用。你可以通过值传递或者引用传递来将参数传递给一个Sub过程。 • 能够被进一步分类为: • 通用过程 • 事件捕获过程
Sub 过程 (续) • 通用过程 • 是执行一个特定任务的代码块。 • 事件捕获过程 • 是当一个特定事件发生时执行的过程,这些事件包括点击一个控件或者在内存中加载一个窗体。 • 是对象名和发生的事件类型的组合。
Function 过程 • 是被Function 和End Function语句封装的代码块。 • 返回一个值给调用代码。 例子 Public Function Check_Acct_Status (ByVal CustAcct As Integer, ByVal Amount As Single) As Integer ' The statements of the Sub procedure are given here. Return Amount End Function
Function 过程 (续) • 能够定义在一个模块、类或者结构体中。 • 具有下列访问标识符: • Public、 Protected、 Friend、 ProtectedFriend和Private。 • 默认的访问标识符为Public。 • 使用Return语句来返回一个值给调用过程。 • 通过调用一个函数并将函数的返回值赋值给一个变量来得到返回值。 例子 TotalAmount = Calculate_Amount(Total_Salary,months)
Property 过程 • 是用来给属性赋值或者从属性取值的一系列代码语句,这些属性可以声明在模块、类或者结构体中。 • 属性是存储在一个类或者一个结构体的对象中的变量类型。 • 能够帮助你将属性定义为只读、只写或者可读写类型。 • 有两种类型: • Get过程用来从一个属性中取得值。 • Set过程用来为一个属性赋值。
Property 过程(续) • 通常被引用属性的代码隐含地调用,即代码使用属性名并为所有的非可选参数提供值。
向过程传递参数 • 你可以向过程传递参数: • 使用ByVal关键字进行值传递 • 使用ByRef关键字进行引用传递 • Visual Basic .NET中默认的参数传递机制是ByVal。
参数数组 • 将一个值的数组传递给过程的一个参数。 • 通过使用ParamArray关键字来定义。 规则: • 在过程中只能使用一个参数数组,并且它必须是过程定义中的最后一个参数。 • 参数数组必须是值传递 。 • 过程中的代码必须将参数数组用为一维数组。另外,数组中的每个元素的数据类型必须和ParamArray的数据类型相同。
参数数组 (续) • 参数数组是可选的,它的默认值是一个空的一维数组。 • 参数数组必须是过程的参数列表中唯一的一个可选参数。在参数数组之前的所有其它的参数必须被赋值。
过程重载 • 意味着使用相同的名称和不同的参数列表来定义多个过程。 • 当重载一个过程时: • 每个重载的版本都使用相同的过程名。 • 每个重载的版本因为下列原因之一而区别于其它的重载的版本: • 参数的数量 • 参数的顺序 • 参数的数据类型
过程重载 (续) • 不能通过下列方式来重载过程: • 过程标识符,诸如Public、Shared和Static • 参数名称 • 参数标识符,诸如ByRef 和Optional • 返回值的数据类型
过程覆盖 • 意味着在子类中重新定义基类的一个过程而不改变过程的名称。规则: • 你能够覆盖基类中使用Overridable 关键字声明的过程。 • 你需要在基类中使用关键字Overridable来明确的声明一个过程以便在子类中能够覆盖它 。 • 覆盖的过程需要和基类中被继承的成员具有相同的参数。 • 基类过程的重新定义的实现通过在过程名之前使用MyBase 关键字能够调用定义在父类中的实现。
函数 用途 Len (string expression) 得到作为参数传递的字符串表达式的长度 Mid (string expression, starting position, number of characters) 在作为参数传递的字符串表达式中以给定字符作为起始位置提取特定数量的字符 CDate (string expression) 将作为参数传递的字符串表达式转换为 Date类型 CTime (string expression) 将作为参数传递的字符串表达式转换为 Time类型 Val (string/object/ char expression) 将保存在 string/char/对象表达式中的数字转换为一个 numeric 类型的值 Visual Basic .NET中的内建函数
CBool (expression) 函数 用途 将一个字符串或者 numeric表达式转换为 Boolean类型的值 CByte (string/numeric expression) 将一个字符串或者numeric表达式转换为Byte数据类型 CInt (string/numeric expression) 将一个字符串或者 decimal表达式转换成一个integer CObj (string/numeric expression) 将一个字符串或者numeric值转换成一个对象 CChar (string/numeric expression) 将一个字符串或者 numeric值转换成一个 Char CStr (string/numeric expression) 将一个字符串或者 numeric值转换成一个 String CDec (string/numeric expression) 将一个字符串或者 numeric值转换成一个 Decimal CType(expression.datatype/object/class/structure) 将一个任意类型的表达式转换成另外的类型 Built-in Functions in Visual Basic .NET(续)
问题陈述 4.D.1 Diaz 电信呼叫中心的客户数据输入窗口需要包含检查客户 ID 和电话号码有效性的选项。客户 ID必须以字符‘C’开头并且至少还有三位。电话号码必须包含八位。在输入不正确数据时,窗体还必须具有显示出错信息的功能。另外,窗体必须有在最后的客户详细数据输入之后清除窗体上的输入记录的机制。
任务单 • 确定窗体上需要进行的检查。 • 确定在设计窗体上需要作出的改动。 • 确定显示出错信息的机制。 • 在窗体上添加附加的控件。 • 检查数据并显示出错信息。 • 保存应用程序。 • 运行应用程序使得窗体上进行的检查生效。
任务 1:确定窗体上需要进行的检查。 结果: • 按照问题陈述,客户数据输入窗体需要具有检查客户ID 和电话号码有效性的功能 。 • 通过在客户数据输入应用程序中包含相应的过程来实现检查客户ID 和电话号码有效性的功能 。 • 因为Visual Basic .NET中允许使用过程重载,你可以在客户数据输入应用程序中分别创建两个版本的过程来检查客户ID和电话号码有效性的。
对象 前缀 例子 Button cmd cmdCheckdata Button cmd cmdReset 任务 2:确定在设计窗体上需要作出的改动。 • 你将创建一个重载的过程来检查覆盖检查客户ID 和电话号码的有效性。你可以将这个过程命名为Check_data()。 结果: • 下表推荐了可用于这两个按钮的合适的前缀:
任务 3:确定显示出错信息的机制。 • 可以通过下面的方法显示信息: • Msgbox()函数 • MessageBox类
任务 3:确定显示出错信息的机制。(续) 结果: • 为了在客户数据输入窗体中输入了错误的客户ID或电话号码时显示出错信息,既可以使用MessageBox类也可以使用内建的MsgBox()函数。 • 因为MessageBox类提供了对于消息对话框接口的更多的控制,诸如显示合适的图标,因此在输入了无效的客户ID或者电话号码时推荐使用MessageBox类来显示出错信息。
任务 4:在窗体上添加附加的控件。 任务 5:检查数据并显示出错信息。 任务 6:保存应用程序。 任务 7:运行应用程序使得窗体上进行的检查生效。
问题陈述 4.P.1 Diaz 电信呼叫中心中的雇员数据输入窗口需要具有检查雇员ID和年龄项目的有效性的选项。雇员ID必须以字符‘E’开头并且至少具有四位。年龄必须大于20小于61。当输入错误数据时,窗体必须具有显示出错信息的功能。另外,窗体还必须具有清空输入的最后一个雇员详细信息的功能。雇员的详细信息基本包括雇员ID、雇员first name、雇员last name、地址、年龄、加入公司时间、部门和薪水。
稍等一下… • 窗体Form1上有分别名为Label1和Label2的两个标签和一个名为Button1的按钮。当在应用程序运行期间点击Button1时,预测代码的输出结果。 • 窗体Form1上有分别名为Label1和Label2的两个标签和一个名为Button1的按钮。你创建了一个名为MySub的用户自定义Sub过程,当用户点击Button1时这个过程用来处理信息。当执行应用程序之后,预测下面代码的输出结果。 • 窗体Form1上有分别名为Label1和Label2的两个标签和一个名为Button1的按钮。当运行应用程序并点击按钮Button1时,预测代码的输出结果。
Common Dialog 类 • 用来访问默认的Font对话框来改变文本的字体或者使用Open对话框来打开一个文件并显示内容 。 • 具有下列类型: • ColorDialog • FontDialog • FileDialog • PrintDialog • PageSetupDialog
ColorDialog类 • 用来改变文本的前台后台背景色 。 FontDialog类 • 用来改变文本的字体、字体的风格和文字的大小。 FileDialog类 • 是CommonDialog类的一个抽象子类。 • 不能被直接的实例化。然而,你能够通过使用OpenFileDialog 或者SaveFileDialog 类来打开或者保存一个已存在的文件。
PrintDialog类 • 用来打印文本和图像。 PageSetupDialog类 • 用来设置Windows 应用程序中打印的页面详细信息。
稍等一下… • 在运行代码时点击Button1会有什么结果? • 代码段写在Form1窗体的CodeEditor窗口中。在构建项目时将产生一个错误。你将怎样解决这个错误?
小结 在这一课,你学到了: • 过程是一系列的程序语句,它通过调用过程名称来执行。 • 有三种类型的过程: • Sub • Function • Property • 有两种类型的Sub过程: • 通用过程 • 事件捕获过程
小结 (续) • 有两种类型的Property过程: • Get过程用来从一个属性中取得值。 • Set过程用来为一个属性赋值。 • Property 过程用来访问声明在模块、类或者结构体中的属性。 • 参数可以通过两种方式传递给一个过程:值传递或引用传递。 • 参数数组允许你将一个值的数组作为参数传递给过程。 • 过程重载是使用相同的名称和不同的参数列表来定义多个过程。
小结 (续) • 过程覆盖允许你在子类中重新定义基类的一个过程而不改变过程的名称。 • CommonDialog 类是显示诸如Font对话框、File对话框、Print对话框和PageSetup对话框这样的通用对话框的基类。