设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4436|回复: 17
打印 上一主题 下一主题

[与其它组件] 关于控件焦点移动问题!

[复制链接]
跳转到指定楼层
1#
发表于 2006-5-18 19:29:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当在一个文本框中录入数据时,在失去焦点事件LostFocus()中写代码如下,以验证其数据的合法性。

''仅是一个简单示范

1:Private Sub Text0_LostFocus()
2:   If Text0 <= 0  Then
3:        Me.Text0.SetFocus
4:       Exit Sub
5:   End If
6:End Sub

当我录入 -1 或 0 时代码执行到3、4句后结束进程,但并没有把焦点移到原来控件上,而是下一控件。(好像没起作用)

当然验证合法性有其它方法,但我想用以上方法为什么不能实现,在VB6中用这样的思路是能成功的,但在access中就不行,不知这属不属于ACCESS中的漏洞。



[em11]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-5-18 19:31:00 | 只看该作者




为什么不直接用Access中的有效性规则呢?正好符合你的需要。




3#
发表于 2006-5-18 19:59:00 | 只看该作者
在3前加多一句语句,先将焦点移到别的控件,然后再回到本控件上
4#
发表于 2006-5-18 20:06:00 | 只看该作者
应该写在控件的更新前事件中,cancel=true

点击这里给我发消息

5#
发表于 2006-5-18 22:53:00 | 只看该作者
以下是引用一点通在2006-5-18 11:59:00的发言:
在3前加多一句语句,先将焦点移到别的控件,然后再回到本控件上

我刚好用上, 谢谢版主!
6#
发表于 2006-5-18 23:25:00 | 只看该作者
先移到Text2,然后移回Text0的所有事件顺序(过滤鼠标事件):

Text0_Enter
Text0_GotFocus
Text0_KeyDown 48 0
Text0_KeyPress 48
Text0_Change
Text0_KeyUp 48 0
Text0_BeforeUpdate 0
Text0_AfterUpdate
Text0_Exit 0
===SetFocus To Text2===
Text2_Enter
Text2_GotFocus
===SetFocus To Text0===
Text0_Enter
Text0_GotFocus
===Finish===
Text0_LostFocus
Text0_Exit 0
===SetFocus To Text2===
Text2_Enter
Text2_GotFocus
===SetFocus To Text0===
Text0_Enter
Text0_GotFocus
===Finish===
Text0_LostFocus
Text0_Exit 0
===SetFocus To Text2===
Text2_Enter
Text2_GotFocus
===SetFocus To Text0===
Text0_Enter
Text0_GotFocus
===Finish===
Text0_LostFocus
===SetFocus To Text2===
Text0_Exit 0
Text2_Enter
Text2_GotFocus
===SetFocus To Text0===
Text2_Exit 0
Text2_LostFocus
Text0_Enter
Text0_GotFocus
===Finish===
Text0_LostFocus




直接移到Text0的事件顺序:(过滤鼠标事件)

Text0_Enter
Text0_GotFocus
Text0_KeyDown 48 0
Text0_KeyPress 48
Text0_Change
Text0_KeyUp 48 0
Text0_BeforeUpdate 0
Text0_AfterUpdate
Text0_Exit 0
===SetFocus To Text0===
===Finish===
Text0_LostFocus
Text2_Enter
Text2_GotFocus
Text2_Click
Text2_Exit 0
Text2_LostFocus




[此贴子已经被作者于2006-5-18 15:42:13编辑过]

7#
发表于 2006-5-19 00:35:00 | 只看该作者
从上面的测试信息中可以看到,输入完毕后切换到其他控件的行为,是在LostFocus之后发生的,也就是说在你SetFocus到自己的时候,系统还没有进行焦点转换。

而切换到其他控件再切换回来,会引发一系列的循环事件,所以我们会感觉到光标的闪烁和短暂的停顿。

以上就是你想知道的原因。





[此贴子已经被作者于2006-5-18 16:39:51编辑过]

8#
发表于 2006-5-19 00:37:00 | 只看该作者
为什么不用更新后呢。失去焦点——获得焦点,矛盾的吧,我就犯过这个错误
9#
发表于 2006-5-19 00:42:00 | 只看该作者
以下是引用jacken在2006-5-18 16:37:00的发言:
为什么不用更新后呢。失去焦点——获得焦点,矛盾的吧,我就犯过这个错误




使用更新后,第一次可以强制切换回来,第二次就不行了。


还是使用有效性规则比较好。





[此贴子已经被作者于2006-5-18 16:42:01编辑过]

10#
发表于 2006-5-19 00:43:00 | 只看该作者
我一般喜欢用下面的事件:

Private Sub Text0_Exit(Cancel As Integer)
1   If Text0 <= 0 Then
2   Cancel = True
3   End If
End Sub


这个事件可以不让用户用鼠标跳过错误.

[此贴子已经被作者于2006-5-18 16:48:57编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-21 01:31 , Processed in 0.108598 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表