网络信息安全项目教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第三章 应用程序窗体设计

复习要求

1.掌握窗体的常用属性、KeyPreview属性。

2.熟练掌握窗体的常用方法。

3.了解窗体的Line方法。

4.熟练掌握窗体的Load事件、窗体的Click事件。

5.掌握窗体的Risize事件、熟练掌握窗体的Unload事件。

6.掌握窗体的KeyDown、KeyUp和KeyPress事件。

7.掌握窗体的MouseDown、MouseUp和MouseMove事件。

8.理解窗体的Activate事件。

9.熟练掌握InputBox函数、MsgBox函数。

10.熟练掌握创建MDI窗体、设置MDI子窗体。

11.熟练掌握创建快速显示窗体。

12.熟练掌握设置应用程序启动对象。

复习内容

一、窗体的常用属性、方法、事件

窗体的属性既可在设计阶段通过属性窗口进行设置,也可在运行阶段通过代码改变窗体的部分属性,也有一些窗体属性是不能通过代码来设置的,例如,Name属性,只能在设计阶段通过属性窗口进行设置,而不能在运行阶段通过代码改变该属性的值,这类窗体属性在程序运行阶段是只读的。在属性窗口中所做的设置在大多数情况下可立即在窗体设计器中反映出来,而在代码中所做的设置只能在程序运行时才能显示设置结果。

1.Caption

用于设置显示窗体的标题。

2.BackColor

用于设置窗体的背景颜色,语法如下:

        窗体名.BackColor = 颜色值

在设计阶段,可以利用系统提供的调色板进行设置。也可以在程序运行时通过代码对该属性值进行设置。表3-1列出了常用的颜色常数。

表3-1 常用的颜色常数

3.ForeColor

用于设置窗体的前景颜色,该属性改变窗体中图形和文本的颜色。

4.FontName

用于设置窗体中显示文本所用的字体。在属性窗口中无法对该属性进行设置,可以通过 Font属性设置文本的字体、大小、样式等。

5.FontSize

用来设置窗体中显示文本所用的字体的大小。在属性窗口中,可以通过 Font属性对该属性进行设置。

6.CurrentX、CurrentY

用来设置下一次打印或绘图方法的水平或垂直坐标。这些属性在设计时是不可用的。在窗体中进行绘制图形或输出结果时,经常要使用 CurrentX 和CurrentY属性来设置或返回当前坐标的水平坐标和垂直坐标。

7.窗体的 KeyPreview属性

用来返回或设置一个值,以决定是否在控件的键盘事件之前激活窗体的键盘事件,这些键盘事件包括 KeyDown、KeyUp和KeyPress。KeyPreview属性可以在设计阶段通过属性窗口进行设置,也可以在运行阶段通过代码改变设置,语法如下:

        窗体名.KeyPreview = boolean

其中Boolean 为布尔表达式,指定如何接收事件。如果设置为 True,则窗体先接收键盘事件,然后是活动控件接收事件;如果设置为 False(默认值),则活动控件接收键盘事件,而窗体不接收。

用 KeyPreview属性可以生成窗体的键盘处理程序,例如,应用程序利用功能键时,需要在窗体级处理击键,而不是为每个可以接收击键事件的控件编写程序。

如果窗体中没有可见和有效的控件,它将自动接收所有键盘事件。

若要在窗体级处理键盘事件、而不允许控件接收键盘事件时,也可以在窗体的 KeyPress事件中设置参数KeyAscii为0,在窗体的KeyDown 事件中设置参数KeyCode为0。

需要注意的是,一些控件能够拦截键盘事件,导致窗体不能接收它们。例如,当命令按钮控件有焦点时的“Enter”键及焦点在列表框控件上时的方向键。

8.窗体的 ScaleHeight和ScaleWidth属性

窗体的 ScaleHeight和ScaleWidth属性,它们分别用来返回窗体内部的宽度和高度。这两个属性在设计时是不可用的,并且在运行时是只读的。

ScaleWidth和ScaleHeight属性给出窗体的内部尺寸,不包括边框厚度及菜单或标题等高度。而窗体的尺寸则由Width和Height属性决定。

窗体是控件的容器,控件在窗体上的坐标是用其 Top和Left属性定义的。 Width和Height属性决定了控件的宽度和高度。

