- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TAB动态创建控件
求解:在 tab 控件中如何动态生成 tabpage 中的控件
在 控件中 我已经能够动态生成 了,但生成好 后,里面是空
tab , tabpage tabpage
白,我想用代码写入一些控件,比如 datawindow,commandbutton 等控件,也就
是动态生成这些控件,不知道如何写?
有很多时候,需要在 PB 中 依据数据库中的值,或者其他一些可变值,来动态
创建控件,本文以动态生成日历这个程序,详细讲述了如何在窗口上动态创建
控件。
1 .创建一个控件,实际上就是创建一个控件类的实例,这在很多语言当中都
是很容易实现的,在 PB 中,使用以下语句创建一个数据窗口控件实例:
Datawindow ldw_cont
ldw_cont = CREATE datawindow
在我们设计窗口布局的时候,每拖一个控件到窗口上,系统会自动产生创建控
件的动作,我们在 Script 中是看不到的,如果查看窗口的源码时,在 on
w_main.create
下面可以看到很多的创建语句,所创建的类型也是在窗口源码的最上方定义的 。
当然,更多的情况可能要创建一些自定义对象,比如创建 PFC 中对象实例或者
本例
中创建的 uo_day 对象类型变量:
(位于 Declare - Global variables )
uo_day mydays[31]
创建了 uo_day 类型 mydays[] 数组变量 31 个(注意,这里并没有创建 uo_day 对
象实例,只是定义了uo_day 型数组,创建实例语句在下文),用于日历中 31
天的显示。
有创建就有销毁,销毁的语句:
Destroy ldw_cont
便销毁了 类型变量 。 对于销毁对象还是很积极的,即
Datawindow ldw_cont PB
使你
没有写这句,当 PB 的 application 结束时,也会自动销毁。(应该说既是优点,
也是缺点吧)。
2 .接下来我们看看如何把我们动态创建的控件放在指定的窗口上:
先来看看窗口函数:
windowname.OpenUserObject ( userobjectvar, userobjecttype {, x, y } )
这个函数有两个作用,一个是创建对象实例,二是将此用户实例放到本窗口指
定位置。
这个函数的四个参数意义是:
userobjectvar 指定用户类型变量。在本例中,就是 mydays[]数组。
userobjecttype 用户对象的类型。本例中,为uo_day 。
x 和 y 是显示 动态生成对象在窗口 windowname 的显示的位置,可以不要,默
认为 0 。
该函数返回 1 成功, -1 失败。
那么在本例中,动态创建日期的语句就是:
(位于 的 事件 行)
w_main Open 26
OpenUserObject(mydays[li_loop], uo_day, ll_x, ll_y)
其中我定义了 ll_x 和 ll_y 变量,是通过日期的不同,而分星期排列的不同,详
细的算法可以参看整个 for…next 范围内语句。
建立了动态的控件,我们就可以像使用一般控件一样的使用这些控件,比如
(位于 的 事件 行)
w_main Open 27,28
mydays[li_loop].text = string(li_loop)
mydays[li_loop].visible = TRUE
当然也可以通过 Destroy 语句,动态的让某个控件消失。
创建动态空间的另一个函数是:
windowname.OpenUserObjectWithParm ( userobjectvar, parameter,
userobjecttype {, x, y } )
一看便知,这个函数是可以在创建动态空间的时候传递参数,控件的
Constructor
事件可以通过 Message 对象取得这个参数。
.编程的时候经常遇到的事情是如何建立一
文档评论(0)