使用 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 OnValidate 、 OnAfterChange |
在 XML 文件物件模型 (DOM) 變更期間,傳回表單之基礎 XML 文件的參照、傳回狀態及包含有關 XML 節點資訊的其他屬性。 還包括產生錯誤的方法。 |
DocActionEvent |
OnClick |
在按一下表單區域中按鈕期間,傳回表單之基礎 XML 文件的參照、傳回狀態以及來源 XML 節點。 |
DocContextChangeEvent |
OnContextChange |
會傳回 XML 文件物件模型 (DOM) 節點的相關資訊,這個節點是表單基礎 XML 文件的目前內容。 |
DocEvent |
OnSwitchView 、 OnAfterImport |
會在切換檢視或表單合併作業期間,傳回表單基礎 XML 文件的參照。 |
DocReturnEvent |
OnLoad 、 OnSubmitRequest |
會在載入或送出表單期間,傳回表單基礎 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 事件物件都會實作不同的屬性和方法。 如需特定事件物件的詳細資訊,請按一下上面「事件物件」表格中的適當物件。