您现在的位置:首页 >> 网络教学 >> 界面设计 >> 内容

多重窗体设计及其实践应用

时间:2009-6-19 9:45:41 点击:2140

 多重窗体设计

简单的程序往往只包含一个窗体,这种程序称之为单窗体程序,前面所述的各例大都属于单窗体程序。在实际应用中,随着程序和用户的交互频繁,一般软件都是包含多个窗体,如资料管理系统,见图8.39

8.39  “资料管理系统”中的窗体

该系统包含至少35个以上的窗体,每个窗体都有自已的界面和程序代码,完成不同的操作,窗体之间可以相互加载,实现不同窗体数据的共享,共同构成了一软件系统。

一、多窗体的建立

多窗体指应用中有多个窗体,它们之间没有绝对的从属关系。当然,窗体之间存在着出现的先后顺序和相互调用的关系。其中每个窗体上的代码是针对该窗体自身编写的,每个窗体的建立和单一窗体程序设计中的设计方法相同,所以多窗体实际就是单一窗体的集合,只是增加了各个窗体之间的相互关系。

()添加窗体

添加窗体可以添加一个新的窗体,也可以添加一个已存在的窗体。

具体操作如下:

打开“工程”菜单并执行“添加窗体”命令或工具栏上的“添加窗体”按钮,弹出“添加窗体”对话框,见图8.40

8.40  “添加窗体”对话框

使用“新建”选项卡可以创建一个新的窗体,使用“现存”选项卡则可以添加一个现有的窗体。

除了以上方法之外,也可以通过“视图”菜单中的“工程资源管理器”把工程资源管理器窗口打开,右击工程名,打开如下图所示的快捷菜单,通过“添加窗体”命令也可以添加一个新的窗体或一个已存在的窗体。

8.41 快捷菜单

()窗体的保存

窗体的保存可执行“文件”的“保存”命令来完成。一个工程中有多个窗体,应分别取不同的文件名保存,VBP工程文件中记录了该工程的所有窗体文件名。 如下图中的“鸡.frm”、“牛.frm”等窗体文件。

8.42  工程资源管理器

同一个工程的窗体的窗体名(name属性值)是不允许重复的,如图中form1form2form3等。所以添加“现存”窗体时或保存新窗体时要防止多个窗体的name相同而不能添加。

添加现有的窗体实际是将其它工程中已有的窗体加入,实现多个工程共享窗体,但该窗体文件仍在原来的工程中,所以可通过“另存为”命令以不同的窗体文件名保存,断开共享。具体操作可以在工程资源管理器中右击该窗体文件,然后执行“另存为”命令。如图8.43所示:

8.43  “另存为”命令

(三)移除窗体

移除窗体是指将该窗体从工程中移除,解除该窗体和工程之间的关系,但并不是删除该窗体文件,该文件仍然存在于原来的位置。如需删除窗体文件,可以从windows平台用删除一般文件的方法来删除它。

移除窗体可以执行“工程”菜单中的“移除窗体”命令,也可以在资源管理器窗口中,右击需删除的窗体,执行“移除窗体”命令来完成移除。如图8.43所示。

(四)设置启动

在拥有多个窗体的程序中,要有一个用于启动的开始窗体。系统默认原窗体名称为Form1的窗体为开始窗体,如果要指定其他窗体为开始窗体,应选择“工程”菜单中的“属性”命令,在打开的对话框中通过修改“通用”选项卡的“启动对象”来实现。如图8.44所示:

8.44  设置启动对象

(五)闲置循环与DoEvents语句

Visual Basic语言具有事件驱动的特点,即某事件发生时才执行相应的程序。如果程序在运行中,没有任何事件发生,则应用程序处于“闲置”(Idle)状态。

Visaul Basic正在执行某一过程时,将停止对其他事件的处理,直至这一过程处理完毕。为了改变这种执行顺序,VB提供了闲置循环(Idle Loop)和DoEvents语句。

