转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 常用软件 >> 正文
PowerBuilder应用开发系列讲座(16)         

PowerBuilder应用开发系列讲座(16)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:711 更新时间:2009/4/24 21:43:43
p>生成可重用的数据窗口

  许多人在学习了窗口的继承以后,就认为掌握了PowerBuilder的继承技术了。实际上,PowerBuilder中继承的作用远不止这些。这里我们介绍利用继承的方法,设计一个可重用的数据窗口祖先。

  通过本节的介绍您将看到继承技术在数据窗口上的运用,体会它在这一方面发挥出灵活性和强大功能。 据窗口的继承通过自定义用户对象的方式扩展数据窗口控件,使该控件功能更为强大。

  在本节后面的部分中,我们把数据窗口控件的用户对象祖先叫作dwa_main。也可以命名为 任何别的想要的名字。 我们曾在以前的文章中介绍过,数据窗口对象是不具有继承性的,但是我们可以利用具有 可继承特性的数据窗口用户对象来拓展PowerBuilder所提供的数据窗口的基本属性。这 里要注意的是所继承的是数据窗口控件,而不是数据窗口对象。

  为什么应该使用用户对象数据窗口,而不用PowerBuilder提供的呢?当您将一个数据窗口 控件放到窗口上时,您所做的是继承一个基于系统事先定义好的数据窗口类以此来创建一 个新的数据窗口。这意味着,给您的数据窗口增加功能方法只有一个,就是在这个数据窗 口控件的事件语句中增加代码。您不能为这个数据窗口定义您自己的函数,您也不能给这 个数据窗口增加另外的属性。如果您认为有一些常用的操作需要封装,您只能将这些加入 数据窗口所在的窗口。如果您希望两个不同的数据窗口上有相同的行为,唯一的方法就是 重写代码。这显然不是好的面向对象的编程风格。解决上述问题的方法就是定义一个数 据窗口用户对象,这非常容易做到。您只要打开用户对象绘制器,选择"新建"和"标准可视 化用户对象";然后选择数据窗口作为类型。您就可以看见一个小白框。这就是您的数据 窗口控制,您可将它以dwa_main的名字存盘。dwa_main将是您的最底层的数据窗口祖先。 现在,当您在窗口上需使用数据窗口时,您不要将PowerBuilder内部的数据窗口放到窗口 上了,而是放上您新创建的数据窗口用户对象。将这个数据窗口的名字取为dw_1。使用用 户对象来替代系统本身的数据窗口以后,您仍可以像以前那样使用数据窗口的所有函数、 属性和事件。不同的是,您现在可以在您的数据窗口祖先dwa_main中加入实例或共享的变 量、事件和函数。因为您在窗口中用到的数据窗口都继承了祖先数据窗口dwa_main,所以 所增加的一切都可以在每一个数据窗口控件中存在。 如果您认为这种方法可行,决定以后的设计都采用用户 罄刺娲鶳owerBuilder本身的数 据窗口,那么您可能还会遇到这样一个问题:如何在已编完的代码中用上这个对象。这里 我们介绍一种办法:将您的数据窗体控件的祖先对象由Datawindow改变成为dwa_main。在 library画笔中输出含有数据窗口的窗口或用户对象,修改几个引用,然后将它再输入到您 的库中。注意在做这些操作之前,先做一下备份,以备操作失误时恢复。

  在您输出的窗口或自定义的可视化用户对象中,您可以看到类似下面的代码: type dw_1 from Datawindow within w_anc我们曾在以前的文章中介绍过,这行代码的作 用是告诉PowerBuilder编译器您定义了一个从数据窗口继承下来的名为dw_1的数据窗口 ,因此只要将Datawindow改为dwa_main,就可以使dw_1继承的对象由系统内部的数据窗口 控件改为dwa_main。

  如果您打算让所有在您的机器上进行开发的其他人也使用dwa_main对象,您还可以自定义 窗口工具条,在工具条中加入一个新图标来代表数据窗口用户对象的控件。在定义工具条 的对话框中,要求填入dwa_main这一用户对象,并设置要得到的工具条文本和帮助信息。

数据窗口的构造事件

  一般情况下,如果某些代码在首次运行时执行初始化操作,应该将它们放在应用的open事 件中;如果在窗口被打开时执行初始化操作,则应将它们放在窗口的open事件中。同样,如 果想让代码在数据窗口被"打开"时执行初始化操作,应该使用数据窗口的构造事件,因为 当数据窗口创建时构造事件被激发。事实上,在窗口打开之前其上的每一个控件都会激发 自身的构造事件。假设窗口上有三个控件,它们的顺序为cb_ok、sle_1和dw_1。如果用O penSheet()函数将该窗口作为表单打开,将得到以下的事件序列:

cb_ok::constructor sle_1::constructor

dw_1::constructor

window::open

window::show

window::resize window::activate

cb_ok::getfocus

  如果您打开一个SDI窗口,您将得到以下的事件序列:

cb_ok::constructor

sle_1::constructor

dw_1::constructor

window::open

window::activate

cb_ok::getfocus

window::show

window::resize

  需要说明的是,窗体本身open事件中的初始化操作是在所有控件的构造事件被激发后才执 行的。如果用OpenSheetWithParm()或OpenWithParm()函数向窗口传递数据,那么在构造 事件中使用消息对象时就要特别小心。如果其中的任何一个构造事件修改了消息对象的 StringParm、DoubleParm或PowerObjectParm属性,open事件中使用的消息对象就不能得 到正确的信息。 我们对每一个数据窗口的构造事件编程时,总是要反复地键入: dw_1.SetTransObject(SQLCA) 事实上,我们的应用中有90%以上是使用SQLCA这个事务对象,如果我们采用用户对象的设 计方法,我们就可以把这一行代码写在用户对象之中,而不必在每次用数据窗口时都要键 入该行代码。 Event:Constructor

Object:dwa_main

SetTransObject(SQLCA)

  每一次调用这个用户对象,我们缺省的就是使用SQLCA这个事务。我们完全不必担心这样 做会出现什么问题。因为如果使用外部数据窗口,PowerBuilder是根本不会理会曾经执行 过的任何事务对象;如果使用的事务不是SQLCA,那么只需在继承后的数据窗口中,再次调 用SetTransObject()这个函数,将用到的事务对象引入,系统就会将SQLCA这个对象覆盖。


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台