VFP封装第三方控件,如何添加ControlSource属性?

用容器类包装第三方控件,添加ControlSource类 ,使得更规范,更符合VFP的开发方式。

思路:1 自定义属性ControlSource INIT和Refresh时取这个值进行赋值给控件.

       2 第三方控件LOSTFOUCES时,Replace 回ControlSource的字段

       3 添加自定义方法SetSize,设置各控件位置关系,在Init Resize事件分别调用,并设置好Anchor属性    

设计原则

 1 容器类添加ControlSource 并且判定其值是否有效   

Init 事件

Local otmp As Object,ctmp As StringSet Safety Offotmp="&This.ControlSource"

If Thisform.BindControls=.T.  If Vartype(This.ControlSource)<>'U' And !Empty(This.ControlSource)                  自定义赋值控件  EndifEndifthis.setsize()

Refresh事件 此事件要进行最好进行事件绑定,不采用Refresh事件,防止子控件中有更改

Local otmp as Objectotmp="&This.ControlSource"If (vartype(This.ControlSource)<>'U') AND !EMPTY(This.ControlSource)      自定义赋值控件Endif

Value事件的处理

Value_Access 返回内控件的值,注意不要改变外部容器内的Value

例子:

Value_Access

*To do: 为 Access 方法程序修改此例程Return This.text1.Value
或者修改为自己需要返回的值

Value_Assgin

LPARAMETERS vNewVal*To do: 为 Assign 方法程序修改此例程This.text1.value = m.vNewVal

改变值了,就要改变其它的值了

内容控件 InteractiveChange/LostFocus

此事件要进行改变数据源的值了

*--取出表名cAlias=LEFT(oTmp,AT(".",oTmp)-1)IF !USED(cAlias) ERROR "数据源格式不正确.eg:表名.字段名"ENDIF replace &this.controlsource with 值 in(表名)

如果控件中的内容控件不使用ControlSource 属性时,

编程修改Value 引发Value_Assgin 方法或键鼠改变操作控件的值时

要使用 replace &this.controlsource with 值 in (表名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值