第八章 界面设计 第 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