【access小品】大可不必--必填控件空值时不失去焦点示例-煮江品茶
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 源码示例


【access小品】大可不必--必填控件空值时不失去焦点示例

发表时间:2012/1/13 22:03:40 评论(4) 浏览(8885)  评论 | 加入收藏 | 复制
   
摘 要:必填控件空值时不失去焦点示例
正 文:

  我一直对美女版友简的执着感到无奈,那是一种钻牛角尖和撞南墙的精神,呵呵。对于细节从来都有两种说法,一种是不拘泥细节,这说的是说需要有大局和宏观的意思。但同时也有一种说法,叫做魔鬼隐藏于细节,或者细节决定成败。这看起来有些矛盾,其实不然。其中的玄妙只是在于是何种细节,关键的细节当然是重要的。不过版友简的问题大多都是些无关大局的细节,我以为大可不必过多的钻研。

  版友简这两日提出了一个关于必填控件为null时不得失去焦点的问题,这个问题在我看来并不重要。把数据表中的字段设置为必填应该就可以了。这样做的差别仅仅在于,整条记录更新时,系统将作出提示。同样可以保证必填字段的数据不出现null,因此说这是一个非关重要的细节。

  不过对于版友简的问题,讨论的版友很多,给出了许多种的答案,似乎版友简都不大满意。于是乎我觉得这是一个同志们都感兴趣的问题,便觉得可以做一个示例供大家参考。不过这个问题探讨的层度需要进一步加深,我想推导出处理的整体思路来。这个问题的处理有以下的逻辑:

  1、一个控件不失去焦点,可以理解为除这个控件外,其他控件一旦获得焦点事件触发,都将导致该控件获得焦点。这是一个有意思的反向思维,这种思维内涵了佛学的“舍得”,也揭示了人人为我我为人人的科学发展观。

  2、控件的输入过程是有一定秩序的,这种秩序体现在控件的TabIndex属性上。TabIndex属性不一定与控件的位置或者建立的前后相关,原因在于TabIndex属性是可以调整的。因此当前不能失去焦点的那个控件,就是其值为null且TabIndex值最小的控件。

  3、当窗体控件繁多时(记得版友简同志善于这样做),逐一编写各个控件的获得焦点事件是一件不道德的事件。简化相同的控件事件处理的捷径,是在窗体加载时给控件的事件赋值为一个函数。

  依据以上的逻辑,这个问题的一种有效而简洁的处理方法便隆重推出了。

点击下载此附件

 


Private Sub Form_Load()
Dim ctrls As Controls
Dim ctrl As Control
Set ctrls = Me.Controls
For Each ctrl In ctrls
    If ctrl.ControlType = acTextBox or ctrl.ControlType = acComboBox Then
        ctrl.OnGotFocus = "=CtrlSetFocus()"
    End If
Next
End Sub

Function CtrlSetFocus()
Dim ctrls As Controls
Dim ctrl As Control
Dim i As Integer, m As Integer
m = 100
Set ctrls = Me.Controls

For i = 0 To ctrls.Count - 1
    'ControlType可根据需要进一步枚举,也可再套一层If用于排除非必填控件。
    If ctrls(i).ControlType = acTextBox or ctrls(i).ControlType = acComboBox Then
        If IsNull(ctrls(i).Value) = True Then
            If ctrls(i).TabIndex < m Then
                Set ctrl = ctrls(i)
                m = ctrls(i).TabIndex
            End If
        End If
    End If
Next
If m <> 100 Then
    ctrl.SetFocus
End If
End Function


Access软件网交流QQ群(群号:198465573)
 
 相关文章
【access源码示例】通用必填项检查函数及友好提示功能实现示例  【红尘如烟  2012/6/16】
Access组合列表框必填字段的提示信息设置  【Aaron  2013/2/3】
常见问答
技术分类
相关资源
文章搜索
关于作者

煮江品茶

文章分类

文章存档

友情链接