Collabora Office 21.06 Help
建立一個偵聽者實例。
許多 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 必須存在!
oLib.addContainerListener ( oListener ) ' 註冊偵聽者
這樣就註冊了偵聽者。當事件發生時,相應的偵聽者將從 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
每個偵聽者類型中都存在一個包含事件資訊的事件結構類型。當呼叫偵聽者方法時,會將此事件的一個實例作為參數傳送到該方法。只要 Sub 宣告中傳送了相應的參數,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
如果不使用事件物件,則無需含括該物件的參數:
' Sub disposing 的最小實作
Sub ContListener_disposing
End Sub
任何時候都必須執行偵聽者方法,以避免發生 Basic 執行階段期間錯誤。