Office中国论坛/Access中国论坛

标题: 红尘如烟的“日期选择器(Access Calendar)最终版”不能用在选项卡中(已改进) [打印本页]

作者: zww3008    时间: 2011-7-2 15:20
标题: 红尘如烟的“日期选择器(Access Calendar)最终版”不能用在选项卡中(已改进)
本帖最后由 zww3008 于 2011-7-4 22:56 编辑

试用了很多版本的日历控件,最终喜欢并用上了红尘如烟老师的这个版本,美观、使用方法多样且简单、最重要的是能应用在子窗体和多级孙窗体上。一直使用无佯,最近用在了选项卡上,发现弹出错误提示框“对像不支持该属性和方法”,不能用。希望红尘版主能改进一下,让很多仍在用ACCESS2003的提供更多的方便,谢谢。
作者: zhuyiwen    时间: 2011-7-2 22:24
可能是你自己的问题吧
我一直用得很好,而且都是在选项卡中用的
作者: zww3008    时间: 2011-7-4 22:41
本帖最后由 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改进版存在同样问题的原因所在。所以就我只能改用第一种方法了,测试后正常,问题就此解决。



作者: zww3008    时间: 2011-7-4 23:37
本帖最后由 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

到此,问题才算是勉强解决了。还请红尘版主再研究一下,看能否解决。

作者: marshhappy    时间: 2011-7-6 21:39
学习中,谢谢!
作者: hwhwenha01    时间: 2014-5-5 17:37
学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习
作者: \~暀倳洳煙    时间: 2014-8-30 21:35
#在这里快速回复# 学习中,谢谢!
作者: \~暀倳洳煙    时间: 2014-8-30 21:35
学习中,谢谢!
作者: ggguan@yeah.net    时间: 2015-5-7 11:43
分分分
作者: xianghui003    时间: 2015-6-23 11:34
谢谢分享
作者: ardu95    时间: 2016-10-11 06:59
新生学习
作者: lovesgh    时间: 2017-12-6 22:11
谢谢  收藏下
作者: wh133@163.com    时间: 2018-1-1 17:05
学习一下先,
作者: 灰太郎    时间: 2018-1-1 18:08
111111111111111




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3