共用方式為


使用 InfoPath 2003 物件模型響應表單事件

您可以撰寫程式碼來回應使用者填寫表單時所發生的各種事件。 若要在 InfoPath 中使用事件,您可以在 InfoPath Designer 中建立事件處理常式。

InfoPath 事件處理常式應該在 InfoPath Designer 中建立,因為使用 InfoPath 2003 相容物件模型時,InfoPath 會自動在表單的程式碼檔案 (FormCode.cs 或 FormCode.vb) 中加入正確的宣告並套用屬性 (InfoPathEventHandlerAttribute ),以識別及接收此事件處理常式。 在您建立事件處理常式後,您不應該在表單程式碼檔案中修改該處理常式的宣告與屬性。

如需建立 InfoPath 事件處理程式的相關信息,請參閱 使用 InfoPath 2003 物件模型新增事件處理程式

事件物件的概觀

InfoPath 2003 相容的物件模型會實作九個在 Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間中公開的事件物件。 下表列出每一個 InfoPath 事件物件、其相關的事件處理常式以及提供的功能描述。

名稱 事件處理常式 描述
DataDOMEvent
OnBeforeChange
OnValidateOnAfterChange
在 XML 文件物件模型 (DOM) 變更期間,傳回表單之基礎 XML 文件的參照、傳回狀態及包含有關 XML 節點資訊的其他屬性。 還包括產生錯誤的方法。
DocActionEvent
OnClick
在按一下表單區域中按鈕期間,傳回表單之基礎 XML 文件的參照、傳回狀態以及來源 XML 節點。
DocContextChangeEvent
OnContextChange
會傳回 XML 文件物件模型 (DOM) 節點的相關資訊,這個節點是表單基礎 XML 文件的目前內容。
DocEvent
OnSwitchViewOnAfterImport
會在切換檢視或表單合併作業期間,傳回表單基礎 XML 文件的參照。
DocReturnEvent
OnLoadOnSubmitRequest
會在載入或送出表單期間,傳回表單基礎 XML 文件的參照及傳回狀態。
MergeEvent
OnMergeRequest
傳回可以在 OnMergeRequest 事件期間使用的屬性及方法,以程式設計方式與表單基礎 XML 文件互動,以及判斷合併屬性,例如正在合併的檔案數。
SaveEvent
OnSaveRequest
傳回若干在 OnSaveRequest 事件處理常式的儲存作業期間可以使用的屬性及方法,以程式和表單基礎 XML 文件互動、判斷儲存屬性以及執行儲存作業。
SignEvent
OnSign
用來在數位簽章中新增額外資料。
VersionUpgradeEvent
OnVersionUpgrade
在版本更新作業期間,傳回表單之基礎 XML 文件的參照、傳回狀態以及文件和解決方案版本編號。

使用事件物件

當您建立事件處理程式時,InfoPath 會在專案的表單程式代碼檔案中建立事件處理程式的宣告, (FormCode.cs 或FormCode.vb) 。 在此事件處理常式的宣告中,InfoPath 會使用 e 當做傳遞給此事件處理常式的參數名稱。 此參數包含與事件處理程式相關聯的事件物件。

例如,當您在設計模式中建立 OnLoad 事件的事件處理常式時 (按一下 [開發人員] 索引標籤中的 On Load 事件),InfoPath 會針對接收 DocReturnEvent 物件的事件處理常式,將宣告新增至表單程式碼檔案,然後開啟程式碼編輯器,好讓您可以新增程式碼至下列事件處理常式的宣告。

// The following function handler is created by Microsoft Office 
// InfoPath. Do not modify the type or number of arguments.
[InfoPathEventHandler(EventType=InfoPathEventType.OnLoad)]
public void FormEvents_OnLoad(DocReturnEvent e)
{
   // Write your code here.
}
' The following function handler is created by Microsoft Office 
' InfoPath. Do not modify the type or number of arguments.
<InfoPathEventHandler(EventType:=InfoPathEventType.OnLoad)> _
Public Sub FormEvents_OnLoad(ByVal e As DocReturnEvent)
   ' Write your code here.
End Sub

撰寫事件處理程式的程式代碼時,您可以使用透過 e 參數傳遞之事件物件所實作的屬性和方法。 例如,在下列 OnBeforeChange 事件處理程式中,DataDOMEvent 事件物件的 NewValue 屬性是用來檢查剛變更的欄位值。 如果為空白,DataDOMEvent 事件物件的 ReturnMessage 屬性會用來在對話方塊中對使用者顯示錯誤,而且 ReturnStatus 屬性會設定為 false,表示不應該接受使用者所做的變更。

[InfoPathEventHandler(MatchPath="/my:myFields/my:field1", 
    EventType=InfoPathEventType.OnBeforeChange)]
public void field1_OnBeforeChange(DataDOMEvent e)
{
   // Determine whether there is a new value.
   if ((string)e.NewValue == "")
   {
      // The value is blank, so display an error message and roll
      // back the changes.
      e.ReturnMessage = "You must supply a value for this field.";
      e.ReturnStatus = false;
      return;
   }
}
<InfoPathEventHandler(MatchPath:="/my:myFields/my:field1", _EventType:=InfoPathEventType.OnBeforeChange)> _
Public Sub field1_OnBeforeChange(ByVal e As DataDOMEvent)
   ' Determine whether there is a new value.
   If (e.NewValue = "") Then
      ' The value is blank, so display an error message and roll back
      ' the changes.
      e.ReturnMessage = "You must supply a value for this field."
      e.ReturnStatus = False
      Return
   End If
End Sub

注意事項

[!注意事項] 在 InfoPath 2003 相容之物件模型中的每一個 InfoPath 事件物件都會實作不同的屬性和方法。 如需特定事件物件的詳細資訊,請按一下上面「事件物件」表格中的適當物件。