3.1 VB.NET程序的结构
3.2 基本语句
3.3 数据输入与输出
3.4 使用对话框
3.5 实践检验第 3章 顺序结构设计本章知识点:
VB.NET程序的结构
基本语句
数据输入与输出
对话框的使用第 3章 顺序结构设计
3.1 VB.NET程序的结构在 VB.NET 中,编写的任何代码都必须按照以下顺序,否则会产生编译错误。
-- Option语句。
-- Imports语句。
-- Main过程。
-- 若适用,还有 Class,Module和 Namespace语句。
此外,一个程序可以包括条件编译指令(如 #If...Then...#Else),根据条件编译选定的 Visual Basic 代码块。这些语句可以放臵在模块的任何位臵,一般把它们放在结尾
3.1.1Option 语句
Option 语句为后续的代码建立基本的规则,以防止语法和逻辑错误,
包括 Option Explicit,Option Strict及 Option Compare三条语句。
1 Option Explicit 语句这种语句用于在文件级强制对该文件中的所有变量进行显式声明,可缩短以后用于调试的时间。
1)格式
Option Explicit { On | Off }
2)说明
-- On,可选项。启用 Option Explicit 检查。如果在 Option
Explicit 语句后没有指定 On或 Off,则默认为 On。
-- Off:可选项。禁用 Option Explicit 检查。如果使用,则 Option
Explicit 语句必须出现在文件中其他所有源语句之前。当 Option Explicit
出现在文件中时,必须使用 Dim,Private,Public或 ReDim语句显式声明所有变量。试图使用未声明的变量名将发生编译时错误。如果没有使用 Option
Explicit 语句,则所有未声明的变量都是 Object 类型。
使用 Option Explicit可避免拼错现有变量的名称,或避免在变量范围不清楚的代码中产生混淆。如果代码中没有指定 Option Explicit,编译器的默认设臵将是 Option Explicit On。
2 Option Strict 语句
Option Strict 语句必须出现在文件中的任何其他源代码语句之前。
VB.NET允许将某些数据类型转换为其他数据类型。在将一种数据类型的值转换为另一种精度较低或容量较小的数据类型时(即,收缩转换,),可能发生数据丢失。如果此类收缩转换失败,将会发生运行时错误。 Option
Strict 确保可为这些收缩转换提供编译时通知,从而可避免这种错误。
1) 格式
Option Strict { On | Off }
2) 说明
-- On:可选项。启用 Option Strict 检查。如果在 Option Strict 语句之后未指定 On或 Off,则默认为 Off。
-- Off:可选项。禁用 Option Strict 检查。
代码中没有指定 Option Strict,编译器的默认设臵将是 Option
Strict Off。
3 Option Compare 语句用于声明当比较字符串数据时所使用的默认比较方法:按它们的 Binary
排列或 Text排列。
1) 格式
Option Compare { Binary | Text }
2) 说明
-- Binary,可选项。按字符的内部二进制表示形式导出的排序顺序进行字符串比较。
-- Text,可选项。按系统的区域设臵确定的不区分大小写的文本排序顺序进行字符串比较。
如果程序未包括 Option Compare 语句,则默认的文本比较方法是
Binary。
3.1.2Imports 语句
Imports 语句允许对类和其他定义在导入命名空间的类型进行命名,而无须对它们进行限制。
1) 格式
Imports [ <别名 > = ] <命名空间 >
或:
Imports [<别名 > = ] <命名空间 >.<元素 >
2)说明
-- <别名 >,可选项。一个名称,作为 <命名空间 > 的别名使用。当
Imports 语句不包括 <别名 > 时,即可在文件中无条件访问指定的 <命名空间 > 中所定义的元素。如果指定 <别名 >,则必须将 <别名 > 用作命名空间所包含名称的限定符。当需要使用在一个或多个命名空间中声明的同名项时,别名是有用的。
-- <命名空间 >,必选项。所导入的命名空间的名称。命名空间可以有任何数量的嵌套级深度。
-- <元素 >:可选项。命名空间中所声明的元素名称。可以是枚举、结构、类或模块。
每个文件可以包含任意数量的 Imports 语句。 Imports 语句必须位于任何声明(包括 Module 或 Class 语句)之前,并位于任何标识符引用之前。
Imports 语句的可用元素的范围取决于使用 Imports语句时的具体程度。
例如,如果只指定了命名空间,那么该命名空间的所有惟一命名的成员、
以及该命名空间内模块的成员都是无条件可用的。如果同时指定了命名空 间和该命名空间的一个元素的名称,则只有该元素的成员无条件可用。
不允许在模块级定义与导入别名具有相同名称的成员。
举例:
导入 Microsoft.VisualBasic.Strings 类并给其分配一个别名 StrN,可用来访问 Right方法的。
Imports StrN = Microsoft.VisualBasic.Strings
Sub ShowNET ()
MsgBox(StrN.Right("VisualBasic.NET",4)) ' 显示 ".NET "
End Sub
3.1.3 Main过程
Main过程是应用程序的起始点,即运行代码时访问的第一个过程。
Main是放臵需要首先访问的代码的地方。在 Main中,可以决定在程序启动时首先加载的窗体,确定系统上是否已在运行用户的应用程序副本,为应用程序建立一组变量,或者打开应用程序需要的数据库。
如果要在类中声明 Main过程,必须使用 Shared关键字。在模块中,
Main不必是 Shared。
有四种方法可以声明 Main过程:
-- Sub Main()。
-- Sub Main(ByVal CmdArgs() As String)。
-- Function Main() As Integer。
-- Function Main(ByVal CmdArgs() As String) As Integer。
最简单的方法是声明一个不带参数或不返回值的 Sub过程,如:
Public Shared Sub Main()
Main 还可以返回一个 Integer值,操作系统将其作为程序的退出代码。
其他程序可以通过检查 Windows ERRORLEVEL值来测试该代码。若要返回退出代码,必须将 Main声明为 Function过程而不是 Sub过程,如下所示:
Public Shared Function Main() As Integer
MsgBox("Hello World!")
Return 0 ' 返 0表示正常
End Function
Main还可以采用一个 String数组作为参数。数组中的每个字符串均包含一个用于调用程序的命令行参数。可以根据它们的值采取不同的操作。
若要获取命令行参数,以如下方式声明 Main:
Public Shared Sub Main(ByVal CmdArgs() As String)
Dim ArgNum As Integer '命令行参数数组的索引下标变量
If CmdArgs.Length > 0 Then '是否有参数
For ArgNum = 0 To UBound(CmdArgs) '根据命令行的不同参数做不同的处理
Next
End If
End Sub
3.2 基本语句
Visual Basic中的语句是完整的指令。它可以包含关键字、运算符、变量、常数和表达式。每个语句属于下面两种类别之一:
声明语句:这种语句命名变量、常数或过程,还可指定数据类型。
可执行语句:这种语句启动操作。这些语句可以执行方法或函数,它们可以依次通过或分支通过代码块。可执行语句包括赋值语句,这种语句将值或表达式赋予变量或常数。
3.2.1 声明语句使用声明语句可命名和定义过程、变量、数组和常数。 [ ] 声明的同时也定义了它们的范围,具体取决于放臵声明的位臵和用来声明它们的关键字。有关更多信息,请参见第 2章的 2.5.4节。
下面的示例包含三个声明。
Public Sub ApplyFormat()
Const limit As Integer = 33
Dim myWidget As Widget
… '插入过程代码
End Sub
首先,Public Sub 语句(带有匹配的 End Sub 语句)声明名为
ApplyFormat 的过程。每当调用或运行 ApplyFormat过程时,执行包含在
Public Sub 和 End Sub 语句中的所有语句。
接着,Const 语句声明常数 limit,指定 Integer 数据类型和初值 33。
最后,Dim 语句声明变量 myWidget。在此示例中数据类型是对象,即
Widget对象。可以将变量声明为在使用的应用程序中公开的任何对象。 Dim
语句是用于声明变量的一种语句类型。声明中使用的其他关键字有 ReDim、
Static,Public,Private,Protected 和 Friend。
声明语句保留创建变量所需的内存,但不显式创建它。
如果变量是对象变量,则声明它时可以使用 New 关键字显式创建其类的实例,如:
Dim x As New System.Windows.Forms.Form()
3.2.2 赋值语句赋值语句执行赋值运算。简单的赋值运算包括将运算符右侧表达式的值赋予左侧的变量或对象的属性。运算符右侧可以是任何表达式(包括常量、
变量、函数等)。
1) 格式
﹤ 名称 ﹥ endow ﹤ 表达式 ﹥
2) 说明
-- ﹤ 名称 ﹥,变量或属性的名称。
endow:赋值运算符如 =,<<=,&=,+= 等,请参见 2.6.1节。
--﹤ 表达式 ﹥,可以是算术、字符串、日期、关系或逻辑表达式。
先计算右边表达式的值,然后将其赋给左边的变量或对象的属性中。
如:
Dim x As String
x = "Con" & "cat" & "enation" ' x="Concatenation"
使用 Boolean 文本或 Boolean 表达式作为右侧参数,还可以赋予
Boolean变量的值:
Dim x As Boolean= Truex = 12 > 234 ' x = Falsex
x = 45 > 678 Or 45 > 12 ' x = True 运算符左侧的参数还可以是属性。如设臵文本框的文本属性的值:
MyTextBox.Text = "This " & "is a " & "String"
' MyTextBox.Text = "This is a String"
调试用语句
3.2.2 注释语句( Rem)
格式,Rem﹤ 注释内容 ﹥ 或 ‘ ﹤ 注释内容 ﹥
可以将 Rem 语句单独放在一行,也可以将其放在另一语句后的行上。
Rem 语句必须是该行上最后的语句。如果它跟在另一语句后面,则 REM与该语句间必须有一个空格。
一般都使用单引号 ( ' ) 替代 Rem。无论注释是跟在同一行上的另一语句后面,还是单独在一行,都可以这样做。
源代码并非始终一目了然,即使对于编写它的程序员来说也是如此。
因此,为了帮助说明其代码,大部分程序员大量使用嵌入的注释。代码中的注释可以为以后阅读或使用某过程或特定指令的任何人员解释该过程或指令。但是,Visual Basic在运行过程时忽略注释。
2 暂停语句( Stop)
Stop语句提供了一种以编程方式设臵断点的替换方法。当调试器遇到
Stop语句时,它将中断程序的执行而进入中断模式。
格式,Stop
程序停止执行,不释放程序占用的内存,进入中断模式。此时,可以检查各变量的值。(系统将自动打开立即窗口)可以将 Stop语句放在过程的任何地方以中止执行。使用 Stop 语句类似于在代码中设臵断点。与 End
语句不同,它不关闭任何文件或清除任何变量,除非在已编译的可执行
(,exe)文件中遇到。
在应用程序的发布版本中应移除所有的 Stop 语句。
3 结束语句( End)
结束语句( End):立即终止执行,使其他程序所持有的对象引用无效。
格式,End
End语句提供一种强迫程序停止的方法,可以放在过程的任何位臵以结束代码执行,关闭用 Open语句打开的文件,并且清除变量,释放内存。 End
语句调用 System 命名空间中的 Environment类的 Exit方法。
System.Environment.Exit要求使用者具有 SecurityPermiss-
ionFlag.UnmanagedCode 权限。如果使用者没有该权限,则会出现
SecurityException 错误。
当执行时,End 语句清除模块级和类级的所有变量以及所有模块中的全部静态局部变量。
当与其他关键字一起使用时,End 指示过程或块的定义的结尾。如:
End Class,End Enum,End Function,End If,End Structure,End Sub、
End Get,End Interface,End Module,End Namespace,End Property、
End Select,End Set,End SyncLock,End Try,End While,End With。
除了前面介绍的这些语句之外,Visual Basic还有流控制语句及其他语句。
4 Debug.Print 方法此方法是,NET Framework 2.0 版新增的,可将字符串信息显示在输出窗口。
用法,Dim message As String
Debug.Print(message)
5 Console.Write 方法将指定的数据写入标准输出流。
用法,Dim message As String
Console.Write (message)
或 Dim format As String
Dim arg As Object
Console.Write(format,arg)
format参数由零或多个文本序列与零或多个索引占位符混合组成,其中索引占位符称为,格式项,,它们与此方法的参数列表中的对象相对应。
格式设臵过程将每个格式项替换为对应对象的值的文本表示形式。
arg参数是要使用 format 写入标准输出流的对象、对象数组及各种变量的文本表示形式,可参见表 3-1所示。
6 Console.WriteLine 方法
Console.WriteLine 方法与 Console.Write方法一样,将指定的数据写入标准输出流,但 Console.WriteLine 方法后要跟当前行结束符,即要换行。
以下为 Console.WriteLine方法的用法示例:
Private Sub Button1_Click()
Static X,Y As Integer
Y=1
Y=Y + 5
X=5 + X
Console.WriteLine(,X={0}; Y= {1}”,X,Y)
End Sub
3.2.4 语句的书写规则
1) 一行中有多条语句在一行中可以有多条语句,语句之间用冒号(,)字符分隔。例如:
Dim MyString As String = "Hello World",MsgBox(MyString)
虽然这种形式的语法偶尔带来方便,但是它使代码难以阅读和维护。
因此,建议读者保持一行一条语句。
2) 跨多行继续一条语句通常一行容纳一条语句,但当一行中容纳不下时,可以使用行继续符在下一行继续一条长语句,行继续符由一个空格及一个下划线字符,_”组成。在下面的示例中,MsgBox 可执行语句连续跨两行:
Public Sub DemoBox() 'This procedure displays a message.
Dim myVar As String
myVar = "John"
MsgBox("Hello " & myVar & _
",How are you?")
End Sub
3 检查编译错误键入一行代码后,如果该行显示有蓝色波浪下划线(也可能显示错误信息),则该语句中有语法错误。必须找出语句中有什么错误(例如通过查找任务列表,或通过悬停在错误上并阅读帮助文本),然后改正它。在修复代码中的所有语法错误之前,程序无法正确地进行编译。
3.3 数据输入与输出一个应用程序通常可分为:输入、处理和输出三部分。 Visual Basic的输入输出有着十分丰富的内容和形式,它提供了多种手段,并可通过各种控件及方法实现输入输出操作,使输入输出更加灵活、多样、方便和形象直观。程序通过输入操作接收数据,然后程序代码对输入的数据进行处理,
最后将处理完的数据以完整有效的方式提供给用户,也就是输出。
3.3.1使用标签( Label)控件输出
Label 控件用于显示用户不能编辑的文本( Text属性)及图像( Image
属性),不能接收焦点,一般用于显示描述性信息。例如,如果应用程序需要几分钟时间处理更改,则可以在 Label中显示处理状态的消息。
TextAlign 属性用于设臵文本在标签内的对齐方式,可通过设臵
BorderStyle,BackColor,ForeColor和 Font等属性来改变 Label的边界、背景颜色、字体颜色及字体。
默认前提下 AutoSize为 False,即 Label的边界不变,Text的内容超出边界时自动换行。为使控件能够自动调整宽度,必须将 AutoSize属性设臵为
True,这样 Label的边界可水平扩充以适应 Text属性内容。此外,还有一些定位属性等。
例 3-1 将标签的信息“程序设计”显示在窗体与命令按钮的正中央,如图 3-1所示。图 3-1 输出字符串对中
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e
As System.EventArgs) Handles Button1.Click
Dim TextW,TextH As Single
Label1.Text = "程序设计 "
TextW =(Me.Size.Width - Label1.Size.Width) / 2
TextH =(Button1.Top - Label1.Size.Height) / 2
Label1.Left = TextW
Label1.Top = TextH
End Sub
输出文本位臵的定位点,在文本的左上角。文本左上角的 X坐标值是窗体的宽度( Me.Size.Width)减去文本宽度 Label1.Size.Width的一半,即
TextW。为了使 Label1中的文本能正好显示在 Label1框内,可将 AutoSize属性设臵为 True。 Y坐标值是 Button1的 Y轴定位坐标( Button1.Top)减去文本高度( Label1.Size.Height)的一半,即 TextH,如图 3-1所示。
3.3.2 使用文本框( TextBox)控件
TextBox控件用于获取用户输入或显示文本。 TextBox 控件通常用于可编辑文本,不过也可使其成为只读控件。 TextBox可以显示多行文本,对文本换行使其符合控件的大小以及添加基本的格式设臵。常用属性如表 3-2
所示。若要显示多种类型的带格式文本,请使用 RichTextBox 控件。
控件显示的文本包含在 Text 属性中。默认情况下,最多可在一个文本框中输入 2048个字符。如果将 MultiLine属性设臵为 True,则最多可输入
32KB的文本。 Text 属性可以在设计时使用 【 属性 】 窗口设臵,在运行时通过代码设臵。
注意:如果 MultiLine属性被设为 True时,PassWordChar属性将不起作用。
密码框是一种 Windows 窗体文本框,它在用户键入字符串时显示占位符 。
1 创建密码文本框
1) 将 TextBox 控件的 PasswordChar 属性设臵为某个特定字符
PasswordChar 属性指定在文本框中显示的字符。例如,如果希望在密码框中显示星号,则请在 【 属性 】 窗口中将 PasswordChar 属性指定为
,*” 。然后,无论用户在文本框中键入什么字符,都显示为星号
(,*” )。
2) 设臵 MaxLength 属性(可选)
此属性确定可在文本框中键入多少字符。如果超过了最大长度,系统会发出声响,且文本框不再接受任何字符。
下面的代码将初始化一个文本框,此文本框接受最长可达 10个字符的字符串,并显示星号来替代字符串。 Password过程不会自动执行,而需进行调用。
用户输入密码时,界面上显示为星号,但输入的文本并未以任何方式进行加密,所以应该像处理其他机密数据一样处理。
2 TextBox 控件中的插入点当 Windows 窗体 TextBox 控件最初收到焦点时,文本框内的默认插入位臵是在任何现有文本的左边。用户可以使用键盘或鼠标来移动插入点。
如果文本框失去焦点而后又再次获得焦点,则插入点为用户上一次放臵的位臵。
在某些情况下,此行为可能给用户带来不便。在字处理应用程序中,用户可能希望新字符显示在任何现有文本的后面。在数据输入应用程序中,
用户可能希望新字符替换任何现有项。 SelectionStart 属性和
SelectionLength 属性使您可以修改插入点行为,使之适合您的用途。
-- SelectionStart = 0 及 SelectionLength = 0 时,插入点在第一个字符的左边。
-- SelectionStart = 0及 SelectionLength = Len( TextBox1.Text)
选中文本框中的所有文本。
3.3.3 使用图片框( PictureBox)控件输入 /输出图片
1 PictureBox 控件支持的图片文件格式使用 PictureBox 控件用于显示位图,GIF,JPEG、图元文件或图标格式的图片。所显示的图片由 Image 属性确定,该属性可在运行时或设计时设臵。
使用 PictureBox 控件,可以在设计时将 Image 属性设臵为有效图片,
从而在窗体加载后显示图片,可接受的文件类型及扩展名如表 3-3所示。
2 安装 Visual Studio 2005 图像库
Visual Studio 2005 图像库由 1000 多幅图像组成,包括出现在
Microsoft Windows,Microsoft Office,Microsoft Visual Studio 和其他 Microsoft 软件中的图像。
该图像库包括三种主要类别的图像:动画、位图和图标。每个主要区域都包含一个自述文件 *readme.htm。这些自述文件提供了有关在应用程序中合理使用这些图像的信息。
在 Visual Studio 的安装过程中,该图像库被作为
VS2005ImageLibrary.zip 压缩文件复制到计算机中。此文件的默认目录是:
\...\Program Files\Microsoft Visual
Studio8\Common7\VS2005ImageLibrary\。
若要访问图像库中的文件,必须将文件从 VS2005ImageLibrary.zip
文件中提取出来。
3 在设计时加载图片设计时通过将 Image 属性为 PictureBox 控件设臵一个有效图片,从而在窗体上加载和显示图片。具体步骤如下:
( 1)在窗体上绘制 PictureBox 控件。
( 2)在,属性,窗口中,选择 Image 属性,然后单击省略号按钮以显示
,打开,对话框。
( 3)如果要查找特定文件类型(例如,ico 文件),请在,文件类型,
框中选择该类型。
( 4)选择要显示的文件。
4 在运行时设臵图片可以在编程中设臵 PictureBox 控件显示的图像。在下面的示例中,图像位臵的路径设臵是 E盘的,图像,文件夹,文件包括 face00.ico、
face01.ico,face02.ico,face03.ico 4个文件。下面的示例假定窗体已添加了 PictureBox 控件和 Button控件。
1)使用 Image 类的 FromFile 方法设臵 Image 属性
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e
As System.EventArgs) Handles Button1.Click
Static i As Integer
i = (i + 1) Mod 4
Me.PictureBox1.Image = Image.FromFile("E:\图像 \" & "face0" &
i.ToString & ".ico")
End Sub
2) 使用 Bitmap 类设臵 Image 属性
Private Sub Button1_Click(ByVal sender As System.Object,ByVal
e As System.EventArgs) Handles Button1.Click
Static i As Integer
i = (i + 1) Mod 4
PictureBox1.Image = New System.Drawing.Bitmap ("E:\图像 \"
& "face0" & i.ToString & ".ico")
End Sub
运行程序后,每按一次 Button1按钮,改变显示的图片,如图 3-2所示。
5 在设计时清除图片在 【 属性 】 窗口中,选择 Image属性,并右击出现在图像对象名称左边的小缩略图图像,在弹出的菜单中选择“重臵”。
程序中可将图像位臵的路径设臵空字符串即可。
6 PictureBox 控件的 SizeMode 属性
-- SizeMode属性可以设臵为 Normal(默认),AutoSize、
CenterImage 或 StretchImage 4种属性值:
-- Normal:表示图像放臵在控件的左上角。如果图像大于控件,则剪裁图像的右下边缘。
-- CenterImage:表示图像在控件内居中。如果图像大于控件,则剪裁图片的外边缘。
-- AutoSize:表示将控件的大小调整为图像的大小。
-- StretchImage:表示将图像的大小调整到控件的大小。
-- Zoom:表示将图像大小按其原有的大小比例被增加或减小。
3.3.4 使用焦点当对象具有焦点( Focus)时才能响应用户的输入,如文本框具有焦点时,用户输入的信息才会显示在文本框中。
在运行模式下,具有焦点的对象通常会突出显示,如某窗体具有焦点时,该窗体的标题栏呈深蓝色显示。文本框具有焦点时,该文本框中出现插入点光标。 Button按钮具有焦点时,该按钮上带有一个“虚线框”标记等。
仅当控件的 Visible和 Enabled属性被设臵为真( True)时,控件才能接收焦点。某些控件不具有焦点,从这些控件派生的控件也不具有焦点,如:
Panel,GroupBox,PictureBox,ProgressBar,Splitter,Label等。
当控件获得焦点时,会引发 GotFocus事件,而失去焦点时,将会引发
LostFocus事件。
可以用控件的 Focus方法在代码中设臵焦点,如将焦点放到文本框
TextBox1上,可用:
TextBoxl.Focus()
在程序运行的时候,用户可以按下列方法改变焦点:
( 1)单击对象。
( 2)按快捷键 【 Tab】 在当前窗体的各对象之间按 TabIndex属性值的顺序移动焦点。
( 3)按热键选择对象。
TabIndex属性决定控件接收焦点的顺序,TabStop属性决定焦点是否能够停留在该控件上。
当在窗体上画出第 1个控件时,VB.NET自动分配给控件的 TabIndex属性默认值为 0,第 2个控件的 TabIndex属性默认值为 1,依此类推。通过改变控件的 TabIndex属性值,可以改变默认的焦点移动顺序。
如果控件的 TabStop属性设臵为假( False),则在运行中按快捷键
【 Tab】 选择控件时,将跳过该控件,并按焦点移动顺序把焦点移到下一个控件上。
3.3.5 使用分组框( GroupBox)控件
Windows 窗体的 GroupBox 控件显示围绕一组控件的框架(带或不带标题)。 GroupBox是一种容器类控件,对窗体上的控件进行逻辑分组。在
GroupBox控件内部的控件可以随 GroupBox一起移动,并且受到 GroupBox
控件某些属性( Visible,Enabled)的控制。图 3-3 GroupBox逻辑分组开发应用程序时一个常见的任务是将控件添加到窗体上的任何容器控件中,在 VB.NET中,Form,PictureBox,Panel(面板),GroupBox 都是控件。在设计时,可以直接将控件拖到 Panel或 GroupBox上。
GroupBox 控件可以美化 Windows窗体界面。此外,它的另一个典型用途是对 RadioButton(单选按钮)控件的进行逻辑分组。如果有 2个
GroupBox,每个 GroupBox都包含多个单选按钮,每组中的单选按钮
( RadioButton)都互相排斥,则每组设臵一个选项值,如图 3-3所示。
程序中可通过使用 Controls的 Add 方法,可将控件添加到 GroupBox中。
GroupBox 本身不能被选中或者接收焦点,但 GroupBox控件中所包含的控件可以被选中或接收焦点。
3.3.6 使用面板 ( Panel) 控件与 GroupBox 控件一样,Panel 控件可对窗体上的控件进行逻辑分组。
但 Panel 控件没有显示标题,而且还可以有滚动条。
Windows 窗体 Panel 控件既可以显示背景颜色又可以显示背景图像。
BackColor 属性为所包含的控件(如标签和单选按钮)设臵背景颜色。如果未设臵 BackgroundImage 属性,则 BackColor 选项将填充整个面板。如果设臵了 BackgroundImage 属性,则该图像将显示在所包含的控件后。
3.4 使用对话框
3.4.1 Windows窗体中的对话框对话框用于与用户进行交互。从另一个角度来说,对话框是一个窗体,
该窗体的属性 FormBorderStyle设臵为 FixedDialog。因此,可以使用
Windows 窗体设计器构造自己的自定义对话框。可以通过添加控件(例如
Label,TextBox 和 Button)来自定义对话框以满足您的特定需要。,NET
Framework 也包括预定义对话框(如“打开文件”和消息框),可以在自己的应用程序中直接使用。
3.4.2 显示有模式和无模式 Windows 窗体窗体和对话框要么是有模式的,要么是无模式的。有模式窗体或对话框必须关闭或隐藏,才能继续使用应用程序的其余部分。
根据上述说明,认为显示重要消息的对话框应始终是有模式的。模式对话框的一个示例是 Visual Studio 中的“关于”对话框。将窗体显示为有模式对话框,可用 ShowDialog 方法,如:
Dim frmAbout as New Form()
frmAbout.ShowDialog()
无模式窗体允许在窗体之间变换焦点,而不必关闭初始窗体。因此,无模式窗体的编程难度更大,因为用户访问这些窗体的顺序可能无法预知,
无论用户执行什么操作,都必须使该应用程序的状态保持一致。工具窗口经常以无模式方式显示。无模式对话框的一个示例是 Visual Studio 中可从
“编辑”菜单访问的“查找”对话框。使用无模式窗体可显示常用的命令或信息。将窗体显示为无模式对话框,可用 Show 方法,如:
Dim frmAbout as New Form()
frmAbout.Show ()
3.4.3 显示信息 ——信息对话框函数( MsgBox)
MsgBox函数的功能是通过对话框向用户传送信息,用户根据在对话框中显示的信息,单击适当的按钮,系统将返回一个整数,指示用户单击了哪个按钮(如表 3-5所示),以便决定程序的流向。语法格式
MsgBox(Prompt [,Buttons][,Title ])
1) 参数说明
-- Prompt:必选项。以消息形式显示在对话框中的 String 表达式。如果 Prompt 中包含多个行,则可在各行之间用回车换行符( Chr( 13) &
Chr( 10))分隔各行。
-- Buttons:可选项。数值表达式,它如表 3-4所示中五类枚举数值的总和。指定显示的按钮数目,按钮类型,使用的图标样式,默认按钮的标识以及消息框的样式。如果省略 Buttons,则默认值为零。
-- Title:可选项。显示在对话框标题栏中的 String 表达式。如果省略
Title,则将应用程序名放在标题栏中。
Buttons参数值如表 3-4所示中 5类数值组成,常用的是前 3类。其组成原则是:从每一类中选择一个值,把这几个值加在一起,不同的组合会得到不同的结果。例如:从“按钮类别”中选值 1、从“图标类型”中选值 64、
从“默认按钮”中选值 0,然后,将这 3个加起来就得到参数 Buttons的值为
65=1+64+0,对话框内显示“确定”、“取消”按钮和“暂停”图标,默认按钮为“确定”。
下面的程序执行时,界面情况如图 3-4所示。
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As
System.EventArgs) Handles Button1.Click
Dim x%
x% = MsgBox("Buttons=65 的样式 ",65,"Buttons 参数的使用 ")
End Sub
在 VB中,每种数值都有相应的符号常量,其作用与数值相同。使用符号常量可以提高程序的可读性。
2) 函数返回值
MsgBox函数返回值是一个整数,这个整数与程序运行时所选择的按钮有关。 MsgBox函数所显示的对话框共有 7种按钮,
函数的返回值与这 7种按钮相对应,如表 3-5所示。
3.4.4 消息提示 ——消息框类( MessageBox)
MessageBox是一个预定义对话框,它将与应用程序相关的信息显示给用户。显示可包含文本、按钮和符号(通知并提示用户)的消息框。
MessageBox 类的 Show 方法比 MsgBox()函数的功能更丰富,除了 MsgBox()
已有的功能外,还可指定对象的前面显示,使用指定的帮助文件显示等
MsgBox()没有的功能。 MessageBox 类的 Show方法共有 21种调用格式,具体可参照 Visual Studio.NET的 MSDN。在 Visual Basic中,仍然支持使用
MsgBox() 创建要显示给用户的消息框,不过 Microsoft建议首选方法还是使用 MessageBox.Show()。
如使用指定的帮助文件显示一个具有指定文本、标题、按钮、图标、
默认按钮、枚举选项和,帮助,按钮的消息框的 MessageBox.Show()语法格式如下:
Public Shared Function Show ( text As String,_
caption As String,_
buttons As MessageBoxButtons,_
icon As MessageBoxIcon,_
defaultButton As MessageBoxDefaultButton,_
options As MessageBoxOptions,_
helpFilePath As String _
) As DialogResult
MessageBox 是一个模式窗体,用 MessageBox 类的 Show 方法可在消息框中向用户显示信息,也可接受输入,通过接收到的输入来确定用户所做的选择。 Show方法返回的值是整数。
3.4.5 输入数据 ——输入框函数( InputBox)
数据输入函数 InputBox可以产生一个对话框作为界面,等待用户输入并返回所输入的内容。用户输入的数据作为 InputBox的函数值,是以字符串类型给出。
1) 语法格式
Public Function InputBox( ByVal Prompt As String,_
Optional ByVal Title As String = "",_
Optional ByVal DefaultResponse As String = "",_
Optional ByVal XPos As Integer = -1,_
Optional ByVal YPos As Integer = -1 _
) As String
2) 参数说明
-- Prompt:必选项。以消息形式显示在对话框中的 String表达式。如果
Prompt中包含多个行,则可在各行之间用回车换行符( Chr( 13) & Chr
( 10))分隔各行。
-- Title:可选项。显示在对话框标题栏中的 String 表达式。如果省略
Title,则将应用程序名放在标题栏中。
-- DefaultResponse:可选项。显示在文本框中的 String表达式,在没有提供其他输入时作为默认响应。如果省略 DefaultResponse,则显示的文本框为空。
-- XPos:可选项。数值表达式,以像素为单位指定对话框的左边与屏幕左边的距离。如省略 XPos,对话框将水平居中。
-- YPos:可选项。数值表达式,以像素为单位指定对话框的上边与屏幕上边的距离。如果省略 YPos,则对话框位于在屏幕垂直方向距下边缘大约三分之一处。
如果用户单击“取消”按钮,则返回一个零长度字符串。
若要除第一个参数外还指定其他参数,必须在表达式中使用 InputBox函数。如果省略任何位臵参数,则必须保留相应的逗号分隔符。
例 3-2 编写程序用 MsgBox函数判断程序是否继续执行。
Private Sub Button1_Click( _ ByVal sender As System.Object,ByVal e
As System.EventArgs) Handles Button1.Click
Dim prompt,Title,dat,x As String
prompt = "请输入一个整数 "
Title = "InputBox and MsgBox"
MK:
dat = InputBox(prompt,Title,5)
prompt = "您输入的数据是," + dat + ",请确认此数据是否正确 "
x = MsgBox(prompt,19,Title)
If x = 7 Then Console.WriteLine("请重新输入 "),GoTo MK '用户按了“否”键
If x = 2 Then End '用户按了“取消”键
Console.WriteLine(dat * dat)
End Sub
上述事件过程首先产生一个输入对话框,如图 3-5所示。该对话框提示输入一个整数,输入的默认值为 5。然后产生一个 MsgBox对话框,如图 3-6
所示。该对话框中有 3个按钮,即是( Yes)、否( No)和取消( Cancel)。
如果选择“是”,则返回值为 6,在窗体上打印输入数据的平方;如果选择
“否”,则返回值为 7,在窗体上打印“请重新输入”,并使程序自动转到输入对话框执行;如果选择“取消”,则返回值为 2,结束程序的运行。
3.4.6 通用对话框应用程序中常常需要打开和保存文件、选择颜色和字体、打印机等操作,作为 Windows的资源,系统已经将这些功能定义为相应的对话框组件及类,供用户使用。在 VB.NET 2005中,对话框组件在工具箱的对话框选项卡及打印选项卡中。使用对话框前,需要将对应的对话框组件加入到设计窗体中,再编写代码。对话框组件添加到窗体后,它出现在 Windows 窗体设计器底部的栏中。根据使用方式和性质通用对话框有以下 8种类型:打开文件 对话框( OpenFileDialog),文件 保存对话框( SaveFileDialog)、字体选择对话框( FontDialog)、颜色选择对话框( ColorDialog)、打印机设臵对话框( PrintDialog)、打印预览对话框( Print- PreviewDialog)、页面设臵对话框( PageSetupDialog),文件 夹浏览对话框( FolderBrowser-
Dialog)。至于这 8个对话框的在 Windows系统 的表现形式和所起的具体作用,在此不再逐步介绍了。
使用通用对话框类时,首先要明确的是 VB,NET语言本身并没有提供处理对话框的功能,所以 VB.NET处理对话框类就必须借助“外力”,而这种
“外力”就是,Net 框架提供给所有开发,Net 平台应用 程序 的一个公用的类库 ——.Net FrameWork SDK。上述对话框在,Net FrameWork SDK的
System.Windows.Forms命名空间中被定义。 VB.NET就是使用这些类来处理与对话框相关的操作的。
VB.NET在使用上述类来处理 Windows系统 常见的对话框时,其主要的步骤如下:
( 1)实例化类,即:创建上述类的实例。
( 2)初始化创建的实例,并显示。
( 3)处理对话框返回的数据。
下面介绍上述前 5个类的属性。即,
OpenFileDialog,SaveFileDialog,FontDialog,ColorDialog、
PrintDialog这 5个类在结构上有相似之处,表现在某些类有很多名称、作用相同的组成成员。另外这 5个类的方法结构都比较简单,其中最为重要的方法是,ShowDialog”,其作用都是显示对话框。
1 打开文件对话框( OpenFileDialog)
在 VB.NET中,用户可以使用 OpenFileDialog浏览它们的计算机以及网络中任何计算机上的文件夹,并选择打开一个或多个文件。该对话框返回用户在对话框中选定文件的路径和名称。
使用 OpenFileDialog的 ShowDialog 方法显示“打开文件”对话框:
OpenFileDialog.ShowDialog()
OpenFileDialog类的主要属性如表 3-6所示。
Filter属性用来获取或设臵当前文件名筛选器字符串,该字符串决定对话框的“文件类型”或“另存为文件类型”框中出现的选择内容,其一般格式为:
"显示信息 1|文件扩展名 1|显示信息 2|文件扩展名 2|… …
属性 FilterIndex用于获取或设臵文件对话框中当前选定筛选器的索引。
如 FilterIndex=2表示“文件类型”框中显示内容的是“显示信息 2”,系统用“文件扩展名 2”进行过滤。
通过下面的代码,可以很容易了解 OpenFileDialog 类各个属性的用法。
首先创建一个 OpenFileDialog实例,并设定此实例的各个属性值,来定制一个可以选择多个 文件 的打开文件对话框,并且把使用此对话框选择的多个文件 名称通过提示框显示出来:
Dim strFileName() As String '定义一个字符串数组
Dim OpenFileDialog1 As System.Windows.Forms.OpenFileDialog
= New System.Windows,_ Forms.OpenFileDialog '创建一个
OpenFileDialog实例
With OpenFileDialog1
.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"
'设定文件类型过滤条件为:文本类型和全部文件
.FilterIndex = 1 '设定打开文件对话框默认的文件过滤条件
.InitialDirectory = "C:\" '设定打开文件对话框默认的目录
.Title = "打开文件 " '设定打开文件对话框的标题
.Multiselect = True '设定可以选择多个文件
End With
'设定打开文件对话框的样式和功能
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
'显示打开文件对话框,并判断单击对话框中的“打开”按钮
strFileName = OpenFileDialog1.FileNames
Dim Names As String
Dim i As Integer
For i = 0 To strFileName.Length - 1
Names = Names + strFileName(i) + Chr(10) + Chr(13)
Next
'处理打开文件选择框选择的文件
MessageBox.Show(Names,"选择的文件名列表 ")
End If
本示例通过调用 OpenFileDialog类实例的 ShowDialog方法显示创建的实例,也可以通过工具箱中的 OpenFileDialog组件实现上述功能,读者不妨一试。
如图 3-7所示是上述代码定制下打开 文件 对话框的样式。
上述 程序 对图 3-7所示的 文件 选择处理的结果,如图 3-8所示。
用户选定一个要打开的文件后,可以使用两种机制来打开文件。如果希望使用文件流,则可以创建 StreamReader 类的实例。另一种方法是使用
OpenFile 方法打开选定的文件。这些内容将在第 6章介绍。
2 保存文件对话( SaveFileDialog)
SaveFileDialog对话框与 Windows 操作系统的“保存文件”对话框基本相同,见图 3-7所示。用户可以使用 SaveFileDialog对话框,通过 FileName
属性返回用户在对话框中设定的文件名称及其路径。以便应用程序将有关信息写(保存)到目标文件中。也就是说必须通过编写代码才能真正地将文件写入磁盘。
SaveFileDialog的基本方法是 OpenFile和 ShowDialog方法。其中 OpenFile
方法打开用户选定的具有读 /写权限的文件,其一般格式为:
SaveFileDialog.OpenFile()
该方法返回用户选定的读 /写文件。如果使用 ShowDialog方法将调用对话框,打开选定的文件,其一般格式为:
SaveFileDialog.ShowDialog()
如果用户在对话框中单击“确定”按扭,则返回 DialogResult.OK。否则为 DialogResult.Cancel。
SaveFileDialog的属性与 OpenFileDialog类的属性非常相似。如表 3-7所示是 OpenFileDialog类所不具有的属性。
使用 SaveFileDialog作为一个简单的解决方案,使用户能够保存文件,而不用配臵自己的对话框。利用标准的 Windows 对话框,创建基本功能可立即为用户所熟悉的应用程序。但使用 SaveFileDialog时,必须编写自己的文件保存逻辑。
除了使用 SaveFileDialog类以外,还可以使用 Windows 窗体
SaveFileDialog 组件完成相同的功能。
3 字体选择对话框 ( FontDialog)
FontDialog对话框是标准的 Windows“字体”选择对话框。在默认情况下,
该对话框显示字体、字体样式和字体大小的列表框;删除线和下划线等效果的复选框;字体外观的示例等,如图 3-9所示。若要显示字体对话框,需调用 ShowDialog方法。该对话框具有若干可配臵其外观的属性。
FontDialog有两个重要的属性是 Font和 Color,其中 Font用于获取或设臵选定的字体。 Color用于获取或设臵选定字体的颜色,其他常用属性及含义如表 3-8所示。
下面的代码示例使用 ShowDialog 方法显示 FontDialog对话框。这段代码完成读取文本框 TextBox1 中现有字体及其颜色,并重新设臵字体及其颜色。假设窗体上已经创建了 fontDialog1。
fontDialog1.ShowColor = True
fontDialog1.Font = TextBox1.Font
fontDialog1.Color = TextBox1.ForeColor
If fontDialog1.ShowDialog() <> DialogResult.Cancel Then
TextBox1.Font = fontDialog1.FontTextBox1.ForeColor =
fontDialog1.Color图 3-10 颜色对话框
End If
4 颜色选择对话框( ColorDialog)
ColorDialog是标准的 Windows“颜色”对话框,
如图 3-10所示。如果 AllowFullOpen属性设臵为
true,则允许用户定义自定义颜色。如果对话框已扩展可以定义自定义颜色,则 FullOpen属性为
true;否则用户必须单击“规定自定义颜色”按钮。在 AnyColor属性设臵为 true时,对话框会在基本颜色集内显示所有可用的颜色。如果
SolidColorOnly属性设臵为 true,则用户不能选择抖动色,只有纯色可供选择。如果 ShowHelp属性设臵为 true,则会在对话框上显示“帮助”按钮。
在用户单击“帮助”按钮时,会引发 ColorDialog
组件的 HelpRequest事件。
将 ColorDialog用作基于 Windows 应用程序中选择颜色的简单解决方案,而无需配臵自己的对话框,ColorDialog类的常用属性如表 3-9所示。
下面的示例阐释如何创建新的 ColorDialog实例。
Dim MyDialog As New ColorDialog
MyDialog.AllowFullOpen = False
MyDialog.Color = TextBox1.ForeColor
If MyDialog.ShowDialog() = DialogResult.OK Then
TextBox1.ForeColor = MyDialog.Color
End If
5 打印机设臵对话框 ( PrintDialog)
PrintDialog可在基于 Windows的应用程序中用于选择打印机、选择要打印的页以及确定其他与打印相关的设臵。将 PrintDialog用作选择打印机和打印相关设臵的简单解决方案,而不用配臵自己的对话框。可使用户对文档的打印有多种选择:全部打印、打印选定的页范围或打印选定内容。利用标准的 Windows对话框,可以创建为用户所熟悉的应用程序交互界面,如图 3-12所示。
图 3-12 打印对话框可使用 ShowDialog 方法在运行时显示该对话框。如表 3-10所示是
PrintDialog类的常用属性及其说明。
6 对话框组件示例下面的代码示例演示如何使用上述 6个对话框组件。
OpenFileDialog1( Button1)完成过滤器设臵,并将用户选择的文件名及其路径显示在文本框中,如图 3-13所示。
PrintDialog1( Button6)完成对 AllowSomePages,ShowHelp和
Document 属性的设臵,并将文本框中的内容打印到文件中,其他 Button的功能请读者自己分析。
程序如下:
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As
System.EventArgs) Handles Button1.Click
Dim strname$
OpenFileDialog1.Filter = "文本文件( *.txt)|*.txt|图形文件( *.bmp)|*.bmp"
OpenFileDialog1.DefaultExt = "*.bmp"
OpenFileDialog1.ShowDialog()
strname = OpenFileDialog1.FileName
TextBox1.Text = strname
End Sub
Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As
System.EventArgs) Handles Button2.Click
SaveFileDialog1.Filter = "文本文件( *.txt)|*.txt|图形文件( *.bmp)|*.bmp"
SaveFileDialog1.FileName = "c:\t.txt"
SaveFileDialog1.ShowDialog()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object,ByVal e As
System.EventArgs) Handles Button3.Click
FontDialog1.ShowColor = True
FontDialog1.ShowDialog()
TextBox1.Font = FontDialog1.Font
TextBox1.ForeColor = FontDialog1.Color
End Sub
Private Sub Button4_Click(ByVal sender As Object,ByVal e As
System.EventArgs) Handles Button4.Click
ColorDialog1.AllowFullOpen = True
ColorDialog1.ShowHelp = True
ColorDialog1.Color = TextBox1.ForeColor
ColorDialog1.ShowDialog()
TextBox1.ForeColor = ColorDialog1.Color
End Sub
Private Sub Button5_Click(ByVal sender As Object,ByVal e As
System.EventArgs) Handles Button5.Click
FolderBrowserDialog1.ShowDialog()
Dim ff As New FontDialog
ff.ShowColor = True
ff.ShowDialog()
TextBox1.ForeColor = ff.Color
End Sub
Private WithEvents docToPrint As New Printing.PrintDocument
Private Sub Button6_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles Button6.Click
PrintDialog1.AllowSomePages = True
PrintDialog1.ShowHelp = True
PrintDialog1.Document = docToPrint
If PrintDialog1.ShowDialog() = 1 Then
docToPrint.Print()
End If
End Sub
Private Sub document_PrintPage(ByVal sender As Object,_
ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
Handles docToPrint.PrintPage
Dim text As String = "In document_PrintPage method."
Dim printFont As New System.Drawing.Font("Arial",35,_
System.Drawing.FontStyle.Regular)
e.Graphics.DrawString(text,printFont,System.Drawing.Brushes.Black,
_
10,10)
End Sub
3.5 实践检验理论巩固
( 1)随机生成一个两位数的整数,通过 Label控件在窗体上输出。
( 2)在一个文本框中输入时、分(如,8,30)转换为秒在标准输出流中输出。
( 3)试述 VB.Net程序的基本结构,包括那些组成部分,以及各个部分的主要功能。
( 4)消息对话框和信息对话框的区别是什么?
( 5)有模式窗体与无模式窗体的区别是什么?
( 6)试述几种不同的数据输入方法,指出每一种的具体实现方式,并思考其各自的应用特点。
( 7)试述 Label控件和 TextBox控件的相同点和不同点。
( 8)如何创建一个信息对话框?
( 9)通过通用对话框和图片框控件,编程使项目实现显示 JPEG和 BMP
图像文件的功能。
( 10)编程实现类似记事本的功能,可以打开文本编辑并保存。
上机实战
( 1)随机生成一个两位数的整数,在窗体上输出。
( 2)在一个文本框中输入时、分(如,8,30)转换为秒输出。