|
9#
楼主 |
发表于 2004-5-18 03:34:00
|
只看该作者
做好的模块:Option Compare Database
Option Explicit
Public Enum tAcSetType
tAcSetEnable = 0 '设置可用属性
tAcSetVisible = 1 '设置可见属性
tAcSetEnableandVisible = 2 '设置可见及可用属性 其它不可见即不可用,可忽略
End Enum'===============================================================================
'-函数名称: SetEnableOrVisible
'-功能描述: 设置指定窗体指定切内控件的可见性和可用属性,包括设置已获得焦点的控件
'-输入参数说明: 参数1:rfrm Form 指定的窗体对象
' 参数2:rastSetType tAcSetType 设置方式
' 参数2:rblnValue Boolean 设置的值
' 参数2(可选):rblnIncludeFocusControl Boolean 是否包括获得焦点的控件
' 参数2(可选):rsecSection AcSection 指定的节,如果不指定,则设置窗体内所有控件
'-返回参数说明: 无
'-使用语法示例: SetEnableOrVisible Me, tAcSetEnableandVisible, False, True, acDetail
'-参考:
'-使用注意: 可能不适用数据表窗体
'-兼容性: 97,2000,XP compatible
'-作者: 王宇虹,改进:王宇虹
'-更新日期: 2004-05-15 ,2004-05-16
'===============================================================================Public Function SetEnableOrVisible(rfrm As Form, rastSetType As tAcSetType, rblnValue As Boolean, Optional rblnIncludeFocusControl As Boolean = False, Optional rsecSection As AcSection = 99) As Boolean Dim ctr As Control
Dim objFormOrSection As Object
On Error GoTo Err_SetEnableOrVisible '有错误转到错误处理程序
If rsecSection = 99 Then '如果没有指定具体的节,则对所有控件进行处理
Set objFormOrSection = rfrm
Else '否则只对指定的节里面的控件进行处理
Set objFormOrSection = rfrm.Section(rsecSection)
End If
'使用一个非常巧妙的办法来设置当前获得焦点控件的可见性,可以将焦点移到其它控件,然后再处理,但比较麻烦
'也可使用API,但也是比较麻烦,后使用DoCmd.RunCommand acCmdSelectRecord,将焦点移到记录选择器上面就可以了,不用担心与其它控件冲突
'写一个使用API的方法
If rblnIncludeFocusControl = True And rblnValue = False Then '如果选择了包括当前获得焦点控件且设置值为否的话
rfrm.SetFocus
DoCmd.RunCommand acCmdSelectRecord
End If
'根据设置类型分别设置对象的可见性及是否可用,注意,有些控件如标签没有可用属性,则忽略继续往下执行.
Select Case rastSetType
Case tAcSetEnable
For Each ctr In objFormOrSection.Controls
ctr.Enabled = rblnValue
Next
Case tAcSetVisible
For Each ctr In objFormOrSection.Controls
ctr.Visible = rblnValue
Next
Case tAcSetEnableandVisible '如果可见性为否的话,也可考虑不用设置是否可用的属性
For Each ctr In objFormOrSection.Controls
ctr.Enabled = rblnValue '可以不用
ctr.Visible = rblnValue
Next
End Select
SetEnableOrVisible = True '执行成功,返回结果为True
Exit Function
Err_SetEnableOrVisible:
SetEnableOrVisible = False '有部分控件执行错误,返回结果为False,并继续处理后面的控件
Resume Next
End Function |
|