二、窗体的常用方法

1.Print

用于在窗体或图片框上输出文本,语法如下:

        对象.Print 输出的内容列表

2.Cls

用于清除在程序运行时窗体或图片框中显示的文本和图形,语法如下:

        对象.Cls

3.窗体的 Line方法

窗体的 Line方法用于在窗体上画直线和矩形,语法如下:

        窗体名.Line(x1, y1) – (x2, y2), [COLOR],[B][F]

其中参数(x1,y1)是可选的,其数值类型为 Single,指定直线或矩形的起点坐标。如果省略,线起始于由CurrentX和CurrentY指示的位置。

参数(x2, y2)是必需的,其数值类型为Single,指定直线或矩形的终点坐标。

参数COLOR可选的,其数值类型为Long,画线时用的RGB 颜色。如果省略该参数,则使用ForeColor属性值。可用RGB函数或VBColor函数指定颜色。

参数B是可选的。如果包括,则利用对角坐标画出矩形。

参数F是可选的。如果使用了B选项,则F选项规定矩形以矩形边框的颜色填充。不能不用B而用F。如果不用F只用B,则矩形用当前的FillColor和FillStyle填充。FillStyle的连接值为transparent。

画连接的线时,前一条线的终点就是后一条线的起点。线的宽度取决于DrawWidth属性值。在背景上画线和矩形的方法取决于DrawMode和DrawStyle属性值。执行Line方法时, CurrentX和CurrentY属性被参数设置为终点。这个方法不能用于 With…EndWith语句块。

三、窗体的常用事件

1.Click

在用鼠标单击窗体的一个空白区或一个无效控件时发生,语法如下:

        Private Sub Form_Click()

2.Load

在窗体被载入时发生。运行程序时,会自动装载 Form1窗体,从而产生该事件,语法如下:

        Private Sub Form_Load()

通常利用 Load 事件过程来设置窗体启动时的初始属性。

3.窗体的Resize和Unload事件

(1)Resize:当窗体第一次显示或窗体的外观尺寸被改变时发生。

(2)Unload:当窗体从内存中卸载时发生。

当窗体被加载时,它的所有控件的内容均被重新初始化。当使用在控制菜单中的关闭命令、关闭按钮或Unload语句关闭该窗体时,此事件被触发。语法如下:

Private Sub Form_Unload(Cancel As Integer)

其中参数Cancel为整数,用来确定窗体是否卸载。如果Cancel为0,则窗体被卸载。将Cancel设置为任何一个非零的值可防止窗体被删除。

通过将参数Cancel设置为任何非零的值可防止窗体被删除,但不能阻止其他事件,诸如从Windows操作环境中退出等。可以用QueryUnload事件阻止从Windows中的退出。在窗体被卸载时,可以用 Unload 事件过程来确认窗体是否应被卸载或用来指定想要发生的操作。

4.窗体的 KeyPress 事件

KeyPress 事件是当用户按下和松开一个 ANSI键时发生(ANSI是可见的字符,ASCII字符1~127),语法如下:

        Private Sub Form_KeyPress(keyascii As Integer)

其中keyascii是返回一个标准数字 ANSI键代码的整数。

具有焦点的对象接收该事件。一个窗体仅在 KeyPreview属性被设置为 True时才能接收该事件。一个 KeyPress 事件可以引用任何可打印的键盘字符,一个来自标准字母表的字符或少数几个特殊字符之一的字符与 Ctrl键的组合, 以及 Enter 或 Backspace键。 KeyPress事件过程在截取击键时,可立即测试击键的有效性或在字符输入时对其进行格式处理。

5.窗体的 KeyUp和KeyDown 事件

在 KeyPress 处理不了的功能可以由KeyDown和KeyUp事件来处理,这些事件是当一个对象具有焦点时按下(KeyDown)或松开(KeyUp)一个键时发生,语法如下:

        Private Sub object_KeyDown(keycode As Integer, shift As Integer)
        Private Sub object_KeyUp(keycode As Integer, shift As Integer)

其中KeyCode是一个键代码,诸如 vbKeyF1(F1键)或 vbKeyHome(Home键);参数Shift是在该事件发生时响应 Shift、Ctrl和Alt键的状态的一个整数。Shift、Ctrl和Alt键在这些位分别对应于值 1、2和4。例如,如果 Ctrl和Alt 这两个键都被按下,则Shift的值为 6。

