基本的なマネージ コード フォーム テンプレートを作成する方法
適用対象: InfoPath 2010 | InfoPath Forms Services | Office 2010 | SharePoint Server 2010 | Visual Studio | Visual Studio Tools for Microsoft Office
Microsoft InfoPath 2010 の場合は、Visual Basic または C# でビジネス ロジックを記述できます。これを実行するには、フォーム テンプレートを InfoPath のデザイン モードで開き、いずれかのユーザー インターフェイス コマンドを使用してイベント ハンドラーを追加します。これにより、コードを記述するための Microsoft Visual Studio Tools for Applications 開発環境が開きます。既定では、Microsoft Visual Studio Tools for Applications を使用して作成したフォーム テンプレート プロジェクトは、Microsoft.Office.InfoPath 名前空間によって提供されるマネージ コード オブジェクト モデルに対して動作します。
このチュートリアルでは、最初に、Microsoft Visual Studio Tools for Applications 開発環境で C# または Visual Basic を使用して、単純な Hello World アプリケーションを作成する方法を示します。チュートリアルの最後には、User クラスの UserName プロパティを使用して現在のユーザー名を取得し、[テキスト ボックス] コントロールにその値を設定する方法を示すコード サンプルがあります。
前提条件
Microsoft Visual Studio Tools for Applications 開発環境を使用してこのチュートリアルを完了するには、以下が必要です。
- Microsoft InfoPath 2010 がインストールされた Microsoft Visual Studio Tools for Applications。
Visual Studio Tools for Applications の Hello World
以下のチュートリアルでは、Microsoft Visual Studio Tools for Applications 開発環境で ButtonEvent クラスの Clicked イベントのイベント ハンドラーを記述することによって、[ボタン] コントロールに関連付けられた単純な警告ダイアログ ボックスを表示する方法を学びます。
新しいプロジェクトを作成してプログラミング言語を指定する
InfoPath デザイン モードを起動して、[空白 (InfoPath エディター)] フォーム テンプレートをダブルクリックします。
使用するプログラミング言語を指定するために、[ファイル] タブをクリックし、[フォームのオプション] をクリックして、[カテゴリ] の一覧の [プログラミング] をクリックします。次に、[フォーム テンプレートのコード言語] ドロップダウン リストから [Visual Basic] または [C#] を選択します。
注意
[フォーム テンプレートのコード言語] ドロップダウン リスト内のその他のプログラミング言語オプションでは、以前のバージョンの InfoPath との互換性が提供されています。[C# (InfoPath 2007 互換)] および [Visual Basic (InfoPath 2007 互換)] オプションは、このトピック内の手順で機能します。[C# (InfoPath 2003 互換)] および [Visual Basic (InfoPath 2003 互換)] オプションを使用する場合は、「[ウォークスルー] InfoPath 2003 オブジェクト モデルを使用して基本的なフォーム テンプレートを作成およびデバッグする方法」を参照してください。
これで、[ボタン] コントロールを追加して、イベント ハンドラーを作成できます。
ボタン コントロールとイベント ハンドラーを追加する
[コントロール] グループの [ボタン] コントロールをクリックして、ボタン コントロールをフォームに追加します。
[ボタン] コントロールをダブルクリックして、リボンの [プロパティ] タブの [ラベル] プロパティに「Hello」と入力し、[ユーザー設定コード] をクリックします。入力を要求するメッセージが表示されたら、フォームに HelloWorld という名前を付けて保存します。
これにより、[ボタン] コントロールの Clicked イベントのイベント ハンドラーにカーソルが置かれた状態で [Visual Studio Tools for Applications] 環境が開きます。
これでボタンのイベント ハンドラーにフォーム コードを追加する準備ができました。
イベント ハンドラーに "Hello World" コードを追加してフォームをプレビューする
イベント ハンドラー スケルトンに次のように入力します。
MessageBox.Show("Hello World!");
MessageBox.Show("Hello World!")
フォーム テンプレートのコードは次のようになります。
using Microsoft.Office.InfoPath; using System; using System.Windows.Forms; using System.Xml; using System.Xml.XPath; namespace HelloWorld { public partial class FormCode { public void InternalStartup() { ((ButtonEvent)EventManager.ControlEvents["CTRL1_5"]).Clicked += new ClickedEventHandler(CTRL1_5_Clicked); } public void CTRL1_5_Clicked(object sender, ClickedEventArgs e) { MessageBox.Show("Hello World!"); } } }
Imports Microsoft.Office.InfoPath Imports System Imports System.Windows.Forms Imports System.Xml Imports System.Xml.XPath Namespace HelloWorld Public Class FormCode Private Sub InternalStartup(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Startup AddHandler DirectCast(EventManager.ControlEvents("CTRL1_5"), ButtonEvent).Clicked, AddressOf CTRL1_5_Clicked End Sub Public Sub CTRL1_5_Clicked(ByVal sender As Object, ByVal e As ClickedEventArgs) MessageBox.Show("Hello World!") End Sub End Class End Namespace
InfoPath デザイン モード ウィンドウに切り替えます。
[ホーム] タブの [プレビュー] ボタンをクリックします。
フォーム上の [Hello] ボタンをクリックします。
"Hello World!" という内容のメッセージ ボックスが表示されます。
次の手順は、フォーム コードにデバッグ用のブレークポイントを追加する方法を示しています。
フォーム コードをデバッグする
Microsoft Visual Studio Tools for Applications ウィンドウに戻ります。
行の左にあるグレーのバーをクリックします。
MessageBox.Show("Hello World!");
MessageBox.Show("Hello World!")
赤い円が表示され、コード行が強調表示されます。これは、ランタイムがフォーム コードのこのブレークポイントで一時停止することを表しています。
[デバッグ] メニューの [デバッグ開始] をクリックします (または F5 キーを押します)。
InfoPath の [プレビュー] ウィンドウで、フォーム上の [Hello] ボタンをクリックします。
Microsoft Visual Studio Tools for Applications コード エディターにフォーカスが移り、ブレークポイント行が強調表示されます。
[デバッグ] メニューで [ステップ オーバー] をクリックするか、または Shift キーを押しながら F8 キーを押して、コード内を順に移動します。
イベント ハンドラー コードが実行され、"Hello World!" メッセージが表示されます。
[OK] をクリックして Microsoft Visual Studio Tools for Applications コード エディターに戻り、[デバッグ] メニューの [デバッグの停止] をクリックするか、または Ctrl キーと Alt キーを押しながら Break キーを押します。
現在のユーザーの名前を取得する
次の例では、User クラスの UserName プロパティを使用して現在のユーザーの名前を取得し、Loading イベントのイベント ハンドラーを使用して、[テキスト ボックス] コントロールの値を挿入する方法を学びます。
[テキスト ボックス] コントロールへの値の設定は、XPathNavigator クラスのインスタンスを使用して、そのコントロールがバインドされている XML ノードに現在のユーザーの名前を書き込んで行います。
まず、XmlForm クラスの MainDataSource プロパティを呼び出して、フォームの基盤となる XML ドキュメントを表す DataSource クラスのインスタンスを取得します。次に、DataSource オブジェクトが CreateNavigator メソッドを呼び出して、このメソッドが XPathNavigator オブジェクトを作成し、そのオブジェクトをフォームのメイン データ ソースのルート ノードに置きます。
XPathNavigator クラスの SelectSingleNode メソッドが呼び出され、フォームのデータ ソースの employee フィールドを選択します。最後に、SetValue メソッドが呼び出され、UserName プロパティを使用してそのフィールドの値を設定します。
マネージ コード フォーム テンプレートでの System.Xml の作業の詳細については、「[方法] XPathNavigator クラスおよび XPathNodeIterator クラスを操作する方法」を参照してください。
Loading イベント ハンドラーを追加する
前の手順で作成した HelloWorld フォーム テンプレートを InfoPath デザイン モードで開きます。
[表示] タブの [フィールドの表示] を選択します。
[マイフィールド] フォルダーを右クリックして [追加] をクリックします。
[名前] に「employee」と入力して、[OK] をクリックします。
employee フィールドをビューにドラッグします。
[開発] タブの [Loading イベント] をクリックします。
これにより Loading イベントのイベント ハンドラーが作成され、コード エディターのフォーカスがそのイベント ハンドラーに移動します。
コード エディターで、以下のように入力します。
public void FormEvents_Loading(object sender, LoadingEventArgs e) { XPathNavigator dataSource; dataSource = this.MainDataSource.CreateNavigator(); dataSource.SelectSingleNode( "/my:myFields/my:employee", NamespaceManager).SetValue(this.User.UserName); }
Public Sub FormEvents_Loading(ByVal sender As Object, ByVal e As LoadingEventArgs) Dim dataSource As XPathNavigator dataSource = Me.MainDataSource.CreateNavigator dataSource.SelectSingleNode( _ "/my:myFields/my:employee", NamespaceManager).SetValue(Me.User.UserName) End Sub
InfoPath フォーム デザイン ウィンドウに切り替え、[ホーム] タブの [プレビュー] ボタンをクリックしてフォームをプレビューします。
employee フィールドに現在のユーザー名が自動的に入力されます。
次の手順
他のコントロールとイベントのイベント ハンドラーの操作については、「[方法] イベント ハンドラーを追加する方法」を参照してください。
フォーム テンプレート内でのコードのプレビューとデバッグについては、「[方法] コードを含む InfoPath フォーム テンプレートをプレビューおよびデバッグする方法」を参照してください。
マネージ コード フォーム テンプレートを展開する方法については、「[方法] コードを含む InfoPath フォーム テンプレートを展開する方法」を参照してください。
マネージ コード フォーム テンプレートの InfoPath オブジェクト モデルと一般的なプログラミング タスクについては、「InfoPath オブジェクト モデルと一般的な開発タスクについて」を参照してください。