设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[模块/函数] 红尘如烟的“日期选择器(Access Calendar)最终版”不能用在选项卡中(已改进)

[复制链接]
跳转到指定楼层
1#
发表于 2011-7-2 15:20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zww3008 于 2011-7-4 22:56 编辑

试用了很多版本的日历控件,最终喜欢并用上了红尘如烟老师的这个版本,美观、使用方法多样且简单、最重要的是能应用在子窗体和多级孙窗体上。一直使用无佯,最近用在了选项卡上,发现弹出错误提示框“对像不支持该属性和方法”,不能用。希望红尘版主能改进一下,让很多仍在用ACCESS2003的提供更多的方便,谢谢。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2011-7-2 22:24:27 | 只看该作者
可能是你自己的问题吧
我一直用得很好,而且都是在选项卡中用的
3#
 楼主| 发表于 2011-7-4 22:41:58 | 只看该作者
本帖最后由 zww3008 于 2011-7-4 22:57 编辑
zhuyiwen 发表于 2011-7-2 22:24
可能是你自己的问题吧
我一直用得很好,而且都是在选项卡中用的


楼上的提醒,确实是因我改了原版,测试了一下,终于找到原因了。
“日期选择器(Access Calendar)最终版”还是存在BUG,并且有几个版本,红尘版主更新了也不在顶楼说明一下。

有几个问题需要注意和完善:
1、当需要输入日期的目标控件为“锁定”时;
2、当需要输入日期的窗体编辑属性为否时。
以上两种情况,理应禁止弹出“Calendar”窗体,即使弹出窗体,也禁止输入日期。然而实际情况却是,不管以上两种情况,仍能能够弹出“Calendar”窗体并能够输入日期,并且还同时开放了本来禁止编辑的窗体权限!这样,就破坏了窗体的权限管理,是个很大的安全隐患。

为此,红尘老师的几个版本都有相应的解决方案,但都未解决彻底。
刚开始的版本解决方法是:在“modCalendar”模块中加入了“If DateInputCtl.Locked Then Exit Function”一句,解决了第一个问题,但没有解决第2个问题。
在2010-12-11更新的附件中,反而去掉了这一句,改而在“frmCalendar”窗体中加入了

Function SetDateValue()
On Error Resume Next
    If Not g_txtDateInput Is Nothing Then
        If g_txtDateInput.Enabled And (Not g_txtDateInput.Locked) And g_txtDateInput.Parent.AllowEdits Then
            g_txtDateInput = Me.txtDate
        End If
    End If
    Call cmdCancel_Click
End Function

这一段,但在,在选项卡中使用,经测试无效,即无法满足上面的两种要求,使用也出错。所以红尘的改进版仍存在问题。

我的方法,是在红尘第一版的基础上改进,也用到了类似方法。

之前我试过多种方法,在“If DateInputCtl.Locked Then Exit Function”一句后再加上:
1)   If Screen.ActiveForm.Form.AllowEdits = False Then Exit Function
2)   If DateInputCtl.Parent.AllowEdits = False And Not DateInputCtl.Parent.NewRecord Then Exit Function   
3)  If Screen.ActiveControl.Parent.AllowEdits = False Then Exit Function
后来我选定了第2种方法,一直没问题,直到在选项卡中使用出现了我贴子所提出的问题。经测试,在选项卡中使用,不能使用“.Parent.AllowEdits ”方法,这也是红尘2010-12-11改进版存在同样问题的原因所在。所以就我只能改用第一种方法了,测试后正常,问题就此解决。


4#
 楼主| 发表于 2011-7-4 23:37:42 | 只看该作者
本帖最后由 zww3008 于 2011-7-4 23:44 编辑

哎,好事多磨。
再试了一下,在“If DateInputCtl.Locked Then Exit Function”一句后再加上:
If Screen.ActiveForm.Form.AllowEdits = False Then Exit Function
在目标控件在选项卡,或主窗体中时,使用是正常的,
但当目标控件在子窗体中时,If Screen.ActiveForm.Form.AllowEdits = False Then Exit Function这一句仍无效,Screen.ActiveForm.Form指的是主窗体,被禁止编辑的子窗体仍能能够输入日期,同时将子窗体属性“被”改为了允许编辑。

最后再试,不能使用=CalendarFor([txtPrintDate])方法,
只能使用VBA代码,在单击或双击事件中加入:
If Me.AllowEdits = True Then CalendarFor Me.txtPrintDate

到此,问题才算是勉强解决了。还请红尘版主再研究一下,看能否解决。
5#
发表于 2011-7-6 21:39:55 | 只看该作者
学习中,谢谢!
6#
发表于 2014-5-5 17:37:52 | 只看该作者
学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习
7#
发表于 2014-8-30 21:35:07 | 只看该作者
#在这里快速回复# 学习中,谢谢!
8#
发表于 2014-8-30 21:35:20 | 只看该作者
学习中,谢谢!
9#
发表于 2015-5-7 11:43:32 | 只看该作者
分分分
回复

使用道具 举报

10#
发表于 2015-6-23 11:34:27 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 07:53 , Processed in 0.087016 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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