次の方法で共有


[WALKTHROUGH] 基本的なマネージ コード フォーム テンプレートを作成する方法

Microsoft Office InfoPath 2003 を使用してマネージ コード言語 (Visual Basic または C#) でビジネス ロジックを作成する場合は、Microsoft Visual Studio .NET 2003 と Microsoft Office InfoPath 2003 Toolkit for Visual Studio .NET か、または Visual Studio 2005 Tools for the Microsoft Office System と Microsoft Office InfoPath 2003 Toolkit for Visual Studio 2005 で作成された InfoPath プロジェクトを使用します。この両方のマネージ コード開発環境は、Microsoft.Office.Interop.InfoPath.SemiTrust アセンブリによって提供される COM Interop マネージ コード オブジェクト モデルに依存し、それだけをサポートしています。

Microsoft Office InfoPath 2007 の場合は、Visual Basic または C# でビジネス ロジックを書くことができます。これを実行するには、フォーム テンプレートをデザイン モードで開き、いずれかのユーザー インターフェイス コマンドを使用してイベント ハンドラを追加します。これにより、コードを書くための Microsoft Visual Studio Tools for Applications (VSTA) 開発環境が開きます。既定では、VSTA を使用して作成したフォーム テンプレート プロジェクトは、Microsoft.Office.InfoPath アセンブリによって提供される新しいマネージ コード オブジェクト モデルに対して動作します。

または、Visual Studio 2005 に Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System または Visual Studio 2008 と Visual Studio Tools for Office がインストールされている場合は、Visual Studio から開始し、InfoPath フォーム テンプレート プロジェクトを作成し、InfoPath デザイン モードを使用することで、フォームのデザインとビジネス ロジックの追加をすべて Visual Studio 環境で実行できます。

最初のチュートリアルでは、VSTA および Visual Studio 開発環境で C# または Visual Basic を使用して、単純な Hello World アプリケーションを作成する方法を示します。チュートリアルの最後には、System.Environment.UserName を正しく使用して現在のユーザー名を取得し、[テキスト ボックス] コントロールにその値を入力する方法を示すコード サンプルがあります。

必要条件

VSTA 開発環境を使用してこのチュートリアルを完了するには、以下が必要です。

  • Microsoft Visual Studio Tools for Applications (VSTA) がインストールされた Microsoft Office InfoPath 2007。

Visual Studio 開発環境に統合された InfoPath デザイン モードを使用してこのチュートリアルを完了するには、以下が必要です。

  • Microsoft Office InfoPath 2007

  • Microsoft Visual Studio 2005 と Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System または Visual Studio 2008 と Visual Studio Tools for Office

メモメモ :

Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System のダウンロードとインストールについては、「InfoPath 開発者ポータル」を参照してください。

VSTA での Hello World

以下のチュートリアルでは、ButtonEvent クラスの Clicked イベントのイベント ハンドラを書くことによって、[ボタン] コントロールに関連付けられた単純な警告ダイアログ ボックスを表示する方法を学びます。この手順では、Microsoft Visual Studio Tools for Applications (VSTA) 開発環境を使用していることを前提としています。

新しいプロジェクトを作成してプログラミング言語 (Visual Studio Tools for Applications) を指定する

  1. InfoPath を起動します。

  2. [フォームの入力] ダイアログ ボックスで、[フォームのデザイン] の [フォーム テンプレートのデザイン] をクリックします。

    メモメモ :

    InfoPath が既に実行されている場合に [フォーム テンプレートのデザイン] ダイアログ ボックスを表示するには、[ファイル] メニューの [フォーム テンプレートのデザイン] をクリックします。

  3. [フォーム テンプレートのデザイン] ダイアログ ボックス内で [フォーム テンプレート] をクリックし、[空白] をクリックして、[ブラウザ互換の機能のみを有効にする] チェック ボックスをオフにして、[OK] をクリックします。

  4. [ツール] メニューの [フォームのオプション] をクリックします。

  5. [カテゴリ] リストの [プログラミング] をクリックし、[フォーム テンプレートのコード言語] ドロップダウン リストから [Visual Basic] または [C#] を選択して [OK] をクリックします。

    これで、[ボタン] コントロールを追加して、イベント ハンドラを作成できます。

ボタン コントロールとイベント ハンドラを追加する

  1. [デザイン タスク] 作業ウィンドウの [コントロール] をクリックします。

  2. [ボタン] コントロールをフォーム上にドラッグします。

  3. [ボタン] コントロールをダブルクリックして "ラベル" プロパティに「Hello」と入力し、[フォームのコードを編集] をクリックします。プロンプトが表示されたら、フォームに HelloWorld という名前を付けて保存します。

    これにより、[ボタン] コントロールの Clicked イベントのイベント ハンドラにカーソルが置かれた状態で [Visual Studio Tools for Applications] 環境が開きます。

    これでボタンのイベント ハンドラにフォーム コードを追加する準備ができました。

イベント ハンドラに "Hello World" コードを追加してフォームをプレビューする

  1. イベント ハンドラ スケルトンに次のように入力します。

    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
    
  2. InfoPath デザイン モード ウィンドウに切り替えます。

  3. [基本コントロール] ツール バーの [プレビュー] ボタンをクリックします。

  4. [Hello] ボタンをクリックします。

    "Hello World!" という内容のメッセージ ボックスが表示されます。

    次の手順は、フォーム コードにデバッグ用のブレークポイントを追加する方法を示しています。

フォーム コードをデバッグする

  1. VSTA ウィンドウに戻ります。

  2. 行の左にあるグレーのバーをクリックします。

    MessageBox.Show("Hello World!");
    
    MessageBox.Show("Hello World!")
    

    赤い円が表示され、コード行が強調表示されます。これは、ランタイムがフォーム コードのこのブレークポイントで一時停止することを表しています。

  3. [デバッグ] メニューの [デバッグ開始] をクリックします (または F5 キーを押します)。

  4. InfoPath の [プレビュー] ウィンドウで [Hello] ボタンをクリックします。

  5. VSTA コード エディタにフォーカスが移り、ブレークポイント行が強調表示されます。

  6. [デバッグ] メニューで [ステップ オーバー] をクリックするか、または F10 キーを押して、コード内を順に移動します。

  7. イベント ハンドラ コードが実行され、"Hello World!" メッセージが表示されます。

  8. [OK] をクリックして VSTA コード エディタに戻り、[デバッグ] メニューの [デバッグの停止] をクリックするか、または Ctrl + Alt + Break を押します。

Visual Studio に統合された InfoPath デザイン モードでの Hello World

以下の手順では、同じ Hello World コードを、Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System または Visual Studio 2008 と Visual Studio Tools for Office をインストールすることによって、Visual Studio 2005 に統合された InfoPath デザイン モードを有効にして作成する方法を示します。

新しいプロジェクトを作成してプログラミング言語 (Visual Studio) を指定する

  1. Visual Studio を起動します。

  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  3. [プロジェクト] の種類で [Visual C#] フォルダを展開し、[Office] をクリックして (Visual Studio 2008 ではさらに [2007] をクリックします)[InfoPath フォーム テンプレート] をクリックします。

    または、[他の言語] フォルダを展開して [Visual Basic] フォルダを展開し、[Office] をクリックして (Visual Studio 2008 ではさらに [2007] をクリックします)[InfoPath フォーム テンプレート] をクリックします。

  4. プロジェクトの名前を HelloWorld にして、[OK] をクリックします。

  5. [フォーム テンプレートのデザイン] ダイアログ ボックス内で [フォーム テンプレート] をクリックし、[空白] をクリックして、[OK] をクリックします。

    [manifest.xsf [Design]] というタブに、統合された InfoPath フォーム テンプレート デザイン ウィンドウが表示されます。

    これで、[ボタン] コントロールを追加して、イベント ハンドラを作成できます。

ボタン コントロールとイベント ハンドラを追加する

  • [デザイン タスク] 作業ウィンドウの [コントロール] をクリックします。
メモメモ :

[デザイン タスク] 作業ウィンドウが表示されていない場合は、[表示] メニューの [デザイン タスク] をクリックします。

  1. [ボタン] コントロールを [ツールボックス] からフォーム上にドラッグします。

  2. [ボタン] コントロールをダブルクリックして "ラベル" プロパティに「Hello」と入力し、[フォームのコードを編集] をクリックします。プロンプトが表示されたら、フォームを保存します。

    これにより、[ボタン] コントロールの Clicked イベントのイベント ハンドラにカーソルが置かれた状態でコード エディタ ウィンドウが開きます。

    これでボタンのイベント ハンドラにフォーム コードを追加する準備ができました。

イベント ハンドラに "Hello World" コードを追加してフォームをプレビューする

  1. イベント ハンドラ スケルトンに次のように入力します。

    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
    
  2. [デバッグ] メニューの [デバッグ開始] をクリックします (または F5 キーを押します)。

    InfoPath の [プレビュー] ウィンドウが表示されます。

  3. [Hello] ボタンをクリックします。

    "Hello World!" という内容のメッセージ ボックスが表示されます。

  4. [OK] をクリックし、[基本コントロール] ツール バーの [プレビューを閉じる] ボタンをクリックして、Visual Studio に戻ります。

    次の手順は、フォーム コードにデバッグ用のブレークポイントを追加する方法を示しています。

フォーム コードをデバッグする

  1. [FormCode.cs] タブまたは [FormCode.vb] タブをクリックして、コード エディタに戻ります。

  2. 行の左にあるグレーのバーをクリックします。

    MessageBox.Show("Hello World!");
    
    MessageBox.Show("Hello World!")
    

    赤い円が表示され、コード行が強調表示されます。これは、ランタイムがフォーム コードのこのブレークポイントで一時停止することを表しています。

  3. [デバッグ] メニューの [デバッグ開始] をクリックします (または F5 キーを押します)。

  4. InfoPath の [プレビュー] ウィンドウで [Hello] ボタンをクリックします。

  5. コード エディタにフォーカスが移り、ブレークポイント行が強調表示されます。

  6. [デバッグ] メニューで [ステップ オーバー] をクリックするか、または F10 キーを押して、コード内を順に移動します。

  7. イベント ハンドラ コードが実行され、"Hello World!" メッセージが表示されます。

  8. [OK] をクリックしてコード エディタに戻り、[デバッグ] メニューの [デバッグの停止] をクリックするか、または Ctrl + Alt + Break を押します。

現在のユーザーの名前を取得する

.NET Framework クラスを使用することで、スクリプトで書いたビジネス ロジックで作業する際には使用が困難な、追加の機能にアクセスすることができます。次の例では、Environment クラスの UserName プロパティを使用して現在のユーザーの名前を取得し、Loading イベントのイベント ハンドラを使用して、[テキスト ボックス] コントロールの値を挿入する方法を学びます。

[テキスト ボックス] コントロールに値を挿入するには、XPathNavigator クラスの 2 つのインスタンスを使用します。

最初のインスタンスは、XmlForm クラスの MainDataSource プロパティを使用して、フォームの基盤となる XML ドキュメントを表現する DataSource クラスのインスタンスを取得します。この DataSource クラスのインスタンスは、CreateNavigator メソッドを使用して、XPathNavigator を XML ドキュメントのルート ノードに置きます。

XPathNavigator の 2 番目のインスタンスは、最初のインスタンスを使用して XML ドキュメントの employee フィールドに置かれ、その後 XPathNavigator クラスの SetValue メソッドによって、フィールドの値が UserName プロパティで設定されます。

マネージ コード フォーム テンプレートでの System.Xml の作業の詳細については、「[方法] XPathNavigator クラスおよび XPathNodeIterator クラスを操作する方法」を参照してください。

Loading イベント ハンドラを追加する

  1. 前の手順で作成した HelloWorld プロジェクトを開きます。

    InfoPath と Microsoft Visual Studio Tools for Applications (VSTA) を使用している場合は、InfoPath を起動して、InfoPath のデザイン モードでフォームを開きます。Visual Studio 2005 と Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System または Visual Studio 2008 と Visual Studio Tools for Office を使用している場合は、Visual Studio を起動してプロジェクトを開きます。

  2. [表示] メニューの [データ ソース] をクリックします。

  3. [マイフィールド] フォルダを右クリックして [追加] をクリックします。

  4. [名前] ボックスに「employee」と入力して [OK] をクリックします。

  5. employee フィールドをビューにドラッグします。

  6. InfoPath で作業している場合は、[ツール] メニューの [プログラミング] をクリックし、[Loading イベント] をクリックします。

    Visual Studio で作業している場合は、[挿入] メニューの [イベント] をクリックし、[Loading イベント] をクリックします。

    これにより Loading イベントのイベント ハンドラが作成され、コード エディタのフォーカスがそのイベント ハンドラに移動します。

  7. コード エディタで、以下のように入力します。

    public void FormEvents_Loading(object sender, LoadingEventArgs e)
    {
       System.Xml.XPath.XPathNavigator root, user;
       root = this.MainDataSource.CreateNavigator();
       user = root.SelectSingleNode("//my:employee", this.NamespaceManager);
       user.SetValue(System.Environment.UserName);
    }
    
    Public Sub FormEvents_Loading(ByVal sender As Object, ByVal e As LoadingEventArgs)
       Dim root, user As System.Xml.XPath.XPathNavigator
       root = Me.MainDataSource.CreateNavigator
       user = root.SelectSingleNode("//my:employee", Me.NamespaceManager)
       user.SetValue(System.Environment.UserName)
    End Sub
    
  8. Microsoft Visual Studio Tools for Applications (VSTA) で作業している場合は、InfoPath フォーム デザイン ウィンドウに切り替え、[プレビュー] ボタンをクリックしてフォームをプレビューします。

    Visual Studio で作業している場合は、[デバッグ] メニューの [デバッグ開始] をクリックするかまたは F5 キーを押して、フォームをプレビューします。

次の手順

関連項目

参照

XmlForm