# Re: 可以这样做。。。

Posted by David Wong on September 24, 1998 at 13:40:24:

In Reply to: 这样就无法即时控制USER不能继续输入了啊?! posted by 小马 on September 24, 1998 at 08:43:06:

我明白你的想法，我现在写的系统中也有同样的功能。(在其他 tools 中，例如 PowerBuilder 都会有 filedValid 这个 event ，所以我觉得 VB 也应该会加入这个 event ...)

你可以用一个 form standard function 来做，例如叫 FieldValid(lastItem) ，然后在 textbox 的 lostFocus 中呼叫这个函数，并检查 lastItem 是什么，从而进行检查。

但最重要的还是如何知道 getFocus 及 lostFocus 是如何触发的，如果不是 user 用 Tab 或其他触发的，就可以不用检查了。如下程式是用来判断 gotFocus 是如何触发的。

Function gbStdActivateByUser () As Integer
'Check whether control is activated by user action
'Check the state of Tab, Left mouse button, Numpad 4 and Numpad 6 which change the control focus
'If value of GetKeyState() function < 0, that means one of these keys is pressed
gbStdActivateByUser = (GetKeyState(KEY_TAB) < 0 Or GetKeyState(KEY_LBUTTON) < 0 Or GetKeyState(KEY_NUMPAD4) < 0 Or GetKeyState(KEY_NUMPAD6) < 0)
End Function

: : 其实如非必要，我是非常不赞成把检查错误的程式写在 LostFocus 事件中。建议你在 OK 按钮中才对 form 中所有的栏位做检查。
: : VB6 多提供一个事件可以让你写检查程式，所以如果你一定要针对栏位做检查的话请改用 VB6

: 写在OK按钮中，变成USER如果KEYIN错误资料，仍可一直往下面栏位KEYIN，到最后才作一次总检查，这样好像时机点不大对？请问您是否可有写在textbox而不发生我讲的那种情况的解决之道？另，一个令我疑惑的是，为何两个TEXTBOX的lostfocus事件会同时触发而导致无穷回圈呢？是VB的BUG吗？请指教，谢谢！

Follow Ups:

- 看不太懂耶！可以再讨论一下吗？ 小马 17:02:36 9/24/98 (3)
  - Re: 看不太懂耶！可以再讨论一下吗？ David Wong 13:33:35 9/25/98 (2)
    - 上次回信有个地方您漏看了，是我问题所在 小马 16:31:30 9/25/98 (1)
      - Re: 上次回信有个地方您漏看了，是我问题所在 David Wong 21:12:22 9/27/98 (0)