Module
Contents
Index 🔎︎

# CreateUnoListener Function

建立一個偵聽者實例。

許多 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 執行階段期間錯誤。