对于这两个事件来说,带焦点的对象都接收所有击键。一个窗体只有在不具有可视的和有效的控件时才可以获得焦点。KeyDown和KeyUp 事件可应用于大多数键,通常应用于扩展的字符键,如功能键、定位键、键盘修饰键和按键的组合、区别数字小键盘和常规数字键;在需要对按下和松开一个键都响应时,可使用 KeyDown和KeyUp事件过程。

在下列情况下,不能引用 KeyDown和KeyUp 事件:窗体有一个命令按钮控件且Default属性设置为 True时的 Enter键。窗体有一个命令按钮控件且 Cancel属性设置为True时的“Esc”键、“Tab”键。

6.窗体的 MouseDown、MouseUp 和MouseMove 事件

窗体的 MouseDown、MouseUp 两个事件是当按下(MouseDown)或者释放(MouseUp)鼠标键时发生的事件,语法如下:

        Private Sub Form_MouseDown(button As Integer, shift As Integer,x As Single,
        y As Single)
        Private Sub Form_MouseUp(button As Integer, shift As Integer, x As Single,
        y As Single)

MouseMove事件是当鼠标指针在屏幕上移动时发生的事件。 当鼠标指针处在窗体和控件的边框内时,窗体和控件均能识别 MouseMove事件,语法如下:

        Private Sub Form MouseMove(button As Integer, shift As Integer, x As Single,
        y As Single)

在上述鼠标事件过程中,参数 button 返回一个整数,用来标识该事件的产生是按下(MouseDown)或者释放(MouseUp)哪个键引起的。button参数的值可以是 1、2和4,分别对应于左键、右键及中间键。

参数Shift返回一个整数,在 button参数指定的键被按下或者被释放的情况下,该整数相对应于 Shift、Ctrl和Alt键的状态。Shift的值分别等于 1、2和4,分别代表 Shift、Ctrl和Alt键被按下,Shift参数指示这些键的状态。这些键也可以组合按下,例如,Ctrl和Alt键都被按下,则 Shift的值就是 6。

参数 x和y返回一个指定鼠标指针当前位置的数。

MouseDown和MouseUp 事件过程不同于 Click和DblClick 事件,鼠标事件被用来识别和响应各种鼠标状态,并把这些状态看做独立的事件。在按下鼠标键并释放时,Click事件只能把此过程识别为一个单一的操作——单击操作,而 MouseDown和MouseUp 事件能够区分出鼠标的左、右和中间键。也可以为使用“Shift”、“Ctrl”和“Alt”等键编写用于鼠标加键盘组合操作的代码。这是 Click和DblClick事件做不到的。

MouseDown是三种鼠标事件中最常使用的事件。例如,在运行时可用它调整控件在窗体上的位置,也可用它实现某些图形效果,按下鼠标键时就可触发此事件。

关于 MouseMove 事件。当指针移过屏幕时要调用多少次 MouseMove 事件?或者换个说法,指针由屏幕顶端移动到底端时将经过多少个位置?并不是对鼠标经过的每个像素,Visual Basic都会生成 MouseMove事件。操作环境每秒生成有限多个鼠标消息。

7.窗体的Activate 事件

当一个窗体成为活动窗口时发生窗体的 Activate事件,语法如下:

        Private 窗体名_Activate()

一个对象通过用户单击,或使用代码中的 Show、SetFocus方法等操作而变成活动的。Activate事件仅当一个对象可见时才发生。

窗体的 Load 事件和Activate 事件的区别。当程序载入(Load)一个窗体的 Visible属性为 False的窗体时不产生 Activate 事件,只有当使用 Show方法将该窗体 Visible属性设置为True时产生 Activate事件。 Load事件在 Activate事件之前发生,Load事件在看不到窗体的时候就已经发生了,一般是对窗体进行初始化,而 Activate事件是看到窗体的时候(当前窗体)才发生。

四、MsgBox函数和InputBox函数

(一)MsgBox函数

MsgBox函数在对话框中显示消息,等待用户单击按钮,并返回一个整数表明用户单击了哪一个按钮,语法如下:

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

其中参数 prompt是必需的,它是一个字符串表达式,指定显示在对话框中的消息。该参数的最大长度大约为 1024个字符,由所用字符的宽度决定。如果该参数的内容超过一行,则可以在每一行之间用回车符(Chr(13))、换行符(Chr(10))或者是回车符与换行符的组合(Chr(13) & Chr(10))将各行分隔开来。

参数 buttons是可选的,该参数为数值表达式是值的总和,指定显示按钮的数目及形式、使用的图标样式、默认按钮是什么及消息框的强制回应等。如果省略 buttons,则默认值为 0。buttons参数的设置值在表3-2中列出。

表3-2 buttons参数的设置值

参数 title是可选的,用于指定在对话框标题栏中显示的字符串表达式。如果省略title,则将应用程序名放在标题栏中。

参数 helpfile是可选的,该参数为字符串表达式,识别用来向对话框提供上下文相关帮助的帮助文件。如果提供了 helpfile,则也必须提供context。

参数 context是可选的。该参数为数值表达式,由帮助文件的作者指定给适当的帮助主题的帮助上下文编号。如果提供了 context,则也必须提供helpfile。

当提供 helpfile 与 context时,用户可以按“F1”键来查看与 context 相应的帮助主题,此时会在对话框中添加一个“帮助”按钮。MsgBox函数的返回值在表3-3中列出。

表3-3 Msgbox函数的返回值

如果对话框显示“取消”按钮,则按“Esc”键与单击“取消”按钮的效果相同。如果对话框中有“帮助”按钮,则对话框中提供上下文相关的帮助。但是,直到其他按钮中有一个被单击之前,都不会返回任何值。

如果还要指定第一个命名参数以外的参数,则必须在表达式中使用 MsgBox。为了省略某些位置参数,必须加入相应的逗号分界符。

(二)InputBox函数

InputBox函数在一个对话框中用来显示提示,等待用户输入文本或按下按钮,并返回包含文本框内容的字符串,语法如下:

        InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

其中:

参数 prompt是必需的,指定作为对话框消息出现的字符串表达式。prompt的最大长度大约是1024个字符,由所用字符的宽度决定。如果 prompt 包含多个行,则可在各行之间用回车符(Chr(13))、换行符(Chr(10))或回车换行符的组合(Chr(13) & Chr(10))来分隔。

参数 title是可选的,指定显示在对话框标题栏中的字符串表达式。如果省略 title,则把应用程序名放入标题栏中。

参数 default是可选的,指定显示文本框中的字符串表达式,在没有其他输入时作为默认值。如果省略 default,则文本框为空。

参数 xpos是可选的,该参数为数值表达式,与 ypos 一起成对出现,指定对话框的左边与屏幕左边的水平距离。如果省略 xpos,则对话框会在水平方向居中。

参数 ypos是可选的,该参数为数值表达式,与 xpos 一起成对出现,指定对话框的上边与屏幕上边的距离。如果省略 ypos,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置。

参数 helpfile是可选的,该参数为字符串表达式,识别帮助文件,用该文件为对话框提供上下文相关的帮助。如果已提供 helpfile,则也必须提供 context。

参数 context参数可选的。该参数为数值表达式, 由帮助文件的作者指定给某个帮助主题的帮助上下文编号。如果已提供 context,则也必须要提供 helpfile。

如果用户单击“确定”按钮或按回车键,则 InputBox函数返回文本框中的内容。如果用户单击“取消”按钮,则此函数返回一个长度为零的字符串("")。

如果还要指定第一个命名参数以外的参数,则必须在表达式中使用 InputBox函数。如果要省略某些位置参数,则必须加入相应的逗号分界符。

五、通用对话框控件(CommonDialog)

通用对话框(CommonDialog)控件提供一组标准的操作对话框,进行诸如打开和保存文件、设置打印选项,以及选择颜色和字体等操作。在Visual Basic 6.0中,通用对话框控件不在标准控件工具箱中,需要添加“Microsoft Common Dialog Control 6.0”部件。

使用通用对话框时,可在窗体的任何位置添加一个 CommonDialog控件,并对其进行属性设置。工程设计阶段在窗体上显示的 CommonDialog控件图标,在程序运行时不会显示。

程序运行时想要显示通用对话框,应该调用 CommonDialog控件的以下方法:

(1)ShowOpen:显示“打开”对话框。

(2)ShowSave:显示“另存为”对话框。

