联系我们
设为首页
收藏本站

   首 页  文章教程  下载中心  VB网络教学
http://course.tjau.edu.cn/vb

第7章 窗体设计 

作者:    来源:    阅读次数:3274



从第七章开始我们将进入窗体程序设计的领域。用VB创建一个应用程序的第一步就是创建一个用户界面,我们在使用WINDOWS应用程序时在屏幕显示的一个个的窗口就是一个个的窗体。
在窗体上可以根据自己的需求放置工具箱上的控件,以便实现程序的不同功能。不同的功能是靠各个事件所触发的程序代码完成的。下面分别介绍窗体的主要属性和主要事件。
7.1窗体设计
7.1.1窗体的主要属性
1.Name 名称属性
此属性是所有对象都具有的属性,是创建窗体对象的名称。创建窗体时由VB提供一个默认的名称,一般是form(数字),如form1,form2 等。Name的名称可以在属性窗口的“名称”栏中修改。名称作为一个窗体的标识在程序中被引用,而不是为了显示。见图7_1。
图7_1 窗体的名称


 

2.Caption标题属性
这是一个字符串,在窗体的标题上显示。
3.Height、Width、Top、Left属性
所有的控件都有这几个特性。Height和Width决定了窗体的高度和宽度,Top和Left属性决定了窗体在另一窗口中的位置。Top和Left所指定的位置是一个相对位置,对于窗体,Top表示到屏幕顶部的距离,Left表示窗体到屏幕左边的距离。见图7-1。
图7_2
 
 
4.Moveable属性
这个属性是一个Boolean类型的属性,它决定一个窗体是否可以被移动,当Moveable为False时,按下运行按扭时,鼠标不能拖动这个窗口,反之可以。
5.Enable属性
Enable属性也是一个Boolean类型的属性,它决定一个控件是否对用户的操作产生响应的事件。当这个属性在窗体上使用,将Enable设置为False 的窗体中,所有的事件都不会发生。
6.Visible属性
Visible同样是Boolean类型的属性,它决定了一个控件是否可以让用户看得见。它有两个值:
True:程序运行时窗体可见。
False:程序运行时窗体隐藏起来,但窗体实际还在,只是用户看不见。
7.Picture属性
通过Picture属性可设置窗体的背景。在属性列表中单击Picture设置框右边的图形加入。见图7_3。图片格式:*.tjf、*.jpg、*.gif、*.ico、*.cur等。也可在编写程序时通过
load picture()加入 图形文件。
         图7_3 窗体背景


 

8.Icon属性
通过Icon属性,可以改变窗体标题栏上的图标。在属性窗口找到Icon属性,改变方法同Picture属性设置一样。图片格式文件:*.ico、*.cur。
9.Borderstyle,Controlbox,Minbutton,Maxbutton
这几个属性决定窗体的外观样式。
Borderstyle 用于设置窗体的样式。属性值如表7_1所示。
 
                      表7_1

常量名称
说明
VbBSNone
0
没有外框的窗口,在windows任务栏不显示。
VbFixedSingle
1
大小固定,可移动,单线边框。
VbSizable
2
窗体为双线边框,可移动,可改变大小,是默认值。
VbFixedDouble
3
窗体大小固定,在windows任务栏不显示。
VbFixedToolWindow
4
窗体外观与工具条相似,有关闭按扭,在windows不显示。
VbsizableToolwindows
5
窗体外观与工具条相似,有关闭按扭,窗口大小可变动,在windows的任务栏中不显示。

