在应用中,有可能要对查询到的数据进行对照比较,这时需要同时打开多个窗口;
在MDI应用中,打开多个相同的窗口是经常遇到的,例如,同时打开多个编辑窗口
编辑多个文件。打开多个相同窗口,是否可以多次使用Open语句来解决这个问题
呢?不行,该语句只能激活已经打开的窗口,而不会重新打开一个窗口。只能通过
创建实例来解决这个问题。
在Window画板中创建了一个窗口后,就相当于创建了一种数据类型,该数据类型的
名称等于该窗口的名称。可以使用这个数据类型来定义多个变量,这些变量可以使
用Open语句打开,这些打开的窗口就是在Window画板中创建的窗口实例。实际上,
在使用Open语句打开一个窗口时,引用的通常是和窗口同名的全局变量。在程序运
行时,程序首先声明一个和在Window画板中创建的窗口同名的全局变量,该变量的
名字和在Window窗口中创建的窗口的名字是相同的。
比如,在Window画板中创建一个名称为w_edit的窗口。在程序运行时,应用程序首
先使用下面格式的语句定义一个名称为w_edit而类型为w_edit的全局变量:
w_edit w_edit
语句Open(w_edit)实际上是引用的全局变量w_edit。该语句重复执行只能激活已经
打开的w_edit窗口,而不能打开多个窗口。要打开多个和w_edit相同的窗口,可以
创建实例,如下所示:
w_edit lws_edit
Open(lws_edit)
执行上面的语句会打开和w_edit完全相同的一个窗口。如果该脚本在某按键的
Clicked事件中,多次点击该按键就会打开多个完全相同的实例窗口。
如果希望一次打开更多的实例窗口,可以使用数组。例如,打开多个和w_edit
相同的窗口,可以使用如下语句:
w_edit lws_edit[3]
Int li_index
For li_index =1 To 3
Open(lws_edit[li_index])
Next
注意:在同一个事件中对一个窗口实例变量重复执行Open语句也只能打开一个实例。
例如,下面的一段脚本只能打开一个实例窗口:
w_edit lws_edit
Int li_index
For li_index = 1 To 3
Open(lws_edit)
Next
还可以使用如下的语句打开实例窗口:
window lws_edit[3]
string ls_win = "w_main"
Int li_index
For li_index = 1 To 3
Open(lws_edit[li_index],ls_win)
Next
这种方式的执行效果和前述定义数组一次打开多个实例是完全相同的,但是用这种
方法控制更方便,可以临时修改String类型的变量来打开其他的实例,尤其是在通
用性的函数中使用这种方式时,可以让ls_win接受传递入的String类型参数来决定
打开哪个窗口实例。
上面介绍了一种打开一个实例变量的方式和两种打开多个实例的方法。打开实
例窗口后就应该能够使用该窗口,如何引用打开的实例呢?
打开一个实例时,可以直接使用实例变量的名字引用实例窗口。例如,实例窗
口打开后修改其标题,可以使用下面的语句:
w_edit lws_edit
Open(lws_edit)
Lws_edit.title = "测试"
打开多个实例时,也可以用同样的方法引用实例窗口。例如,下面在打开多个窗口
实例的同时给每个实例设置标题:
w_main lws_edit[3]
Int li_index
For li_index =1 To 3
Open(lws_edit[li_index])
lws_edit[li_index].Title = "第" +String(li_index) + "个实例窗口"
Next
当用另外一种方式打开多个实例时,也可以用同样的方法引用实例变量。例如:
window lws_edit[3]
String ls_win="w_main"
Int li_index
For li_index =1 To 3
Open(lws_edit[li_index],ls_win)
lws_edit[li_index].Title = "第" + String(li_index) + "个实例窗口"
Next