(3)ShowColor:显示“颜色”对话框。

(4)ShowFont:显示“字体”对话框。

(5)ShowPrinter:显示“打印”对话框。

(6)ShowHelp:显示“帮助”对话框。

(一)显示“打开”对话框

在程序运行时,通过使用通用对话框的 ShowOpen方法,可以显示“打开”对话框。需要指出的是,“打开”对话框并不能真正打开文件,而仅仅是让用户选择所要打开的文件,至于选择以后的处理,要通过编程解决。

使用“打开”对话框时,需要设置通用对话框控件的以下属性:

(1)FileName:指定在“文件名”文本框中初始显示的文件名,返回选定文件的标识符。

(2)FileTitle:关闭对话框后,返回所选择不包括路径的文件名。

(3)Filter:文件类型过滤器,用于设置对话框中的“文件类型”下拉列表框中的项目及过滤显示的文件,Filter属性值格式如下。

        描述1|过滤类型1[描述2|]过滤类型2[…]

其中描述是指在“文件类型”下拉列表框项目的内容,过滤类型是指对话框中显示的文件类型。

InitDir:指定对话框打开时的默认路径。

(二)“颜色”对话框

程序运行时,通过调用通用对话框的 ShowColor方法或设置 Action属性为3,以显示“颜色”对话框,“颜色”对话框可以让用户从调色板中选择颜色,并通过 Color属性返回用户选定的颜色值。

(三)“字体”对话框

在程序运行时,通过调用通用对话框的 ShowFont方法,可以显示“字体”对话框。“字体”对话框可以让用户设置应用程序所需要的字体。

使用“字体”对话框时,经常用到通用对话框控件的以下属性。

(1)Color:返回在对话框中选定的颜色。

(2)FontBold:返回在对话框中是否选定了粗体(True、False)。

(3)FontItalic:返回在对话框中是否选定了斜体(True、False)。

(4)FontStrikethru:返回在对话框中是否选定了下画线(True、False)

(5)FontName:返回在对话框中选定的字体名称。

(6)FontSize:返回在对话框中选定的字体大小。

六、多文档界面(MDI)应用程序

(一)MDI应用程序的特性

(1)所有子窗体均显示在 MDI窗体的工作空间内。像其他窗体一样,用户能移动子窗体和改变子窗体的大小,不过,它们被限制于这一工作空间内。

(2)当最小化一个子窗体时,它的图标将显示在 MDI窗体上而不是在任务栏中。当最小化 MDI窗体时,此 MDI窗体及其所有子窗体将由一个图标来代表。当还原 MDI窗体时,MDI窗体及其所有子窗体将按最小化之前的状态显示出来。

(3)当最大化一个子窗体时,它的标题会与 MDI窗体的标题组合在一起并显示于MDI窗体的标题栏上。

(二)MDI窗体的特有属性

(1)AutoShowChildren:通过设置该属性,子窗体可以在窗体加载时自动显示或自动隐藏。

(2)ActiveForm:该属性表示 MDI窗体中的活动子窗体。

(三)创建 MDI应用程序的步骤

(1)从“工程”菜单中选择“添加 MDI窗体”命令。

注意:一个应用程序只能有一个 MDI窗体。如果工程已经有了一个 MDI窗体,则该“工程”菜单上的“添加MDI窗体”命令就不可使用。

(2)创建应用程序的子窗体。要创建一个 MDI子窗体,先创建一个新窗体(或者打开一个存在的窗体),然后把它的 MDIChild属性设为 True。

(3)设计时使用 MDI子窗体。在设计时,子窗体不是限制在 MDI窗体区域之内。可以添加控件、设置属性、编写代码及设计子窗体功能,就像在其他 Visual Basic窗体中做的那样。

(四)快速显示窗体

快速显示窗体一般作为程序的封面使用,这种窗体一般没有命令按钮,没有标题栏。当出现快速显示窗体时,按任意键或用鼠标单击窗体,它就会被卸载并调用应用程序主窗体。

在工程中新建一个窗体,将窗体的 BorderStyle属性设置为 3,ControlBox属性设置为 False,Caption属性设置为空字符串,并在该窗体中添加一些文字和图片。此外,还必须通过设置工程属性,把快速显示窗体设置为应用程序的启动对象。