Top > OOobbs > 39

OOobbs/39 Edit

  • サマリ: EventListenerが起動しているかどうか確認する方法
  • 環境: Calc
  • 状態: 解決
  • 投稿者: suou?
  • 投稿日: 2004-11-02 (火) 10:23:48

質問 Edit

 いつも丁寧に教えて頂きありがとうございます。  さて、Document Event Listenerが既に立ち上がっている(addされている)状態で、さらにaddしていくと、いくつものEventListenerが立ち上がるようです。立ち上がったEventListnerの数だけEventに対する反応を繰り返し、具合がよくありません。しかし、何かの加減でEventListnerがremoveされた場合、例えば、あるダイアログを表示させるたびにEventListenerが起動されているかどうかを調べて、起動されていなかったら起動するようにすれば、より強靭なシステムを作れるような気がします。EventListenerについてoListener.enabledといったようなoListnerの状態を調べるプロパーティはありますか?

回答 Edit

  • oListener を Global 変数としますから,その変数の値が Null かどうか調べるのがいいと思います。Null であれば EventListener も立ち上がっていないはずです。ということで,add と remove のときに IsNull 関数でしらべます。

たとえば,こんな感じです。

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 にしています。

  • はにゃ?? 2004-11-02 (火) 13:01:46
  • 早速ご回答を参考にしてSubを書き直し何度も試してみました。反応は一度だけで、とても具合がよく、心なしか全体の動作もきびきびした感じになりました。これもまた解決です。ありがとうございました。 -- suou? 2004-11-02 (火) 14:12:34


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes