设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4432|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
18#
发表于 2006-5-19 15:57:00 | 只看该作者
以下是引用duanpeng@在2006-5-19 0:26:00的发言:


用版主提供的这一事件正是我想要的效果!

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

谢谢了!!





这个方法是sgrshh29提供的,你应该谢谢他。






17#
 楼主| 发表于 2006-5-19 08:26:00 | 只看该作者
用版主提供的这一事件正是我想要的效果!

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

谢谢了!!
16#
 楼主| 发表于 2006-5-19 08:19:00 | 只看该作者
重点不在于验证问题,而是当数据更新后或移开焦点时(也就是要继续录入下一项数据时),进行一系列的代码处理与分析,如果某条件成立则把焦点回到原控件(这才是讨论的重点)。
15#
发表于 2006-5-19 07:56:00 | 只看该作者
不知楼主验证数据的合法性,是不是一定输入后马上验证,如果不是,可以参考下面的方法

例如我们在新增数据时,需要验证才能保存,在保存时验证就OK了,

Private Sub CmdSave_Click()
Bclrsj
End Sub


Private Function Bclrsj() As Boolean

   
          If Len(Trim(TxtItemName)) = 0 Then
             MsgBox "项目不能为空"
             TxtItemName.SetFocus
             Bclrsj = False
             Exit Function
          End If
          If Len(Trim(TxtItemLen)) = 0 Then
             MsgBox "长度不能为空"
             TxtItemLen.SetFocus
             Bclrsj = False
             Exit Function
          End If
         
         
         
   '     下面自已加
        
End Function
14#
 楼主| 发表于 2006-5-19 07:18:00 | 只看该作者
一、使用有效性规则,适合对单纯录入过程中或录入时的值进行有效判断,如果我想在判断过程中涉及数据连接及其它代码处理时不适应。所得我只能利用事件编写自己的代码进行处理。

二、先将焦点移到别的控件,然后再回到本控件上,功能上实现了,但总觉得不舒服[em11],为什么我要绕一个圈子呢。而且如果你以另一个控件作“中介”势必造成另一控件获得焦点事件的执行,无形中降低了效率,也影响到整个应用。不是吗?

三、在更新前事件中用楼上朋友指出的这句:cancel=true,好像没起作用。

不知大家还有什么其它妙招。

[此贴子已经被作者于2006-5-19 0:20:36编辑过]

13#
发表于 2006-5-19 01:02:00 | 只看该作者
以下是引用LucasLynn在2006-5-18 16:58:00的发言:







Text0_Enter
Text0_GotFocus
Text0_KeyDown 48 0
Text0_KeyPress 48
Text0_Change
Text0_KeyUp 48 0
Text0_BeforeUpdate 0
Text0_AfterUpdate
===Cancel===
===Finish===
Text0_Exit -1
Text0_LostFocus
===Cancel===
===Finish===
Text0_Exit -1
===Cancel===
===Finish===
Text0_Exit -1




有道理,你的那个exit是个新思路,没有用过。谢谢

不过还是赞成有效性规则,不用编程。
12#
发表于 2006-5-19 00:58:00 | 只看该作者
以下是引用sgrshh29在2006-5-18 16:43:00的发言:


我一般喜欢用下面的事件:

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


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




Text0_Enter
Text0_GotFocus
Text0_KeyDown 48 0
Text0_KeyPress 48
Text0_Change
Text0_KeyUp 48 0
Text0_BeforeUpdate 0
Text0_AfterUpdate
===Cancel===
===Finish===
Text0_Exit -1
Text0_LostFocus
===Cancel===
===Finish===
Text0_Exit -1
===Cancel===
===Finish===
Text0_Exit -1

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

11#
发表于 2006-5-19 00:44:00 | 只看该作者
以下是引用LucasLynn在2006-5-18 16:42:00的发言:






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


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

是个问题,我是这样解决的,这个控件的下一个控件加上获得焦点事件,然后再是切换。但就怕这些人用鼠标跳过这个控件。
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-20 23:28 , Processed in 0.281419 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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