ControlBox设为 False,窗体右上角的最大、最小、关闭三个按扭都消失。而MinButton 和MaxButton分别是决定最小和最大按扭是否显示出来。
7.1.2窗体的主要事件
窗体的事件很多,主要介绍窗体的load, click事件。
1.Load, unload窗体的开始和结束。
Load 是一个窗体最初所触发的事件,load 事件是在窗体被装入工作区时触发的事件。当应用程序启动时,自动执行该事件,程序代码:
Private Sub Form_load()
……
End Sub
Unload事件是在主要窗口被用户关闭时,结束整个程序运行所触发的事件,程序代码:
Private Sub Form_unload()
End      ‘ 强制程序结束,关闭窗口
End sub
2.Onclick, OnDblClick鼠标的单击和双击
我们在窗体中常常做的是单击鼠标按扭或双击鼠标按扭。在Windows系统中主要是这两个动作。
例7.1实现的功能,首先在窗体 Form1中放置一个标签控件,当在窗体中单击鼠标时标签标题改变为“鼠标按了一下”,当双击鼠标时出现一个消息框。程序代码如下,运行结果如图7_4
Private Sub Form_Click()
Label1.Caption = "鼠标按了一下"
End Sub
Private Sub Form_dblclick()
MsgBox "再按一下鼠标"
 
End Sub
  
 
图7­_4窗体的onclick on dblclick鼠标事件
 
3.MouseMove鼠标的移动
鼠标的移动,即在窗体移动鼠标,就会触发此事件,如在绘图工具软件,按下鼠标可画图。事件的语法:
Mousemove(Button as integer , shift as integer, x as sigle, y as single)
X,Y是鼠标当前的坐标位置。
Button:鼠标按键的状态。
Shift:表示键盘上“CTRL,ALT,SHIFT ”三个按键状态。
Buttont和shift使用常量表见7_2, 表7_3。
                        表7_2

常量名称
含义
VbLeftButton
1
按住左按扭
VbRightButton
2
按住右按扭
VbMiddleButton
4
按住中间的按扭

 
表7_3

常量名称
含义
VbShiftMask
1
按住SHIFT不放
VbCtrlMask
2
按住CTRL不放
VbAltMask
4
按住ALT不放

 
如果同时按下鼠标左键和SHIFT键,得到整数2,由表7-2和7-3可知。
 
用以下程序代码可取得按键的状态。只要有键按下,则LeftDown,RightDown,MiddleDown当中的值就会有等于TRUE,否则为FALSE。
例7-2.实现的功能,在窗体Form1中放置标签label,当按下鼠标左键时,标签的标题变为“鼠键左键按下”程序代码:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 
Dim leftdown As Boolean
Dim rightdown As Boolean
Dim middledown As Boolean
leftdown = (Button And vbLeftButton) > 0
righdown = (Button And vbRightButton) > 0
middledown = (Button And vbmiddledown) > 0
If leftdown Then
Label1.Caption = "鼠键左键按下"
End If
End Sub
程序运行结果如图7_5 窗体移动鼠标事件
 
图7_5窗体移动鼠标事件
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
当然鼠标右键及其它的键按下也可发生其它事件。
3.Mousedown, Mouseup鼠标按扭的按下和放开这两个事件,是鼠标按下和放下时所发生的事件。语法如下:
Private Sub form_mousedown(button As Integer, shift As Integer, x As Single, y As Single)
End Sub
Private Sub form_mouseup(button As Integer, shift As Integer, x As Single, y As Single)
End Sub
这两事件的参数一致。
4.Resize窗体大小可改变事件
当窗体大小改变时会造成控件放置的不协调,窗体的Resize事件发生就是为了维持窗体中各个控件的对应位置。
程序代码:
Private Sub form_resize()
 
On Error Resume Next
Text1.left = 0
Text1.Top = 0
Text1.Width = Form1.ScaleWidth
Text1.Height = Form1.ScaleHeight
End Sub
以上程序代码实现的功能,当窗体变大或变小时,文本框随着变大或变小。
5.Keypress,Keydown,Keyup事件
Keypress的语法:
Keypress(Keyascii,as Integer)
Keypress指的是在键盘按键时,Keypress可取得所按键字符ASCII码的值。如ESC为27,回车键13,空格32,A—Z是65-90,a—z是97-122等。
Keypress,Keyup 同Mousedown,Mouseup事件,语法:
  Keydown(Keycode as integer, shift as integer)
Keyup(Keycode as integer, shift as integer)
Keycode表示在键盘上按键的位置。如A 和a是一样的,而数字键上的数字1和在键盘上方的数字1的keycode就不一样。
一些常用键的常量名称和值见表7-4,表7-5,表7-6。
 

  表7-4
