设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 10029|回复: 22
打印 上一主题 下一主题

[高6]禁止或隐藏窗体上所有控件

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2004-5-17 20:39:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以遍历窗体上所有控件来禁止或隐藏它,但如果窗体上有控件获得焦点,则当前获得焦点的控件无法禁止和隐藏,请提供使用API或非API两个解决办法。我使用了一个平时大家不常用的属性和docmd命令来巧妙实现的。想看看有没有其它思路?

要求解决办法比较通用,能适合各种特殊情况。

[此贴子已经被作者于2004-5-17 12:39:00编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2004-5-17 20:59:00 | 只看该作者
不明白,若所有控件都不显示,那显示窗体的目的又为何?

点击这里给我发消息

3#
 楼主| 发表于 2004-5-17 21:03:00 | 只看该作者
呵呵,只是举个例子,可以再改良功能 例如:根据权限 隐藏或禁止指定tag属性的控件或隐藏某个节里的所有控件主要是实现如果隐藏和禁止获得焦点的控件
4#
发表于 2004-5-17 21:04:00 | 只看该作者
简单一点的就是用代码控制窗体页眉页脚和主体的可见性,就是了,不须遍历所有控件。
5#
发表于 2004-5-17 22:44:00 | 只看该作者
Private Sub Command10_Click()

On Error Resume Next

    DoCmd.RunCommand acCmdSelectRecord

    For Each ctl In Me.Controls

        ctl.Enabled = False

        Debug.Print ctl.Name

    Next

End Sub

6#
发表于 2004-5-17 23:04:00 | 只看该作者
建立一个高度为零的文本框,将焦点转移到该文本框上,再控制原文本框的可见性就是了。

点击这里给我发消息

7#
 楼主| 发表于 2004-5-18 03:23:00 | 只看该作者
以下是引用goodidea在2004-5-17 14:43:45的发言:

Private Sub Command10_Click()

On Error Resume Next

    DoCmd.RunCommand acCmdSelectRecord

    For Each ctl In Me.Controls

        ctl.Enabled = False

        Debug.Print ctl.Name

    Next

End Sub

呵呵,所见略同,我的方法也是如此

点击这里给我发消息

8#
 楼主| 发表于 2004-5-18 03:33:00 | 只看该作者
以下是引用hi-wzj在2004-5-17 15:04:03的发言:

建立一个高度为零的文本框,将焦点转移到该文本框上,再控制原文本框的可见性就是了。



此法可行,只是通用性不是很强.

点击这里给我发消息

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
10#
发表于 2004-5-18 17:37:00 | 只看该作者
佩服佩服,我就没想到将焦点移到记录选择器上,还拘泥在某控件上,我的方法确实不具通用性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-4 05:59 , Processed in 0.256698 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表