Access中的事件和委托

实际上对.Net中的“委托(delegate)”的概念并不很懂。如果仅理解成自定义事件的话,在Access中也可以部分实现。

窗体2中的自定义事件FireFromF2被窗体1捕获处理,参数被传递。用法很简单,注意WithEvents关键字的使用。

accessevent1.png
accesseventf1.png

accesseventf21.png

上面的例子要求先f2开启状态下再打开f1才能成功注册事件(原因见最后的总结)。如果是子窗体的事件,就简单一些,应用更常见。

accesseventf31.png

总结

  • WithEvents设置了事件监听的钩子,这个钩子针对的是Object,是实例,而不是Class或类型。
  • 所以可以监听Application这样的全局物件,也可以监听某个具体的Form。但是不能对所有的Form(Access.Form类型)起作用。
  • VBA中不支持自动的up-casting;WithEvents也不支持对象数组。所以后期绑定的方法也基本行不通。

One Response to “Access中的事件和委托”

  1. ping
    March 23rd, 2008 | 3:30 am

    I would regard delegate as the pointer to the function. Furthermore, keyword event defines a special delegate that:
    e.g.

    public class Test
    {
    public event testEvent;
    }

    Though testEvent is public, it can only be invoked like a private member.

    Correct me if I am wrong.
    :)

Leave a reply

Random posts

  • 吕布
  • ClearCase的merge算法
  • 一些厂商提供的数据仓库工具
  • 真是个操蛋的墙
  • 超市用防盗磁扣的原理