如何控制焦点的转移
展开全部
在应用程序开发中,窗体通常是用户对数据进行操作的界面。通常利用文本框、选择框、列表框等控制对象来显示、输入或修改数据库中的数据。有效的控制数据编辑的流程、数据对象焦点的转移,是建立用户友好的应用程序的重要部分。窗体中默认的对象之间焦点的转移是按照所设定的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
涉及焦点的事件有四个,它们是: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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询