如何得到当前活动的控件(判断那个控件得到了光标)

昨天晚上加班的时候遇到一个问题,大致要实现以下内容:

1.数据窗口控件:dw_1、dw_2;

2.如果dw_1得到光标,那么{dw_2.visible = true} ;

3.如果dw_1 失去焦点,那么:如果dw_2得到光标,{dw_2.visible = true} ;如果dw_2也没有得到光标,{dw_2.visible = false} 。

看起来很简单的样子(实际上也很简单),但是我试了很多次。一开始在dw_1的losefocus事件里加上:{dw_2.visible = true} ,这样一来,在dw_1失去光标的时候dw_2不可见了,即使你单击的是dw_2也是一样的效果,这就没有达到目的。所以需要在{dw_2.visible = true} 之前判断是否是dw_2得到了光标,如果是,那么就直接return,否则再set{dw_2.visible = true}。

可是要怎么实现呢?

经尝试,解决方法如下(PB9.0):

 

graphicobject lctl_control     //声明一个graphicobject 类型的变量,用来存储getfocus()的返回值

 

lctl_control = getfocus( )      //使用getfocus()函数,得到当前活动的控件

 

/*注意下面一句代码,判断当前活动控件是否是dw_2。因为dw_2本身是datawindow类型的,而lctl_control是graphicobject 类型的,此处需要进行强制类型转换以后才能进行比较,否则会报错。强制类型转换可以采取多种方式,在此我选择了把取两者的句柄来比较(handle函数的返回值是long类型,此处和C++中不一样,VC++中本身就有句柄类型)*/

 

//如果是dw_2得到了光标,return


if handle(lctl_control) = handle(dw_2) then return

//否则,将dw_2设置为不可见

 

dw_2.reset( )


dw_2.visible = false

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值