打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何控制焦点的转移(终于解决了!)

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

(2009-07-23 16:27:18)

得到和失去焦点 

   在应用程序开发中,窗体通常是用户对数据进行操作的界面。通常利用文本框、选择框、列表框等控制对象来显示、输入或修改数据库中的数据。有效的控制数据编辑的流程、数据对象焦点的转移,是建立用户友好的应用程序的重要部分。窗体中默认的对象之间焦点的转移是按照所设定的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

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MFC中如何将焦点设置到指定控件上
大学VF考试题及答案
VBA一例:如何保持文本框焦点
C#"焦点事件"中的Validating处理方法
WinForm设置窗体默认控件焦点
PPT中对象插入的8个技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服