VB程序设计 第八章 界面设计 下载本文

第八章 界面设计 第 21 页 共 47 页

If UnloadMode = vbFormControlMenu Then ' 卸载来自form1的控制菜单或关闭按钮 Cancel = 1

MsgBox \必须单击窗体上的图片框才能关闭窗体form1\ End If End Sub

(3) Show方法:显示一个窗体(当窗体还没有Load,自动Load) 格式:[窗体名称].Show [模式] (缺省名称为当前窗体) 模式(Style):

0 - Modeless:(“共存模式”,也称“非模式”,“无模式)。是指每个窗体都处于平等的地位,都可以接受用户的操作。即可以对其它窗体进行操作。(缺省模式)

1 - Modal:(“排父”模式, 也称“有模式”)。窗体与窗体之间有父子关系,当“子”窗体显示时,父窗体就动不了。例如当单击“纪事本”的 “文件|打开”菜单时,出现的“打开”对话框窗体就是“排父”模式,此时用户可以处理其它应用程序,但无法编辑纪事本中的文字,只有关闭了“打开”对话框窗体才能编辑纪事本中的文字。

还有一种叫“排他模式”(System Modal)的窗体,例如,系统死机时,所出现的窗体就属于这一种,其时用户无法操作其它所有窗体。

(4) Hide方法:隐藏窗体,但没有将窗体从内存中(Unload)删除,只是将窗体

从屏幕上清除并使其Visible属性设置为False,用户无法访问窗体上的控件,但对于运行中的Visual Basic 应用程序或通过DDE与该应用程序通信的进程及Timer控件的事件,隐藏窗体的控件仍然是可用的。

格式: [窗体名称.] Hide

6.不同窗体间数据的存取 (1) 存取控件的属性

格式:另一窗体名.控件名.属性 (2) 存取变量的值

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

[例8_b1] 多重窗体示例输入和计算学习成绩。 [例8_b1] 在myvb\\vb8\\ex8_b1\\ lbc8_b1.vbp ‘模块文件

Public MATH As Single Public PHYSICS As Single Public CHEMISTRY As Single Public CHINESE As Single Public ENGLISH As Single

'主窗体文件

Private Sub cmdEnd_Click() 'frmMain输入结束按钮 End End Sub

Visual Basic6.0 第 页 共 47 页 21

第八章 界面设计 第 22 页 共 47 页

Private Sub cmdInput_Click() 'frmMain输入按钮 frmMain.Hide '隐藏主窗体

frmInput.Show '加载并显示输入窗体 End Sub

Private Sub cmdOutput_Click() 'frmMain输出按钮 frmMain.Hide

frmOutput.Show '加载并显示输出窗体 End Sub

'输入窗体文件(成绩放在该窗体的文本框中)

Private Sub cmdReturn_Click() 'frmInput窗体的返回按钮

MATH = Val(txtMath.Text)

PHYSICS = Val(txtPhysics.Text) CHEMISTRY = Val(txtChemistry.Text) CHINESE = Val(txtChinese.Text) ENGLISH = Val(txtEnglish.Text) frmInput.Hide frmMain.Show

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Cancel = True '不允许关闭输入窗体 End Sub

'输出窗体文件

Private Sub cmdReturn_Click() '输出窗体的返回按钮 frmOutput.Hide frmMain.Show End Sub

Private Sub Form_Activate() ‘也可用load事件 Dim total As Single

total = MATH + PHYSICS + CHEMISTRY + CHINESE + ENGLISH txtAverage.Text = total / 5

txtTotal.Text = total End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Cancel = True '不允许关闭输出窗体 End Sub

7.窗体数组

可以用Public ,Private,Dim,Static或Redim声明窗体数组 格式:

Public|Private|Dim|Static数组名(下标上界)As New 窗体名

Visual Basic6.0 第 页 共 47 页 22

第八章 界面设计 第 23 页 共 47 页

New 关键字表示当使用数组元素时,Visual Basic 自动以具有该窗体名的窗体为模板创建一个新窗体数组。对象数组元素,除了Name属性必须相同外,其他属性可以设

置不同的值。

(例子参见myvb\\ex8\\sjblex8_1)这个程序的窗体数组是动态的。

'主窗体(Form2)文件

Private Sub Command1_Click() '生成输入卡片 ' 以Form1窗体为模板,定义动态窗体数组 num = Form2.Text1.Text 'num为总人数

ReDim FormName(num) As New Form1 '以Form1窗体为模板,重定义窗体数组 For i% = 1 To num

FormName(i).Caption = \第\人资料\ Next i End Sub

Private Sub Command2_Click() '输入 Form2.Hide Sjinput End Sub

Private Sub Command3_Click() '统计 Dim i As Integer, ShengGao%, TiZhong%

For i = 1 To num

TiZhong = TiZhong + Val(FormName(i).Text1.Text) ShengGao = ShengGao + Val(FormName(i).Text2.Text) Next i

Text2.Text = TiZhong / num Text3.Text = ShengGao / num End Sub

Private Sub Command4_Click() ‘退出 End

End Sub

Private Sub Command5_Click() '显示每个人的资料 If total = num Then For i% = 1 To num

FormName(i).Show

FormName(i).Text1.Locked = True Next i End If

Visual Basic6.0 第 页 共 47 页 23

第八章 界面设计 第 24 页 共 47 页

End Sub

'窗体1(模板)文件

Private Sub Command1_Click() If NoDis Then Exit Sub FormName(total).Hide If total <= num Then Sjinput End If End Sub

‘模块文件

Option Explicit

Public total As Integer, num As Integer

Public FormName() As New Form1, NoDis As Boolean Public Sub Sjinput() '输入过程 total = total + 1

If total <= num Then

FormName(total).Show ‘装入一个动态窗体

FormName(total).Caption = \第\人资料\ Else

total = total - 1 NoDis = True Form2.Show End If End Sub

8.3.2 多文档界面(MDI)

多文档界面由父窗体和子窗体组成,父窗体或称MDIForm窗体作为子窗体的容器;子窗体或称文档窗体(MDIChild)显示各自的文档,所有子窗体具有相同的功能。子窗体不能隐藏。

多文档界面有如下特性:

(1)在MDIForm窗体中一般有菜单栏,工具栏、状态栏,它只可以加载标准控件中的picture、timer、 data三个控件。所有子窗体均显示在MDI窗体的工作区中。用户可以改变子窗体的大小、移动子窗体,但被限制在MDI窗体中。子窗体可以加载任何控件。

(2)当最小化子窗体时,子窗体的图标显示在MDI窗体上而不是显示在任务栏中,当最小化MDI窗体时,所有的子窗体也被最小化,只有MDI窗体的图标出现在任务栏中。

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

Visual Basic6.0 第 页 共 47 页 24