请教:表单中光标离开text1时,在lostfocus方法中的语句thisform.text1.setfocus不起作用,应该如何解决?谢谢!

yyy39 2003-04-30 03:58:22
请教:表单中有几个文本框,
我在text1的lostfocus方法中,检测输入的数据是否有问题,
如果有问题时,执行thisform.text1.setfocus语句,希望光标不要移走,
但是该语句不起作用,光标依然移动到下一个文本框。
应该如何解决?
谢谢!
...全文
402 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
begbear 2003-05-02
  • 打赏
  • 举报
回复
話是這麼說,我們頭居然專門抓這樣的空子,要這樣控制,弄得我現在有這麼一個問題,令我焦頭爛耳:
表單中有text1,text2,text3,text4,text5(比方啊)
還有CmdSave(確定),CmdCancel(取消)
諸上文件框中的VALID()中
IF EMPTY(ALLTRIM(THIS.Value))
MESSAGEBOX("不能為空")
RETURN 0
ENDIF
IF !SEEK(ALLTRIM(THIS.Value),"表1","索引關鍵字")
MESSAGEBOX("沒找到")
THIS.Value=""
RETURN 0
ENDIF
這麼一來,防是防得死死的,在不輸入,或是全空格,或是該值沒在某表中找到的話,都不能進行下一步操作!可偏偏頭還要來個無論在什麼時候,點擊"取消"按鈕(CmdCancel)就得退出。。。。。想破我的頭都還想不出有什麼好辦法,我現在是把這些功能不做到Valid()中,而是做到下一個TEXT的GotFocus()事件中,但這樣實在不敢恭維。。。。請教了。。。
sdsthgt 2003-05-02
  • 打赏
  • 举报
回复
新建属性xm,ym 时刻记录当前窗口中鼠标的位置

********** form1.move

thisform.xm=ncoord
thisform.ym=nycoord

************text1.valid

if (thisform.ym>=thisform.command2.top and thisform.ym<=thisform.command2.top+thisform.command2.height);
and (thisform.xm>=thisform.command2.left and thisform.xm<=thisform.command2.left+thisform.command2.width)
&&&&鼠标位置在返回按钮的区间内
else
if empt(allt(this.value))
=messagebox('不能为空',16,'提示')
retu .f.
endi
endi
marki 2003-05-02
  • 打赏
  • 举报
回复
樓上,
我在想,在Vlid中是否能繞過,在判斷本身值之前
先判斷使用者的意向是否指向Cancel,但我試了下,用
通常的方法是繞不過的~
==========================
LOCAL loActiveControl
m.loActiveControl = _SCREEN.ACTIVEFORM.ACTIVECONTROL
IF m.loActiveControl.BASECLASS = "CommandButton"
m.loActiveControl = ;
EVALUATE("m.loActiveControl.Columns(m.loActiveControl.ActiveColumn)." + ;
m.loActiveControl.COLUMNS(m.loActiveControl.ACTIVECOLUMN).CURRENTCONTROL)
endif
m.cObjHierarchy=UPPER(SYS(1272,m.loActiveControl))
WAIT WINDOW AT 4,30 "_SCREEN.ActiveForm.ActiveControl = "+m.cObjHierarchy
==========================
看來不行~
但你可把所有這些合法性檢查放入一自定義函數中,在函數中
判斷這些值是否合法,不合法則返焦點至該控件,再把該函數放入所
有需判斷控件值的WHEN事件中
其實還是和你的差不多,不過建議用WHEN事件~
marki 2003-04-30
  • 打赏
  • 举报
回复
樓上說得不錯,程序好寫,思想難求啊
yasur 2003-04-30
  • 打赏
  • 举报
回复
在valid事件中 return .F. 即可!

建议:不要使用这样的语句!因为用户总会犯错误或在使用时有其他操作要求!而你要求数据不符合要求时定位在这个窗口。这样不好!
所以尽量把代码写到一个按钮当中来判断内容的合法性然后给于提示!
newfang 2003-04-30
  • 打赏
  • 举报
回复
在valid 中写return.F.
fongming 2003-04-30
  • 打赏
  • 举报
回复
好像不能这样的吧。
heavenmusic 2003-04-30
  • 打赏
  • 举报
回复
明白!!
valid:
在控件失去焦点之前发生。

PROCEDURE Control.Valid
备注
若 VALID 事件返回“真” (.T.),表明控件失去了焦点;若返回“假” (.F.),则说明控件没有失去焦点。


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

若返回 0,则控制没有失去焦点。
若返回正值,则该值指定焦点向前移动的控制数。例如,若 VALID 事件返回 1,则焦点由下一个控制得到。
若返回负值,则该值指定焦点向后移动的控制数。例如,若 VALID 事件返回 -1,则焦点由上一个控制得到。
请参阅
流星尔 2003-04-30
  • 打赏
  • 举报
回复
valid
if 不符合规则
messagebox("aa")
return 0
endif
YYMMVV 2003-04-30
  • 打赏
  • 举报
回复
我昨天问过~~ 哈哈。。。

用 valid事件 吧~

原贴在:http://expert.csdn.net/Expert/topic/1722/1722014.xml?temp=.8706629

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