IBM Lotus Symphony
|
创建一个侦听器实例。
许多 Uno 接口允许您在特定的侦听器接口上注册侦听器。这样就可以侦听特定的事件,并可以调用适当的侦听器方法。CreateUnoListener 函数等待调用的侦听器接口,然后将一个该接口支持的对象传送给接口。接着该对象被传送到注册侦听器的方法中。
oListener = CreateUnoListener( Prefixname, ListenerInterfaceName )
以下示例以一个 Basic 库对象为例。
Dim oListener
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )
CreateUnoListener 方法需要两个参数。第一个参数是一个前缀,下面对它进行了详细介绍。第二个参数是要使用的侦听器接口的全限定名称。
然后,需要将侦听器加入到广播对象中。通过调用相应的方法来加入侦听器即可实现此操作。有关方法通常位于“addFooListener”模式后面,其中“Foo”是侦听器接口类型(无“X”)。在此示例中,调用 addContainerListener 方法来注册 XContainerListener:
Dim oLib
oLib = BasicLibraries.Library1 ' Library1 must exist!
oLib.addContainerListener( oListener ) ' Register the listener
这样就注册了侦听器。当事件发生时,相应的侦听器将从 com.sun.star.container.XContainerListener 接口中调用适当的方法。
前缀将从 Basic 子例程中调用已注册的侦听器。Basic 运行时系统搜索并调用名为“PrefixListenerMethode”的 Basic 子例程或函数。如果不成功,将发生运行时错误。
在此示例中,侦听器接口使用了以下方法:
disposing:
侦听器基本接口(com.sun.star.lang.XEventListener):所有侦听器接口的基本接口
elementInserted:
com.sun.star.container.XContainerListener 接口的方法
elementRemoved:
com.sun.star.container.XContainerListener 接口的方法
elementReplaced:
com.sun.star.container.XContainerListener 接口的方法
在此示例中,前缀是 ContListener_。因此,需要在 Basic 中执行以下子例程:
ContListener_disposing
ContListener_elementInserted
ContListener_elementRemoved
ContListener_elementReplaced
每个侦听器类型中都存在一个含有事件信息的事件结构类型。当调用侦听器方法时,会将此事件的一个实例作为参数传送到方法。只要子程序声明中传送了相应的参数,Basic 侦听器方法就会调用这些事件对象。例如:
Sub ContListener_disposing( oEvent )
MsgBox "disposing"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementInserted( oEvent )
MsgBox "elementInserted"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementRemoved( oEvent )
MsgBox "elementRemoved"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementReplaced( oEvent )
MsgBox "elementReplaced"
MsgBox oEvent.Dbg_Properties
End Sub
如果不使用事件对象,就无需包括对象参数:
' Minimal implementation of Sub disposing
Sub ContListener_disposing
End Sub
![]() |
必须始终实现侦听器方法,以避免 Basic 运行时错误。 |