VB的用户界面设计(4)
维护子窗体的状态信息
在用户决定退出 MDI 应用程序时,必须有保存信息的机会。为了使其能够进行,应用程序必须随时都能确定自上次保存以来子窗体中的数据是否有改变。
通过在每个子窗体中声明一个公用变量来实现此功能。例如,可以在子窗体的声明部分声明一个变量:
Public boolDirty As Boolean
Text1 中的文本每改变一次时,子窗体文本框的 Change 事件就会将boolDirty 设置为 True。可添加此代码以指示自上次保存以来 Text1 的内容已经改变。
Private Sub Text1_Change ()
boolDirty = True
End Sub
反之,用户每次保存子窗体的内容时,文本框的 Change 事件就将 boolDirty设置为 False,以指示 Text1 的内容不再需要保存。在下列代码中,假设有一个叫做“保存”(mnuFileSave) 的菜单命令和一个用来保存文本框内容的名为 FileSave 的过程:
Sub mnuFileSave_Click ()
'保存 Text1 的内容。
FileSave
'设置状态变量。
boolDirty = False
End Sub
用 QueryUnload 卸载 MDI 窗体
当用户决定退出应用程序时,boolDirty 标志就很有用了。当用户从 MDI 窗体的“控制”菜单中选取“关闭”,或者从提供的菜单项,例如“文件”菜单上的“退出”命令,上述情况就会出现。如果用户使用 MDI 窗体的“控制”菜单来关闭应用程序,Visual Basic 将试图卸载 MDI 窗体。
当 MDI 窗体被卸载时,QueryUnload 事件首先为 MDI 窗体调用,然后再为每一个打开的子窗体调用。如果在这些 QueryUnload 事件过程中没有代码,则取消 Unload 事件,然后,每一个子窗体被卸载,最后,MDI 窗体被卸载。
由于 QueryUnload 事件在窗体卸载之前被调用,因此在窗体卸载前可以给用户一个机会来保存窗体。下述代码使用 boolDirty 标志来决定是否要提醒用户在子窗体卸载之前进行保存。请注意,可以在工程的任何地方访问公共窗体级变量值。这个代码假定有一个名叫 FileSave 的过程,它将 Text1的内容保存到一个文件中。
Private Sub mnuFExit_Click()
'当用户在 MDI 应用程序中选取“文件提出”命令时,卸载
'MDI 窗体,为每个打开的子窗体调用 QueryUnload 事件。
Unload frmMDI
End
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, _
UnloadMode As Integer)
If boolDirty Then
'调用例程来询问用户且必要时保存文件。
FileSave
End If
End Sub