Visual Basic .NET 编程:过程与辅助窗体详解
1. Visual Basic .NET 过程基础
在 Visual Basic .NET 编程中,过程是一段或多段代码语句的集合,所有的代码都在过程中编写。主要有两种类型的过程:子例程(Subroutine)和函数(Function)。函数会返回一个值,而子例程则不会。
Visual Basic .NET 有许多内置过程,像事件过程属于子例程,而 InputBox 函数则是函数。同时,开发者也能创建自己的过程,这样做有诸多好处。将代码拆分成多个小过程,会比把所有代码放在一个包含多页代码的过程中更具可读性。而且,如果在程序的多个地方执行相同的任务,把执行该任务的代码放在一处,能避免代码重复。后续若要修复任务执行中的错误或找到更好的执行方式,只需在一处修改代码即可。
过程不会自行执行,需要被调用。子例程通过名称调用,参数放在括号内;函数通常在赋值语句右侧或表达式中调用,常与 If…Then 控制结构一起使用。
传递信息给过程时会用到参数,参数可以通过值传递(使用 ByVal 关键字)或引用传递(使用 ByRef 关键字)。此外,还能使用可选参数和 ParamArray 参数,并且可以重载过程,让密切相关的过程共享相同的名称,仅通过参数列表区分。
以下是一个简单的计算程序示例代码:
Private Sub cmdCalculate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdCalculate.Click
If Not isValidInput() Then
StatusBar1.Text = "Both operands must be numeric"
ElseIf DivideByZero() Then
StatusBar1.Text = "Can’t divide by zero"
Else
StatusBar1.Text = ""
Calculate()
End If
End Sub
Private Sub cmdClear_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdClear.Click
txtOp1.Text = ""
txtOp2.Text = ""
lblResult.Text = ""
StatusBar1.Text = ""
End Sub
上述代码中,
cmdCalculate_Click
事件过程首先调用
isValidInput
函数判断操作数是否为数字,若不是则在状态栏给出警告,不进行算术计算;接着调用
DivideByZero
函数检查是否有除零操作,若有同样给出警告;若两个检查都通过,则调用
Calculate
子例程。
cmdClear_Click
事件过程用于清除文本框和标签的内容。
2. 过程相关概念的掌握检查
以下是一些关于过程的常见问题及解答:
|问题|选项|答案|
| ---- | ---- | ---- |
|哪个只能从特定对象调用,不能独立于对象调用?|a. Function
b. Method
c. Subroutine|b|
|参数是否必须按照声明的顺序传递?|a. True
b. False|a|
|传递的参数数据类型是否必须与声明的参数数据类型相同?|a. Always
b. Never
c. No, if the data type passed can be converted to the data type declared through a narrowing conversion
d. No, if the data type passed can be converted to the data type declared through a widening conversion|d|
|返回函数值时,使用 Return 语句和将返回值赋给函数名有什么区别?|a. Assigning the return value to the function name immediately ends execution of the function, whereas the Return statement does not.
b. The Return statement immediately ends execution of the function, whereas assigning the return value to the function name does not.
c. No difference.|b|
|哪种调用函数的方式无法使用函数的返回值?|a. Using the Call keyword
b. Calling the function on the right side of an assignment statement or in an expression
c. Calling the function in an expression|a|
|将标量变量按值(ByVal)或按引用(ByRef)作为过程参数传递,对被调用过程修改调用代码中作为参数传递的变量值有什么影响?|a. The called procedure may modify the value of a scalar variable if it is passed ByRef, but not if it is passed ByVal.
b. The called procedure may modify the value of a scalar variable if it is passed ByVal, but not if it is passed ByRef.
c. There is no effect.|a|
|将数组变量按值(ByVal)或按引用(ByRef)作为过程参数传递,对被调用过程修改调用代码中作为参数传递的数组元素值有什么影响?|a. The called procedure may modify the individual elements of the array if the array is passed ByRef, but not if it is passed ByVal.
b. The called procedure may modify the individual elements of the array if the array is passed ByVal, but not if it is passed ByRef.
c. There is no effect.|a|
|将数组变量按值(ByVal)或按引用(ByRef)作为过程参数传递,对被调用过程改变调用代码中作为参数传递的数组所指向的数组对象有什么影响?|a. The called procedure may change the array object pointed to by the array if the array is passed ByRef, but not if it is passed ByVal.
b. The called procedure may change the array object pointed to by the array if the array is passed ByVal, but not if it is passed ByRef.
c. There is no effect.|a|
|以下哪个陈述是正确的?|a. Optional arguments may be declared with mandatory arguments in any order.
b. Optional arguments may be declared only before mandatory arguments.
c. Optional arguments may be declared only after mandatory arguments.
d. Optional arguments may not be declared with mandatory arguments.|c|
|是否必须为可选参数指定一个值?|a. True
b. False|b|
|以下哪个陈述是正确的?|a. A procedure must have a parameter array argument.
b. A procedure can have no more than one parameter array argument.
c. A procedure may have more than one parameter array argument.
d. A procedure may have both a parameter array argument and another optional argument.|b|
|重载过程必须在____方面彼此不同。|a. Their access specifier
b. Their argument list
c. Their return value
d. Whether arguments are passed ByVal or ByRef|b|
3. 辅助窗体概述
在 Visual Basic 应用程序中,窗体是最常见的用户界面元素。创建新的 Windows 应用程序项目时,会自动包含一个作为主应用程序窗口的窗体。但由于 Windows 应用程序通常很复杂,主应用程序窗口窗体无法完成应用程序所需的所有任务,因此需要辅助窗体。常见的辅助窗体有以下几种:
-
消息框(Message box)
:包含信息性文本或问题,以及如 OK、Yes、No、Cancel 等按钮,供用户响应和关闭消息框。消息框是模态的,用户必须关闭消息框才能返回主窗体。例如在 Microsoft Word 中修改文档后未保存就尝试关闭,会弹出询问是否保存的消息框。
-
对话框(Dialog box)
:与消息框类似,也是模态的,但可能包含文本框、复选框、下拉列表等控件。如文件打印菜单命令显示的打印对话框。
-
拥有窗体(Owned form)
:与对话框类似,也可包含控件,但它是非模态的,用户无需关闭该窗体就能返回主窗体。像 Microsoft Word 中编辑查找菜单命令显示的查找和替换窗体。
辅助窗体不仅可以是信息性的,通常还具有交互性。它会向用户提问,并根据用户点击的按钮获取答案。这就带来了两个编程挑战:一是需要在两个窗体之间进行通信,主窗体要知道辅助窗体上哪个按钮被点击;二是主窗体应根据点击的按钮执行不同的代码。
4. 消息框项目实践
下面通过一个具体项目来展示如何创建和使用消息框。
项目 10 - 1:消息框
此项目要创建一个询问用户是否要退出应用程序的消息框。若用户选择 Yes,应用程序关闭;若选择 No,应用程序继续运行。
步骤如下
:
1. 创建一个 Windows 应用程序。
2. 使用工具箱向窗体添加一个按钮。
3. 通过属性窗口更改按钮的以下属性值:
-
Name
:从 Button1 改为 btnClose,使控件名称更具逻辑性。
-
Text
:从 Button1 改为 Close,给用户一个关于按钮用途的视觉提示。
添加按钮后,在 btnClose 的 Click 事件中添加以下代码:
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
Dim drQuit As DialogResult
drQuit = MessageBox.Show("Do you really want to quit?", "Exit Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)
If drQuit = DialogResult.Yes Then
Me.Close()
End If
End Sub
上述代码的逻辑步骤如下:
1.
显示消息框
:使用 MessageBox 类的 Show 方法创建并显示消息框。Show 方法是重载的,可以根据包含的参数数量以不同方式调用。参数包括 Text(消息框内的提示文本)、Title(消息框的标题)、MessageBoxButtons(消息框内的按钮组合)、MessageBoxIcon(消息框内的图标)、MessageBoxDefaultButton(默认按钮)。
2.
获取用户选择
:Show 方法返回一个值,代表用户在消息框中点击的按钮。将返回值存储在
drQuit
变量中,该变量的数据类型为 DialogResult。
3.
根据用户选择关闭应用程序
:使用 If 语句判断
drQuit
的值是否为 DialogResult.Yes,若是则关闭窗体,结束应用程序。
5. MessageBox 类 Show 方法参数详解
| 参数 | 描述 |
|---|---|
| Text | 消息框内的提示文本,用于向用户传达问题或信息,如 “Do you really want to quit?” |
| Title | 消息框的标题,为用户提供消息框用途的视觉提示,如 “Exit application” |
| MessageBoxButtons | 消息框内的按钮组合,可选值有 AbortRetryIgnore(包含 Abort、Retry、Ignore 按钮)、OK(默认,只有 OK 按钮)、OKCancel(OK 和 Cancel 按钮)、RetryCancel(Retry 和 Cancel 按钮)、YesNo(Yes 和 No 按钮)、YesNoCancel(Yes、No 和 Cancel 按钮) |
| MessageBoxIcon | 消息框内的图标,用于向用户提供消息性质和重要性的视觉提示,可选值有 Asterisk(蓝色背景圆圈内的白色小写字母 i)、Error(红色背景圆圈内的白色 X)、Exclamation(黄色背景三角形内的黑色感叹号)等 |
| MessageBoxDefaultButton | 默认按钮,按下 ENTER 键相当于点击该按钮,可选值有 Button1(消息框上的第一个按钮为默认按钮)、Button2(第二个按钮为默认按钮)、Button3(第三个按钮为默认按钮) |
6. 总结
通过以上内容,我们了解了 Visual Basic .NET 中过程的基本概念、类型、调用方式以及参数传递方法,同时掌握了辅助窗体的相关知识,特别是消息框的创建和使用。在实际编程中,合理运用这些知识可以提高代码的可读性和可维护性,为用户提供更好的交互体验。例如,在创建消息框时,根据不同的需求选择合适的按钮组合、图标和默认按钮,能让用户更清晰地理解消息框的意图。希望这些内容对大家学习和使用 Visual Basic .NET 有所帮助。
Visual Basic .NET 编程:过程与辅助窗体详解
7. 消息框相关枚举类型
在使用消息框时,会涉及到多个枚举类型,这些枚举类型定义了消息框的各种属性选项。
MessageBoxButtons 枚举
该枚举定义了消息框中可用的按钮组合,具体如下表所示:
|名称|消息框中包含的按钮|
| ---- | ---- |
|AbortRetryIgnore|Abort、Retry 和 Ignore|
|OK|OK(默认)|
|OKCancel|OK 和 Cancel|
|RetryCancel|Retry 和 Cancel|
|YesNo|Yes 和 No|
|YesNoCancel|Yes、No 和 Cancel|
使用时,通过
[Enumeration Name].[Choice Name]
的语法来指定按钮组合,例如
MessageBoxButtons.YesNo
表示消息框中包含 Yes 和 No 按钮。
MessageBoxIcon 枚举
此枚举定义了消息框中可用的图标选项,用于向用户传达消息的性质和重要性,如下表:
|名称|消息框中的图标|
| ---- | ---- |
|Asterisk|蓝色背景圆圈内的白色小写字母 i|
|Error|红色背景圆圈内的白色 X|
|Exclamation|黄色背景三角形内的黑色感叹号|
|Hand|红色背景圆圈内的白色 X|
|Information|蓝色背景圆圈内的白色小写字母 i|
|None|无|
|Question|白色背景圆圈内的蓝色问号|
|Stop|红色背景圆圈内的白色 X|
|Warning|黄色背景三角形内的黑色感叹号|
MessageBoxDefaultButton 枚举
该枚举用于指定消息框的默认按钮,按下 ENTER 键相当于点击该按钮,具体选项如下:
|成员名称|描述|
| ---- | ---- |
|Button1|消息框上的第一个按钮为默认按钮|
|Button2|第二个按钮为默认按钮|
|Button3|第三个按钮为默认按钮|
通常选择影响最小的按钮作为默认按钮,以避免用户误按 ENTER 键导致严重后果。
DialogResult 枚举
DialogResult
枚举用于表示消息框中用户点击按钮的返回值,与
MessageBoxButtons
枚举中的按钮相对应,如下表:
|成员名称|描述|
| ---- | ---- |
|Abort|对话框的返回值是 Abort,通常由标有 Abort 的按钮发送|
|Cancel|对话框的返回值是 Cancel,通常由标有 Cancel 的按钮发送|
|Ignore|对话框的返回值是 Ignore,通常由标有 Ignore 的按钮发送|
|No|对话框的返回值是 No,通常由标有 No 的按钮发送|
|None|对话框没有返回值,意味着模态对话框继续运行|
|OK|对话框的返回值是 OK,通常由标有 OK 的按钮发送|
|Retry|对话框的返回值是 Retry,通常由标有 Retry 的按钮发送|
|Yes|对话框的返回值是 Yes,通常由标有 Yes 的按钮发送|
在代码中,将
MessageBox.Show
方法的返回值存储在
DialogResult
类型的变量中,就可以根据用户点击的按钮执行不同的操作。
8. 保存消息框返回值的重要性
虽然
MessageBox.Show
方法返回一个值,但并非所有方法都会返回值。通常将返回值保存到变量中是个好主意,因为未保存的返回值在应用程序执行到下一行代码时就会丢失。
例如,在消息框项目中,将
MessageBox.Show
方法的返回值保存到
drQuit
变量中:
Dim drQuit As DialogResult
drQuit = MessageBox.Show("Do you really want to quit?", "Exit Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)
这样在后续代码中就可以根据
drQuit
的值判断用户的选择:
If drQuit = DialogResult.Yes Then
Me.Close()
End If
9. 模态窗体的概念
在前面提到消息框和对话框是模态的,那么什么是模态窗体呢?
模态窗体意味着在该窗体显示时,用户必须先关闭它才能与主窗体或应用程序的其他部分进行交互。例如消息框,当它弹出时,用户无法直接操作主窗体,必须对消息框进行响应(如点击按钮)并关闭它,才能继续使用主窗体。
10. 总结与展望
在 Visual Basic .NET 编程中,过程和辅助窗体是非常重要的概念。过程的合理使用可以提高代码的可读性、可维护性和复用性,通过参数传递可以灵活地在过程之间交换信息。而辅助窗体则为用户提供了更好的交互体验,尤其是消息框的使用,能够及时向用户传达信息并获取用户的响应。
在实际开发中,我们可以根据具体需求创建不同类型的辅助窗体,合理设置消息框的按钮、图标和默认按钮,以满足应用程序的功能和用户体验要求。同时,要注意在窗体之间进行有效的通信,确保主窗体能够根据用户在辅助窗体上的操作执行相应的代码。
未来在学习和使用 Visual Basic .NET 时,可以进一步探索更多关于窗体和过程的高级应用,如自定义对话框、多窗体之间的复杂交互等,不断提升自己的编程能力和应用开发水平。
下面是一个简单的流程图,展示了消息框项目的整体逻辑:
graph TD
A[点击关闭按钮] --> B[显示消息框]
B --> C{用户选择}
C -- Yes --> D[关闭应用程序]
C -- No --> E[继续运行应用程序]
通过以上内容的学习和实践,相信大家对 Visual Basic .NET 中的过程和辅助窗体有了更深入的理解,能够在实际编程中更好地运用这些知识。
超级会员免费看
651

被折叠的 条评论
为什么被折叠?



