问题1:
如何使内容为空的字段不能失去焦点?
要求的功能:用户在填写字段内容时,如果内容为空则提示,焦点重新回到这个字段
我的代码:
=========================================================
Private Sub txtAddCustomerName_LostFocus()
On Error Resume Next
If IsNull(Trim(Me.txtAddCustomerName.Value)) Then
MsgBox "字段内容不能为空", vbCritical, "提示:"
Me.txtAddCustomerName.SetFocus
End If
End Sub
=========================================================
结果:字段为空时有提示,但是焦点无法重新回到这个控件,而是跑到下一个控件去了。我试过把代码移到afterupdate事件中也是这样。
问题2:
如何把系统不能为空的错误提示屏蔽掉?
还是上面那个字段,因为后台数据表设置为不能为空,前台窗体填写此字段时,如果为空系统会自动弹出一个提示,内容是因为表的字段不能为空,所以出错之类。
如何把这个错误提示屏蔽掉呢?我用On Error Resume Next 不起作用
可以在控件的BeforUpdate事件中,如果IsNull时,就Cancel事件.例如:
Private Sub txtAddCustomerName_BeforUpdate(Cancel As Integer)
If IsNull(Trim(Me.txtAddCustomerName)) Then
MsgBox "字段内容不能为空", vbCritical, "提示:"
me.txtAddCustomerName.Undo
Cancel =True
End If
End Sub
注意:txtAddCustomerName控件的"控件来源"属性不为空时(也就是控件要为绑定控件时),才有效果.因此,窗体要有记录源.
羽扇子君:
你好,谢谢你的回复,我试了你的代码(txtAddCustomerName是绑定控件),发现有两个问题:
1.此字段有焦点时,不输入任何内容,直接按Tab键切换到其他控件,不会有提示,也就是说字段内容还是可以为空。
2.此字段有焦点时,输入几个空格键,再切换到其他控件,会有代码里设定的提示,点击确定会还会再弹出一个系统提示,这个比较讨厌,不知道如何屏蔽。
我觉得判断字段内容为空时在lostfocus事件里写代码好像比较好,但是不明白为什么Me.txtAddCustomerName.SetFocus不会起作用。
在控件的BeforUpdate事件中,来处理控件接收的数据是否是想要的是最佳的。因为这个事件可以进行取消(Cancel=True)操作。不明白的地方,可以参见Access关于BeforUpdate事件的帮助。
问题1:看看你控件的默认值,是不是有诸如“""”两个在一起的双引号或空格之类的值,都要去掉;(让默认值里为空)同时检查窗体及其它控件事件代码,保证在别的事件中,没有向这个控件中写入值。
问题2:去掉系统提示的方法 ,把这个控件来源对应的字段的“必填字段”设为“否”;“允许空字符串”设为“是”;。
1.单位名称这个字段是必填字段,不能允许为空,也没有默认值(每个单位名称都是不同,所以不会有默认值)。
2.别的事件中,没有向这个控件中写入值。
3.我可以在提交按钮中判断不能为空的字值并提示,然后设置焦点(报销系统的教程中就是这样处理的),但是我希望用户在填写字段时就能有提示,而不是最后提交时再提示。
我想了一下,之所以“此字段有焦点时,不输入任何内容,直接按Tab键切换到其他控件,不会有提示”,是不是因为新增时,字段内容本来就是空的,按了Tab键后实际上没有做更新,所以beforeupdate事件不起作用?
对,它没有进入BeforUpdate事件过程;
所在,你要在窗体的BeforUpdate事件中处理.
目前找不到正确的方法,算了,我还是在提交按钮里面再判断吧。
我是这样实现的,
1、在窗体建立一个按钮,命名comx
2、在确认按钮中,先是me!comx.setfocus,然后才是你的控件.setfocus
---------
如果是在获得焦点后离开焦点,同理
if nz(trim(me!字段))="" then
me!comx.setfocus
me!字段.setfocus
endif
总记录:7篇 页次:1/1 9 1 :