所谓闲置循环,就是当应用程序处于闲置状态时,用一个循环来执行其他操作。执行闲置循环时将占用全部CPU时间,不允许执行其他事件过程,当发生其它事件时,将暂停该无限循环,直到所发生的事件结束,继续处理闲置循环。

         DoEvents既可以作为语句,也可以作为函数使用,一般格式为:

   [窗体号|变量名]=DoEvents[()]

    当作为函数使用时,DoEvents返回当前装入VB应用程序工作区的窗体号,也可将该返回值赋予已定义的变量,如IDoEvents()

[8-11]在窗体上创建一命令按钮,编写如下事件过程:

  Private Sub Command1_Click()

    For i = 1 To 20000

      x = DoEvents

      For j = 1 To 1000

      Next j

      Cls

      Print i

    Next i

  End Sub

   运行上面的程序,单击命令按钮,将在窗体的左上角显示I的值。当加入了“x=DoEvents”语句后,则在程序运行中,可以执行其他的操作,如移动窗体位置、改变窗体大小等;而如果没有该语句,则除非I的值显示至”20000为止,否则不能进行其他的操作。再如下例,标签从左往右反复飞过,但在飞行过程中,依然可以去完成其它操作,即是标签从左往右反复飞过过程可以随时中断,而去响应其它事件,当其它事件完成后,继续从中断位置运行。

Private Sub Command2_Click()

Do While DoEvents()

 If Label1.Left > Form1.ScaleWidth - 10 Then

    Label1.Left = Form1.ScaleLeft

 Else

    Label1.Left = Label1.Left + 1

 End If

 Loop

End Sub

二、窗体间的交互

(一)常用语句

1Load语句

 该语句把一个窗体装入内存。执行load语句后,可以引用窗体中的控件及各种属性,同时产生一个LOAD事件,但此时窗体没有显现出来。

 格式:load 窗体名称

 其中“窗体名称”是窗体的Name属性。

如:load  form1

2Unload语句

 该语句与load语句的功能相反,它从内存中删除指定的窗体。

格式:Unload 窗体名称

如:unload form1

(二)常用方法

1show方法

该方法用来显示一个窗体,同时兼有装入功能。在执行show时,不仅会把窗体装入内存,同时会显示出来。

格式:[窗体名称]. Show[模式]

其中:

“窗体名称”指窗体的name 属性,默认是指当前窗体。

“模式”用来确定窗体的状态,有01两个值。若“模式”为1,表示窗体是“模式型”(Modal)。在这种情况下,用户无法将鼠标移到其他窗口,也就是说,只有在关闭该窗体后才能对其他窗体进行操作;若“模式”为0,表示窗体是“非模式型”(Modalless),可以对其他窗体进行操作,这种模式也是默认状态。

2hide方法:

其功能是隐藏运行的窗体,但并不是关闭了该窗体。

格式:[窗体名称].Hide

 其中,“窗体名称”是窗体的name属性,默认是指当前窗体。

3.窗体间数据共享

上述语句和方法可实现窗体间的调用,窗体间数据共享主要是通过以下方法实现。

(1)存取控件的属性,可以通过以下格式来获得别的窗体中某控件的属性值。

   格式:另一窗体名.控件名.属性

Private Sub Form_Click()

Form1.caption=form2.label1.caption

End Sub

表示在form1的标题上显示form2窗体上的label1的标题内容。

 (2)存取变量的值

   格式:另一窗体名.全局变量名

如在form1的通用声明段里有下面的声明,并在后续代码中给temp赋值25

Public  temp  as integer

   ……

Temp=25

……

form2窗体中有以下代码:

Private Sub command1_Click()

label1.caption=form1.temp

End Sub

则能实现在form2窗体中使用form1窗体中全局变量temp的值。

[8-12]编写一个能根据用户输入的出生年份,回答用户的生肖的程序。

操作步骤

(1)    新建工程并在工程中添加如图所示的14个窗体。

