【access小品】大可不必--必填控件空值时不失去焦点示例
时 间:2012-01-13 22:03:40
作 者:煮江品茶 ID:10802 城市:武汉
摘 要:必填控件空值时不失去焦点示例
正 文:
我一直对美女版友简的执着感到无奈,那是一种钻牛角尖和撞南墙的精神,呵呵。对于细节从来都有两种说法,一种是不拘泥细节,这说的是说需要有大局和宏观的意思。但同时也有一种说法,叫做魔鬼隐藏于细节,或者细节决定成败。这看起来有些矛盾,其实不然。其中的玄妙只是在于是何种细节,关键的细节当然是重要的。不过版友简的问题大多都是些无关大局的细节,我以为大可不必过多的钻研。
版友简这两日提出了一个关于必填控件为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交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- Inputbox输入密码打开查...(12.23)
- 【Access Dsum示例】...(12.16)
- Inputbox输入密码打开窗...(12.13)
- 【Access DCount示...(12.02)

学习心得
最新文章
- 用Access查询语句如何得到前3...(02.17)
- Access快速开发平台--导入导...(02.14)
- 按回车键后光标移动到下一条记录的V...(02.12)
- Access快速开发平台--要实现...(02.10)
- Access快速开发平台--让Pe...(02.08)
- 【Access Dsum示例】用D...(02.07)
- Access对子窗体的数据进行平均...(02.05)
- Access快速开发平台附件上传,...(01.18)
- 【IIF函数示例】用iif函数判断...(01.18)
- Access快速开发平台--如何获...(01.17)