Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何使内容为空的字段不能失去焦点

ben  发表于:2010-11-28 15:29:27  
复制

问题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 不起作用

 

 

Top
羽扇子君 发表于:2010-11-28 20:07:26

可以在控件的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控件的"控件来源"属性不为空时(也就是控件要为绑定控件时),才有效果.因此,窗体要有记录源.



ben 发表于:2010-11-30 11:16:10

羽扇子君

 

你好,谢谢你的回复,我试了你的代码(txtAddCustomerName是绑定控件),发现有两个问题:

 

1.此字段有焦点时,不输入任何内容,直接按Tab键切换到其他控件,不会有提示,也就是说字段内容还是可以为空。

 

2.此字段有焦点时,输入几个空格键,再切换到其他控件,会有代码里设定的提示,点击确定会还会再弹出一个系统提示,这个比较讨厌,不知道如何屏蔽。

 

我觉得判断字段内容为空时在lostfocus事件里写代码好像比较好,但是不明白为什么Me.txtAddCustomerName.SetFocus不会起作用。



羽扇子君 发表于:2010-12-01 06:11:46

在控件的BeforUpdate事件中,来处理控件接收的数据是否是想要的是最佳的。因为这个事件可以进行取消(Cancel=True)操作。不明白的地方,可以参见Access关于BeforUpdate事件的帮助。

问题1:看看你控件的默认值,是不是有诸如“""”两个在一起的双引号或空格之类的值,都要去掉;(让默认值里为空)同时检查窗体及其它控件事件代码,保证在别的事件中,没有向这个控件中写入值。

问题2:去掉系统提示的方法 ,把这个控件来源对应的字段的“必填字段”设为“否”;“允许空字符串”设为“是”;。



ben 发表于:2010-12-01 09:27:09

1.单位名称这个字段是必填字段,不能允许为空,也没有默认值(每个单位名称都是不同,所以不会有默认值)。

2.别的事件中,没有向这个控件中写入值。

3.我可以在提交按钮中判断不能为空的字值并提示,然后设置焦点(报销系统的教程中就是这样处理的),但是我希望用户在填写字段时就能有提示,而不是最后提交时再提示。

 

我想了一下,之所以“此字段有焦点时,不输入任何内容,直接按Tab键切换到其他控件,不会有提示”,是不是因为新增时,字段内容本来就是空的,按了Tab键后实际上没有做更新,所以beforeupdate事件不起作用?



羽扇子君 发表于:2010-12-01 19:29:04

对,它没有进入BeforUpdate事件过程;

所在,你要在窗体的BeforUpdate事件中处理.



ben 发表于:2010-12-07 23:16:09

目前找不到正确的方法,算了,我还是在提交按钮里面再判断吧。



hjs 发表于:2010-12-11 14:10:39

我是这样实现的,

1、在窗体建立一个按钮,命名comx

2、在确认按钮中,先是me!comx.setfocus,然后才是你的控件.setfocus

---------

如果是在获得焦点后离开焦点,同理

if nz(trim(me!字段))="" then

me!comx.setfocus

me!字段.setfocus

endif

 

 



总记录:7篇  页次:1/1 9 1 :