(2)    封面窗体(form13)的设计

程序运行的界面如图8.45所示:

8.45  程序主界面

在此窗体中有一个命令按钮,一个标签和一个文本框,它们的属性如表7-8所示。

8.25  窗体上各对象的属性设置

对象

Name

Caption

窗体

Form13

生肖

文本框

Text1

命令按钮

Command1

进入(&E)

标签

Label1

让我来告诉您的生肖

在其代码窗口里添中如下代码:

Private Sub Command1_Click()

Form14.Show

Unload Me

End Sub

Private Sub Form_Load()

Text1.Text = "鼠迹生尘案,牛羊暮下来。" & Chr(13) & Chr(10) _

     & "虎哺坐空谷,兔月向窗开。" & Chr(13) & Chr(10) _

     & "龙隰远青翠,蛇柳近徘徊。" & Chr(13) & Chr(10) _

     & "马兰方远摘,羊负始春栽。" & Chr(13) & Chr(10) _

     & "猴栗羞芳果,鸡砧引清杯。" & Chr(13) & Chr(10) _

     & "狗其怀物外,猪蠡窅悠哉。" & Chr(13) & Chr(10)

End Sub

(3)    “输入出生年”窗体(form14)的设计

程序运行的界面如图8.46所示:

8.46 “输入”界面

界面上各对象的属性如表8.26所示。

8.26  窗体上各对象的属性设置

对象

Name

Caption

窗体

Form14

输入

文本框

Text1

Text2

标签

Label1

请输入您的出生年:

Label2

请输入您的姓名

命令按钮

Command1

确定(&S)

在其代码窗口里添中如下代码:

Public xm   As String

Public csrq   As Integer

Private Sub Command1_Click()

 toyear = 1997

 birthyear = Val(Text1.Text)

 x = (toyear - birthyear) Mod 12

 xm = Text2.Text

 csrq = birthyear

    If x = 1 Or x = -11 Then

        Form7.Show

       ElseIf x = 0 Then

         Form10.Show

           ElseIf x = 11 Or x = -1 Then

             Form9.Show

              ElseIf x = 10 Or x = -2 Then

               Form8.Show

                 ElseIf x = 9 Or x = -3 Then

                   Form5.Show

                  ElseIf x = 8 Or x = -4 Then

                    Form6.Show

                      ElseIf x = 7 Or x = -5 Then

                        Form2.Show

                        ElseIf x = 6 Or x = -6 Then

                          Form3.Show

                            ElseIf x = 5 Or x = -7 Then

                              Form4.Show

                              ElseIf x = 4 Or x = -8 Then

                               Form1.Show

                                ElseIf x = 3 Or x = -9 Then

                                  Form12.Show

                                ElseIf x = 2 Or x = -10 Then

                                  Form11.Show

     End If

     Unload Me

End Sub

(4)    生肖显示窗体(form1 form12)的设计

其中form8窗体的运行界面如图8.47所示:

8.47 “属相”窗口

界面上各对象的属性如表8.27所示。

8.27  窗体上各对象的属性设置

对象

Name

Caption

picture

窗体

Form8

属相

按钮

Command1

返回(&R)

Command2

结束(&E)

标签

Label1

图片框

Picture1

App.path & \VB教材例\属相\rabbit.gif

在其代码窗口里添中如下代码:

Private Sub Command1_Click()

Form13.Show

 Form14.xm = ""

 Form14.csrq = ""

Unload Me

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Form_Load()

Label1.Caption = Form14.xm & "出生于" & Form14.csrq & "属兔!"

End Sub

作者:Admin  
相关文章
  • 没有相关文章
  • VB程序设计学习网站(赣南师范学院) © 2008 版权所有 All Rights Reserved.
  • 地址:江西省赣州市经济技术开发区 赣南师范学院数学与计算机科学学院 邮政编码:341000
    Email:ZQ188@163.com 技术支持QQ:87319633 移ICP备10086号
  • GnsySjxy! V2.4