紫金桥软件 “模态窗口”

供稿:紫金桥软件技术有限公司

关键字:紫金桥,软件,模态窗口

产品简介:
在制作一些设置画面时,希望使用者在打开该画面时不能对其他画面进行操作,只有关闭该画面后才允许进行其他操作。此种情况便需应用本文所讲述模态窗口来解决。

产品介绍

模态窗口

    窗口分为模态窗口和非模态窗口。

    模态窗口的特性我们经常用到的MsgBox()和MsgBoxEx()函数所弹出的对话框就类似于模态窗口。:当一个模态窗口显示在最前端时,如果用户想要对该窗口以外的程序部分进行操作时,必须首先对该窗口进行响应。如单击【确定】或【取消】按钮或者直接关闭该画面。

    非模态对话框的特性为:当一个非模态窗口显示在最前端时,它并不限制用户的操作对象。如果同时打开多个非模态窗口,那么用户可随意操作这些窗口中的任意窗口,而不必事先关闭前端窗口。

    有些情况下我们必须使用模态窗口才能解决一些问题。例如,我们在制作一些设置画面时,我们希望使用者在打开该画面时不能对其他画面进行操作,只有关闭该画面后才允许进行其他操作。此种情况只能用模态窗口来解决了。

模态窗口的使用

    模态窗口的打开与关闭是通过两个函数来实现的:

    #窗口名.DoModal();//以模态方式打开窗口

    #窗口名.EndModal(int Expr);//结束模态窗口

    例如:在非模态窗口window中的一处脚本中执行#ModalWindow.DoModal()语句,则窗口ModalWindow会以模态方式打开,此时窗口window在窗口ModalWindow调用EndModal(int Expr)函数或被关闭之前会一直处于暂停状态,不响应用户的任何操作。用户仅能在模态窗口ModalWindow上进行操作,操作完成后可以使用#ModalWindow.EndModal(int Expr)语句来结束当前模态窗口(该窗口将会隐藏,但并不关闭),其中参数Expr(由用户控制,不限制其取值范围)将传递给DoModal()函数作为其返回值,接续执行下面的脚本。用户可以根据这个Domodal的返回值来确定模态窗口的操作结果。

    下图为模态窗口使用示意图:

应用进阶

   通常情况下,我们可以使用模态窗口的EndModal(int Expr)函数中的参数Expr来指定该窗口结束时的返回值。正如上图所示,我们可以通过Expr得知用户点击的是下一步确定亦或是取消按钮。但有些时候,仅仅得到这些信息是不够的。例如,我们需要得知在点击下一步或者“确定”按钮后用户具体选择了窗口ModalWindow中的哪些选项。

    这时,我们需要使用其他方式在窗口间传递更多的信息。可以选择的方式有很多,比如使用全局变量、使用全局自定义函数或者使用窗口元素的外部引用功能等。但是,使用全局变量或全局自定义函数将增加工程的耦合型,降低工程的可移植性。较为妥当的方式是使用窗口元素的外部引用功能,即窗口间通讯。

    我们可以在打开模态窗口前就进行相应的信息传递,利用窗口变量作为传递和保存信息的载体。前面说过,当一个模态窗口结束时并不意味着该窗口被关闭,其实它只是被隐藏在后台,这时我们仍然可以访问该模态窗口中的元素。也就是说,在模态窗口结束时,它可以主动向当前窗口反馈相关的信息,或者当前窗口直接读取刚结束的模态窗口相关信息。

注:有关窗口元素的外部引用功能,读者可以参考联机帮助中的相关说明。

发布时间:2012年4月28日 9:23 人气:  
更多详细请访问:紫金桥软件技术有限公司

我有需求