设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4815|回复: 17
打印 上一主题 下一主题

[模块/函数] 模块与事件的问题

[复制链接]
跳转到指定楼层
1#
发表于 2013-3-9 18:50:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在学习事件模块之间的关系和应用。在学习中有些问题。
我写了一段测试的代码。
Private Sub Command0_Click()
Me.Command1.OnClick = "= ctlRed ('" & Me.Name & "',True)"
End Sub

模块中写了一段FUNCTION
Public Function ctlRed(strFormName As String, blRed As Boolean)
Dim ctl As Control
'Dim ctls As Controls
'Set ctls = CurrentProject.AllForms(strFormName).Controls
For Each ctl In Forms(strFormName)
    If ctl.ControlType = acCommandButton Then
        If blRed = True Then
        ctl.ForeColor = RGB(255, 0, 0)
        Else
        ctl.ForeColor = RGB(0, 255, 0)
        End If
    End If
Next ctl
End Function
但是测试了之后按钮没反应,但是如果写在按钮本身的事件中没有问题。奇怪。
不知道哪里写错了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2013-3-9 18:56:35 | 只看该作者
本帖最后由 williamwangc 于 2013-3-9 18:59 编辑

另外,我想问下。
1、我猜没错的话,Me.Command1.OnClick = "= ctlRed ('" & Me.Name & "',True)"这是表达式生成器是么?
2、如果我在按钮的click事件写入任意代码,在运行以上的表达式的话会发生什么冲突么?
3、还有我在上一段代码中使用'Set ctls = CurrentProject.AllForms(strFormName).Controls时发现有错误,这应该怎么写呢?
3#
发表于 2013-3-9 22:27:44 | 只看该作者
点多几次就有反应了。{:soso_e128:}
1、一般把这类型事件放在窗体的加载事件中效果会更好些。请参考【源码开放】季度奖管理系统中主界面的图标菜单。如果需要调用的情况不多的话,写好模块后,直接在单击事件中输入:=函数(参数)即可。
2、肯定会有冲突的。具体是哪个优先,我没测试过。
3、应该怎样写:Set ctls = Forms(strFormName).Controls  AllForms木有Controls子集。
4#
 楼主| 发表于 2013-3-9 23:01:45 | 只看该作者
请版主再测试一下。
我是为设定权限的功能函数做准备。在设定权限放在Load事件好还是Open事件好。是不是就是这样引用表达式的思路初始化权限。?
5#
发表于 2013-3-10 09:53:06 | 只看该作者
williamwangc 发表于 2013-3-9 23:01
请版主再测试一下。
我是为设定权限的功能函数做准备。在设定权限放在Load事件好还是Open事件好。是不是就 ...

你给的例子我测试过了。点第一次是没反应,点击第二次以后就有反应了。^_^
从顺序上来讲,先是Load事件然后是Open事件。初始化嘛,自然是Load事件会好些的。
权限问题,我觉得最好还是在表中设置。Todaynew写过《权限麻雀》和《菜单权限》等例子,你不妨搜索来参考下。
6#
 楼主| 发表于 2013-3-10 11:07:54 | 只看该作者
ACCESS的参考书中说OPEN事件优先于LOAD事件嘛。
7#
发表于 2013-3-10 12:03:36 | 只看该作者
代码有意思,楼主最好将例子上传。
8#
发表于 2013-3-10 14:49:56 | 只看该作者
Me.Command1.OnClick = "= ctlRed ('" & Me.Name & "',True)"改成
Me.Command1.Click = "= ctlRed ('" & Me.Name & "',True)"行不行?
9#
发表于 2013-3-10 16:22:40 | 只看该作者
不应该用AllForms,而应该用Forms。
AllForms是所有窗体(包含打开和未打开的),Forms是所有打开的窗体。
要设置窗体上的控件,前提是窗体需要处于打开状态。
10#
发表于 2013-3-11 09:54:24 | 只看该作者
本帖最后由 ycxchen 于 2013-3-11 09:56 编辑
roych 发表于 2013-3-9 22:27
点多几次就有反应了。
1、一般把这类型事件放在窗体的加载事件中效果会更好些。请参考【源码 ...


请问版主,键入currentproject.后在列表框可看到AllForms对象,但无论键入AllForms.还是lForms.在出现的列表框均没有controls子集,这是什么一回事呀?
按我理解,Me.Command1.OnClick = "= ctlRed ('" & Me.Name & "',True)"应改成如下的才对,对否?
Me.Command1.Click = "= ctlRed ('" & Me.Name & "',True)"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-27 16:22 , Processed in 0.084716 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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