java 关闭焦点转移_如何控制焦点的转移(终于解决了!)

得到和失去焦点

在应用程序开发中,窗体通常是用户对数据进行操作的界面。通常利用文本框、选择框、列表框等控制对象来显示、输入或修改数据库中的数据。有效的控制数据编辑的流程、数据对象焦点的转移,是建立用户友好的应用程序的重要部分。窗体中默认的对象之间焦点的转移是按照所设定的TAB次序进行的,但多数情况下,这种默认的次序往往满足不了应用的需要。比如说,我们可能要根据用户的选择来决定焦点要转移到哪个对象,而不是按照TAB的次序来转移焦点。如果不理解Visual Foxpro如何来控制对象的焦点,就会感到处理流程不容易控制。

涉及焦点的事件有四个,它们是:When、GotFocus、Valid、LostFocus和一个方法SetFocus。当对象试图得到焦点时,会先执行When事件,如果When事件返回真(.T.),该对象就会得到焦点,否则不会得到焦点。因此,在When事件中编写事件代码,来控制是否让该对象得到焦点。

但是,ListBox和ComboBox两个控制对象对When事件的响应有些不同。在这两个控制中,每次用鼠标或箭头键在列出的项目之间移动时都会执行When事件。因此,如果需要编写着两个控制的When事件代码,需要特别注意它们的差别。

失去焦点的过程与得到焦点的过程类似,当一个对象要失去焦点时会先执行Valid事件,如果Valid事件返回真(.T.),该对象就会失去焦点,并执行LostFocus事件,否则该对象不会失去焦点。Valid事件还可以返回整数值,如果返回0,对象不会失去焦点;如果返回正整数值,焦点会转移到整数值所指定的往下第几个对象;如果返回负整数值,焦点会转移到整数值所指定的往上第几个对象。因此,可以在Valid事件中编写事件代码来判断输入值是否有效,设定返回值是真还是假,来决定是否允许控制对象失去焦点。

用return可以返回一个值来控制焦点例:在文本框的valid事件中写下

If alltrim(this.value)<=’0’

Return .f.

endif

若 VALID 事件返回“真” (.T.),表明控件失去了焦点;若返回“假”

(.F.),则说明控件没有失去焦点。

VALID 事件也可以返回数值,对应于以下情况:

若返回 0,则控件没有失去焦点。

若返回正值,则该值指定焦点向前移动的控件数。例如,若 VALID 事件返回 1,则焦点由下一个控件得到。

若返回负值,则该值指定焦点向后移动的控件数。例如,若 VALID 事件返回 -1,则焦点由上一个控件得到。

可以在 Valid 事件的 RETURN 命令中用可选的 ObjectName

参数来指定焦点位置。此对象必须是一个有效的 Visual FoxPro

对象。如果被指定的对象被关闭或无法接受焦点时,那么焦点指定在递移次序中的下一个对象。如果一个无效的对象被指定,则 Visual

FoxPro 把焦点留在作用中的对象。

在以下情况下可以设置对象焦点:

在另外的可视表单上的对象设置焦点。

设置焦点到一个不可见的页或页框控件。

还有一个命令可用于控制对象焦点的转移,NoDefault,这条命令可阻止Visual Foxpro执行事件默认的行为。例如在用文本框输入数据时,如果按Enter键,文本框会失去焦点,焦点会转移到下一个对象。如果不想让文本框失去焦点,可在文本框的KeyPress事件中插入一条NoDefault命令,按Enter键文本框也不会失去焦点。如果在NoDefault后面再加一条SetFocus命令,焦点就会转移到你需要的对象上去。

例:在text1的keypress 事件中写下

if nkeycode=13

if alltrim(this.value)<='0'

nodefault

thisform.text1.setfocus

endif

endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值