第二十二讲 深入窗体 实现两个窗体间的通信 打印本页  
 
  实现两个窗体间的通信
  我们已经知道,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
  运行程序