pb dw中checkbox控件在点选后马上取消勾选的方法

需求:pb dw中的checkbox列在点击选择时,判断之前某列的值,如不满足条件,则取消勾选。

使用过的方法及解释:

1、在itemchanged事件中写 dw.objext.cbx[row] = 0. 不能达到要求。虽然itemchanged事件中的data变成了0.但是dw行中的checkbox的勾选状态并未被取消。

2、在itemchanged事件中写dw.setitme(row, "cbx", 0)结果与上同。

3、在itemchanged事件中写dw.event itemchanged(row, dwo, '0')。结果同上。但该代码会使函数进入死循环。相当于itemchanged事件不停的迭代自身事件函数。checkbox上的勾让人不能去掉。

4、在某一个button下写 dw.objext.cbx[row] = 0或dw.setitme(row, "cbx", 0)。能达到要求。勾选被取消。

5、在itemchanged事件中写

dw_1.event losefocus( )
dw_1.setitem(row, "xz", 0)或dw.objext.cbx[row] = 0

无法达到要求。这么写的初衷是想通过losefocus()事件使dw失去焦点,而后再执行dw_1.setitem(row, "xz", 0)或dw.objext.cbx[row] = 0的操作,达到一种与在外部按钮中点击执行的时机相同的时机效果。但是不能达到预期目的。原因是执行losefocus()并不能达到使本次itemchanged事件函数执行完毕的效果。而在一次itemchanged()事件中不能修改勾选状态两次。原因是如果在itemchanged()事件中再去修改checkbox的状态就相当于再次触发了itemchanged()事件,这就相当于在itemchanged事件中写了dw.event itemchanged(row, dwo, '0'),会使程序陷入死循环,因此pb事件机制应该不允许通过在itemchanged()事件函数内通过dw_1.setitem(row, "xz", 0)或dw.objext.cbx[row] = 0修改状态值来再次触发并修改checkbox的勾选状态。

在itemchanged事件中使用各种代码不能达到要求,原因是:dw.event itemchanged(row, dwo, '0')这种方法虽然修改了data的值,但是在此事件本身的函数内data值的改变并不能反过来改变外部checkbox控件的勾选的的状态。虽然checkbox的勾选状态直接决定data值。

dw.objext.cbx[row] = 0和dw.setitme(row, "cbx", 0)这两种方法虽然能改变checkbox的勾选状态。但是在itemchanged事件内部使用却无效。原因同5。

解决方案:以上种种方法不能达到要求,究其原因是因为没有找到一个合适的时机。再次修改checkbox勾选状态的时机必须在itemchanged事件之中,而不能在itemchanged()之后的任何一个事件中。而在itemchanged事件中又不能通过用代码修改状态值的方法来改变勾选状态。那么就只剩下一个思路——终止itemchange()的执行。那么如何终止呢,事件执行成功与失败一般都会通过返回值的形式告诉编译器,执行成功和失败都会有不同的返回值,编译器也会根据事件函数的返回值来决定下一步的应该执行动作。因此想到从返回值下手。通过查看pb的帮助文档( help——contents——查询return关键字)发现itemchanged事件执行失败时返回值为2,因此在判断条件不满足时使itemchanged()事件的返回值为2。如图:

告诉编译器事件执行失败。则checkbox则不会勾选成功。

执行代码,成功达到要求。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wolfalcon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值