| 第二十二讲 深入窗体 实现两个窗体间的通信 | ||||
| 实现两个窗体间的通信 我们已经知道,Windows的API为程序员提供了大量的消息,约有200多个。在这一讲,我们将通过Windows API提供的消息进行编程,在两个窗体之间传递消息,实现它们之间的通信。 与其他面向对象的编程工具相似,在PowerBuilder中,一个窗口要调用另一个窗口内的函数或者方法,修改另一个窗口的属性,以至控制另一个窗口中控件的属性,调用控件的方法、事件,都可以通过消息传递或者事件触发来实现窗口间的通信。 如果您使用过VisualFoxpro5.0(简称VF),那么你对于“Parent”这个概念一定不会陌生。在VF中,任何一个属于某一个窗口的控件,只要使用这个控件,都要带上这个窗体的名字作为前缀,表示该控件的所属。 我们在这一讲中谈到的不同两个窗口互相调用对方的控件,也要用到这个“Parent”的概念。下面,我们将通过一个例子去谈谈窗口间的互相调用。 [插入video_23] 新建一个Application应用程序对象 新建一个窗体w_main。 进入Application对象的Script画板。在Open事件中,写入以下程序: open(w_main) 进入w_main窗口界面添加控件 编写程序 在“退出”按钮的click事件中编写以下程序: close(parent) 在复选框(cbx_1)的Clicked事件中,作以下编程 点击Declare菜单的Instance Variables选项,定义一个字符串类型的变量: string iv_checked="1" 回到Script,编写程序: if this.checked then iv_checked="1" else iv_checked="0" end if 存盘 新建一个窗体w_tab。 切换到w_main窗口中,对“打开” 按钮的事件。编写程序如下: openwithparm(w_tab,iv_checked) 保存修改,运行程序 切换到w_tab窗口,添加控件: CommandButton按钮――“cb_return” 复选框按钮 Tab标签控件,并增加至三个标签 选择标签1,往上面添加一个静态文本框,更改Text为“Hello!”; 选择标签2, 往上面添加一个静态文本框,更改Text为“How are you?”; 选择标签3,往上面添加一个静态文本框,更改Text为“Thank You!”。 保存,运行程序。退出程序,回到PB。 进入w_tab窗口。在“返回” 按钮的CLICK事件中编写程序: close(parent) 打开w_tab窗口的“Open”事件。编写程序: string ls_mess ls_mess=message.stringparm if ls_mess="1" then cbx_1.checked=true else cbx_1.checked=false end if 打开窗口w_tab的Open事件,添加程序。 定义一个ue_selecttab事件,Event ID选择pbm_custom01。 回到w_tab窗口的Open事件。在所有程序前加入语句: PostEvent("ue_selecttab") 开始编写“ue_SelectTab”事件 if w_main.rb_1.checked then tab_1.selecttab(1) else if w_main.rb_2.checked then tab_1.selecttab(2) else tab_1.selecttab(3) end if end if 运行程序 |
||||