按键
常用名称
BackSpace
vbKeyBack
8
TAB
vbKeyTab
9
ENTER
VbkeyReturn
13
PAUSE
vbKeyPause
19
ESC
VbkeyEscape
27
空格键
vbKeySpace
22

 

表7-5
 
按键
常用名称
PageUP
vbKeypageUP
33
PageDOWN
VbKeyPageDown
34
End
VbkeyEnd
35
home
vbKeyHome
36

 
 

表7-6
按键
常量名称
vbKeyLeft
37
vbKeyUP
38
vbKeyRight
39
VbKeyDown
40
Insert
VbKeyInser
45
Delete
VbKeyDelete
46
0
VbKey0
48
右方数字键盘0
VbkeyNumpad0
96
F1
VbKeyF1
112

6.焦点
如果存在许多对象,鼠标按下的时候只有一个对象响应,即哪个控件响应,哪个控件拥有焦点。简单讲,光标停在哪,焦点就在哪。另外通过TAB键可改变焦点所在位置。
7.KeyPreview属性
当在具有多个控件的窗体上,按下键盘时,响应的不一定是窗体,哪个控件拥有焦点,哪个控件就响应。如果将窗体的 KeyPriview属性值设为TRUE,那么键盘事件一定在窗体上引发。
7.2多重窗体
多重窗体是在一个应用程序中有多个窗体存在,每个窗体拥有自己的界面和功能程序代码。
7.2.1多重窗体的管理
1.窗体的显示和隐藏SHOW和HIDE
显示窗体     窗体名称.SHOW   [STYLE]
隐藏窗体     窗体名称.HIDE
Style默认值是0,  当为1 时,必须显示此窗体。如果在Form1窗体中,显示Form2利用Form2.show 1,即显示Form2。
当一个窗体HIDE时,其实等于此窗体属性 Visible为False但窗体还在,与窗体相关的实例还在。
2.添加窗体和删除窗体
添加窗体有两种方法,一是可通过“工程”菜单上的“添加窗体”命令或工具条上添加窗体按扭来打开“添加窗体”对话框,选择“新建”选项卡一个窗体或选择“现存”选项卡把一个属于其他工程的窗体添加到当前工程中,每一个窗体都有一个独立的FRM文件保存。但是,添加一个已有窗体到当前工程时一定不能同此工程内窗体重名,另外添加进来的窗体实际上多个工程共享,所以对此窗体的修改要慎重;二是在程序代码中添加窗体,语法如下:
LOAD 窗体(类)名称
在程序代码中删除窗体语法:
UNLOAD 窗体(类)名称
拥有多个窗体的程序中,要有一个开始窗体。系统默认窗体名为Form1为开始窗体,如要指定其他窗体为开始窗体,应用“工程”菜单属性命令。
7.2.2设置启动窗体
  图7_7 设置启动窗体
一个应用程序如果有多个窗体,它们是并列的。程序运行过程中,首先执行的被称为启动窗体。默认方式下,第一个创建的窗体被指定为启动窗体。如果要改变启动窗体,选择工程菜单——选属性,打开如图7_7,在启动对象下面选择要改为启动的窗体。
 
 
 
 
 
 
 
 
 
 
 
 
启动对象即可以是窗体也可以是Main子过程。
7.2.3窗体处理
此部分以实例为主。
例7_3 输入学生姓名和家庭住址,并显示出来。
图7_8
图7_8工程资源管理器窗口
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a 图7_8主窗体
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
         b 图7_8 输入信息窗体
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c 图7_8显示信息窗体
 
 
 
 
 
 
 
 
 
 
 
 
 
 
此例有三个窗体Form1(a图),Form2(b图),Form3(c图),各窗体如上图。
Form1如图b 是主窗体,上面有2个命令按扭,单击Command1按扭,触发Command1_clike事件,显示Form2,单击Command2按扭触发 Command2_clike 事件,显示Form2。
Form2窗体如 b图,有2个文本框( text1,text2)用于输入姓名和地址,还一个返回按扭。
Form3窗体,如图d ,这是选择了Form1显示按扭弹出窗体。该窗体显示在Form2中输入的同学信息。
实现上述功能的程序代码如下:‘这是Form3,显示输入同学的信息。
 
