Office中国论坛/Access中国论坛

标题: 【新手进阶】之十五:你可能遇到了一个假的标签效果 [打印本页]

作者: roych    时间: 2017-2-10 16:29
标题: 【新手进阶】之十五:你可能遇到了一个假的标签效果
       似乎很久没写新手进阶系列了,大家有没有很想我了?——想我的回个帖呗,让我数数有多少人。

      先说个老笑话。据说有一年,直板手机跟卡片相机打架,相机打不过,就回头找了单反过来,然后在路上遇到了一部拍照相机,暴揍一顿,然后翻过来准备狂扁摄像头,摄像头说,大哥,别打,别打!我是卧底啊。结果揍得更厉害了,还卧底?刚才就是你看到我们了,才跑那么快……你特么的肯定是被收买了。

      加了摄像头的手机,自然还是手机。然而,对于Access来说,加了控件的主体还是主体吗?——这个问题我先不回答,我们先来看看一个例子:

      版友ha0148希望在标签上加上一个鼠标移动的效果。大约就是鼠标移动到标签后,标签边框凸起,代码如下:
  1. Function ae(ctrl As Label)
  2.     ctrl.SpecialEffect = 1
  3.     ctrl.ForeColor = vbBlue
  4. End Function
复制代码
     在标签的mousemove事件中调用,当然是没问题的。问题在于鼠标移开之后呢?不好意思,Access里似乎没有mousemoveout的事件。
      从理论上讲,既然没有moveout事件,自然就是move完之后,该怎么样就怎么样了。也就是说,鼠标移动完之后,一直凸起,凸起……直到下次打开之前都是特么的凸起。——当然,聪明的他在窗体的主体上加了一个mousemove事件,所以移到主体上,自然恢复原状了。
     
      然而,这一切在于加了个Box之后,彻底被改变了。是的,加了一个方框之后,系统会认为你是移动到方框上,而不是移动到主体上。于是结果成了这样:
[attach]60750[/attach]
      而他希望的效果应该是这样:
[attach]60751[/attach]
      我们知道,和网页不一样的是,Access没有事件冒泡的玩法。也就是说,不能因为你点击了主体上的一个控件一层层递进而捕捉到主体的点击事件。如果要触发主体的点击事件,你必须在主体的空白处点击,而不是主体的控件上。
      
      这样一样,问题就很清晰了,只要把主体的movemove事件复制或者移植到box上就算是解决了。不过,写到这里,估计很多人意犹未尽吧?

      好,接下来,我们用另一个方案来解决它。那就是重新改写label的movemove事件。
      前面说过,Access没有mousemoveout的事件。那么,我们就应该想办法在mousemove时把其他标签的效果恢复过来了,而不是等到moveout的时候再解决。因此,代码可以这样写:
  1. Function label_Moveout(lbl As Label)
  2.     Dim ctr As Control
  3.     For Each ctr In Me.Controls
  4.         If ctr.ControlType = acLabel Then
  5.             If ctr.Name = lbl.Name Then
  6.                 ctr.SpecialEffect = 1
  7.                 ctr.ForeColor = vbBlue
  8.             Else
  9.                 ctr.SpecialEffect = 0
  10.                 ctr.ForeColor = vbBlue
  11.             End If
  12.         End If
  13.     Next
  14. End Function
复制代码
     这里就不解释代码了,大体的意思是说,如果不是当前的标签,就将它的效果恢复为原状。如果是,则修改为凸起状态。——如果仍然不懂,麻烦去看看新手进阶系列,前面有for的语法讲解。
      最后奉上附件2份,大家对比下。郑重声明:文件AA可能是遇到的假的标签效果。
[attach]60749[/attach]
---------------------------------------------
ha0148说,
您好!我试了一上,将方框背景设置为透明,或者在方框背景为透明将标签设置为黄色,都能快速复原。请问这个问题有什么办法解决吗?望能给予回复,谢谢!

---------------------------------------------
我想,你可能还没理解我前面所说的,mousemove之后,标签其实已经凸起了,这一点是毋庸置疑的。
现在的问题是,改方框的背景属性为什么可以解决呢?答案是:
改方框的背景属性,从视觉效果上隐藏了凸起的效果。否则,为什么是透明或者白色呢?
——因为白色跟主体的背景色是一致的,至于透明就更加不用说了。
——如果不信的话,你可以将方框改为白色的背景色,主体改为黄色的背景色。

作者: tmtony    时间: 2017-2-10 16:30
赞一个,先顶个沙发!
作者: 轻风    时间: 2017-2-10 16:38
赞一个,先顶个板凳!
作者: ha0148    时间: 2017-2-10 18:30
谢谢!roych老师,这个问题在困绕着了,我将您的代码复制下来好好研究一番,谢谢您。衷心感谢!!
作者: ly    时间: 2017-2-10 18:49
roych老师的大作,我是要学习的!谢谢!
作者: ha0148    时间: 2017-2-10 19:13
看来学习ACCESS 不是一朝一夕之事。这儿是一个好地方。有老师肯出手相助,谢谢老师们!!!!
作者: 2677598003    时间: 2017-2-11 06:43
[attach]60752[/attach]连续想念中,祝老师元宵节快乐!
作者: 风中漫步    时间: 2017-2-12 14:40
自带沙发捧场
作者: accben    时间: 2017-2-13 14:25
这个是学习做主控界面的基础。
roych教程都很不错。




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