OOobbs/39
質問
いつも丁寧に教えて頂きありがとうございます。 さて、Document Event Listenerが既に立ち上がっている(addされている)状態で、さらにaddしていくと、いくつものEventListenerが立ち上がるようです。立ち上がったEventListnerの数だけEventに対する反応を繰り返し、具合がよくありません。しかし、何かの加減でEventListnerがremoveされた場合、例えば、あるダイアログを表示させるたびにEventListenerが起動されているかどうかを調べて、起動されていなかったら起動するようにすれば、より強靭なシステムを作れるような気がします。EventListenerについてoListener.enabledといったようなoListnerの状態を調べるプロパーティはありますか? 回答
たとえば,こんな感じです。 Global oListener as object Sub RegisterListener() If IsNull(oListener) Then oListener = CreateUnoListener("DL_", "com.sun.star.document.XEventListener") ThisComponent.com_sun_star_document_XEventBroadcaster_addEventListener(oListener) Else MsgBox "not null" End If End Sub Sub UnRegisterListener() If NOT IsNull(oListener) Then ThisComponent.com_sun_star_document_XEventBroadcaster_removeEventListener(oListener) Dim oNull As Object oListener = oNull Else MsgBox "null" End If End Sub Sub Dl_notifyEvent(oEvent)'oListen As Object) Select Case oEvent.EventName Case "OnUnload" msgbox "OnUnload" Case "OnPrint" msgbox "OnPrint" Case "OnSaveDone" msgbox "OnSaveDone" End Select End Sub Sub Dl_disposing(oEvent) 'Do Nothing End Sub 普通にすると一度 oListener に UnoListener を作成すると Null ではなくなります。そのため,Listener を削除するときに Null なオブジェクトを代入することで Null にしています。
|