例7_3:
Private Sub Form_Activate()
Text1.Text = mesg1 & "的" & mesg2
End Sub
 
-----
 
Public mesg1 As String, mesg2 As String
 
 
-------
Private Sub Command1_Click()    ‘ 这是Form2的 Command1(返回) 按扭的事件。
 
mesg1 = Text1.Text
mesg2 = Text2.Text
Form2.Hide
Form1.Show
End Sub
-----------
Private Sub Command1_Click() ‘ 这是Form1的 Command1(输入信息)按扭的事件。
Form1.Hide
Form2.Show
End Sub
------------
Private Sub Command2_Click() ‘ 这是Form1的 Command2(显示信息)按扭的事件。
Form1.Hide
Form3.Show
End Sub
 
 
 
7.3用向导生成窗体
我们在使用办公软件时发现许多应用程序功能不同,但界面相同,即都有菜单,工具栏等。为了提高开发效率,VB提供了“VB应用程序向导”,这是一个程序生成器,用来生成程序的界面。
打开VB应用程序,选择文件—工程—应用程序向导,见图7_9。在向导的提示下设计应用程序的操作界面。
图7_9VB应用程序向导
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7.3.1选择操作界面
一般提供三种操作界面, 见图7_10。这三种操用界面分别是:
1.“多文档界面”,同时打开文档,如WORD应用程序。
2.“单文档界面”,只打开一个文档,如写字板编辑器。
3.“资源管理器样式“,类似于WINDOWS资源管理器。
7.3.2选择菜单和子菜单项
见图7_11。应用程序提供了文件、编辑、视图、工具、窗口和帮助六个菜单名,每个菜单名有若干个子菜单项,用户可选择或取消菜单和菜单项。
7.3.3 选择工具栏按扭
应用程序向导提供的工具栏有13个按扭见图7_12。用户可增加或减少工具按扭。
7.3.4生成WWW浏览器
在“internet”连接对话框中,应用程序还提供是否访问internet选项。若选择可生成一个WWW浏览器。
用向导生成窗体主要节省了用户设计界面的工作量,但实际设计过程中,要根据实际问题加以改进和完善。
图7_10选择应用程序操作界面
 
图7_11选择菜单和子菜单项
 
图7_12选择工具栏按扭
7.4多文档界面
多文档界面由主窗口和子窗口组成,主窗口称MDI窗口,如在WORD应用程序下可打开多个文档,这多个文档就是子窗口,且功能相同。
7.4.1MDI应用程序的特点
1.所有子窗口或文档界面都在MDI窗口的工作区中。在MDI窗口内可改变子窗口的大小,可移动子窗口。
2.当MDI最小化时所有子窗口都最小化。当子窗体最小化时图标在MDI窗体而不是在任务栏。
3.当最大化一个子窗口时,它的标题与MDI窗体的标题一起显示在MDI标题栏,如WORD某一个文档最大化时,就是这样。
4.MDI窗体和子窗体都可以有各自的菜单,当子窗体加载时覆盖MDI窗体的菜单。就如在WORD中打开多个文档。见图7_ 13
图7_13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7.4.2MDI窗体及子窗体的创建
开发多文档界面的一个应用程序至少有两个窗体:一个MDI窗体(仅有一)和一个或多个子窗体。在不同窗体中共用的过程、变量应放在标准模块中。
1.创建MDI窗体和子窗体
        (1)创建MDI窗体
        创建一个MDI窗体可选择“工程”菜单中的“添加MDI窗体”命令。如图7_14
说明:Form1是普通窗体
Form2mdichild 是子窗体
MDIform1是MDI窗体
图7_ 14  三种形式的窗体
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
MDI窗体是子窗体的容器,MDI窗体中有菜单栏,工具栏,但不能有文本框。见
图7_13。
(2)创建子窗体
子窗体是显示应用程序的文档,因此,在该窗体应有文本框,也有菜单栏。
MDI子窗体的创建如同一个普通窗体创建一样,只是窗体MDIChild属性值为TRUE。在工程管理器中子窗体和主窗体图标不同,见图7_14。多个子窗体建立重复上述步骤。
在程序中建立多个子窗体的实现方法, 已知MDI窗体名为FrmMDI和一个子窗体名为FRMMDIChild, 已经在窗体上创建,要建立两个同FRMMDI一样的子窗体,程序代码如下:
Public Sub filenewproc()
Dim newdoc As New frmmdichild
Static num As Integer
num = nuw + 1
newdoc.Caption = "num" & num
newdoc.Show
End Sub
7.4.3MDI窗体的菜单和工具条
此部分参见第九章的9.2.1菜单编辑器和9.2工具栏设计。
 
复习与思考题:
1. VB窗体设计器的主要功能是( )。
A) 显示文字
     B) 建立用户界面
     C) 编写源程序代码
     D) 画图
 
2. 以下叙述中正确的是( )。
A) 对象的Name属性值可以为空
      B) 可以在程序运行期间改变对象的Name属性值
      C) 窗体的Name属性值是显示在窗体标题栏中的字符串
      D) 窗体的Name属性用来标识和引用窗体
 
3. 改变显示在窗体标题栏中的标题使用的属性是()。
A) (名称)
      B) FontName
     C) Caption
     D) Text
 
4. 设有如下窗体事件
        Option Base 0
        Private Sub Form_Click()
          Dim a
          Dim i As Integer
          a=Array(1,2,3,4,5,6,7,8,9)
          For i=0 To 3
            Print a(5-i);
          Next
        End Sub
     程序运行后,单击窗体,则在窗体内显示的结果是( )。
A) 5 4 3 2
      B) 6 5 4 3
      C) 4 3 2 1
      D) 7 6 5 4
 
5. 对窗体编写如下事件过程。程序运行后,在窗体上单击鼠标右键,则输出结果为( )。
     Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
       Print "AA";
     End Sub
     Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
       If Button = 1 Then  Print "BB";
     End Sub
A) BBAA
      B) AABB
      C) AA
      D) BB
 
6. 以下叙述中错误的是( )。
A) 窗体的Show方法的作用是将指定的窗体装入内存并显示该窗体。
      B) 窗体的Hide方法和Unload方法的作用完全相同。
      C) 若工程文件中有多个窗体,可以根据需要指定一个窗体为启动窗体。
      D) 使Print方法在窗体上失效的窗体事件是Load。
 
7. 下列语句中,能够暂时隐藏窗体Form1,但不释放它所占用的内存空间的是( )。
A) Unload Form1
      B) Form1.Unload
      C) Hide Form1
      D) Form1.Hide
 
8.下列语句中,能够加载并显示窗体Form1的是( ))。
A) load Form1
      B) Form1.load
      C) show Form1
      D) Form1.show
 
9. 下面的程序运行后,若从键盘输入-1,则输出结果为( )。
         Private Sub form_Click()
           xcase = 1
           t = InputBox("请输入一个数:")
           Select Case t
             Case Is > 0
               y = xcase + 1
             Case Is = 0
               y = xcase + 2
             Case Else
               y = xcase + 3
           End Select
           Print xcase; y
         End Sub
A) 1  4
      B) 1  3
      C) 1  2
      D) 1  1
 
 10. 以下叙述中错误的是( )。
A) 在KeyUp和KeyDown事件过程中,从键盘上输入A或a被视为相同的KeyCode码
      B) 在KeyUp和KeyDown事件过程中,将键盘上的“1”和右侧小键盘上的“1”视为不同的KeyCode码
      C) KeyPress事件不能识别某个键的按下与释放
      D) KeyPress事件可以识别某个键的按下与释放

   相关内容

版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的网友原创作品,如需使用,请与原作者联系,版权归原作者所有。

暂无广告!!!
友情连接:  深度空间   Macromedia   DW学习 
  | 课程描述 | 主讲教师 | 教师队伍 | 教学大纲 | 教改研究 | 特色规划 | 教学资源 | 教学录像 | 联系我们 |
Copyright© 2005-2008 天津农学院计算机系版权所有    程序开发: 网络信息中心   站长: 计算机系 站点管理