チュートリアル : ユーザー コンテキストに応じた操作ウィンドウの変更
重要 このトピックに記載されている Microsoft Word に関する情報は、マイクロソフトがカスタム XML に関連する特定の機能の実装を Microsoft Word から削除した 2010 年 1 月より前にマイクロソフトがライセンスを供与した Microsoft Word 製品上で実行されるプログラムを使用または開発する、米国およびその領土外に在住する個人および組織での利用のみを目的として提供されるものです。 ここに記載されている Microsoft Word に関する情報を、2010 年 1 月以降にマイクロソフトがライセンスを供与した Microsoft Word 製品上で実行されるプログラムを使用または開発する、米国およびその領土内の個人または組織が参照および使用することはお勧めしません。これに該当する製品は、この日付以前にライセンスが供与された製品、および米国外での使用を目的として購入またはライセンスが供与された製品と同様には動作しません。
このチュートリアルでは、XMLNode イベントへの応答方法について説明します。 ユーザーがドキュメント内でカーソルを移動すると、操作ウィンドウのコントロールが非表示になったり表示されたりします。
対象: このトピックの情報は、Word 2007 と Word 2010 のドキュメント レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このチュートリアルでは、次の作業について説明します。
操作ウィンドウへのコントロールの追加
アプリケーションが開かれたときの操作ウィンドウの表示
XML ノード内のユーザー アクションに基づく操作ウィンドウ上のコントロールの非表示および表示
注意
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
-
Microsoft Office 開発者ツールを含むエディションの Visual Studio 2010。 詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.100\).md)」を参照してください。
- Word 2007 または Word 2010。
プロジェクトの作成
まず、Word 文書プロジェクトを作成します。
新しいプロジェクトを作成するには
My Dynamic Actions Pane という名前の Word 文書プロジェクトを作成します。 ウィザードで、[新規ドキュメントの作成] をクリックします。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
新しい Word 文書がデザイナーで開き、My Dynamic Actions Pane プロジェクトがソリューション エクスプローラーに追加されます。
文書にマップするスキーマの作成
XML ノードを作成するには、XML スキーマから要素を文書にドラッグします。 まずスキーマ ファイルを作成し、次にそのスキーマに対応する文書を作成し、要素を文書にマップします。
XML スキーマを作成するには
ソリューション エクスプローラーで My Dynamic Actions Pane プロジェクトを選択します。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] ペインの [XML スキーマ] をクリックします。
スキーマに ActionsPaneSample.xsd という名前を指定し、[追加] をクリックします。
ソリューション エクスプローラーで ActionsPaneSample.xsd を右クリックし、[ファイルを開くアプリケーションの選択] をクリックします。
[ファイルを開くアプリケーションの選択] ダイアログ ボックスで、[XML エディター] をクリックし、[OK] をクリックします。
XML エディター内のテキストを、次のテキストに置き換えます。
<?xml version="1.0" encoding="utf-8" ?> <xs:schema targetNamespace="https://schemas.microsoft.com/vsto/samples" elementFormDefault="qualified" xmlns="https://schemas.microsoft.com/vsto/samples" xmlns:mstns="https://schemas.microsoft.com/vsto/samples" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Sample" type="SampleType"></xs:element> <xs:complexType name="SampleType"> <xs:all> <xs:element name="Insert" type="InsertType" minOccurs="0" maxOccurs="1" /> <xs:element name="Table" type="xs:string" minOccurs="0" maxOccurs="1" /> </xs:all> </xs:complexType> <xs:complexType name="InsertType"> <xs:sequence> <xs:element name="MemoTo" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="MemoFrom" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="MemoSubject" type="xs:string" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </xs:schema>
プロジェクトを保存します。
文書へのテキストと XML の追加
このチュートリアルでは、メモ形式の文書を使用します。 文書にテキストを追加し、XML 要素を文書内にマップします。
文書にテキストを追加するには
ソリューション エクスプローラーで ThisDocument.cs または ThisDocument.vb を右クリックし、[デザイナーの表示] をクリックします。
Word 文書に次のテキストを追加します。
MEMORANDUM
To:
From:
Subject:
The following table lists the contact information you requested:
Name
Address
City
State
Postal Code
Nancy Davolio
507 - 20th Ave. E., Apt. 2A
Seattle
WA
98122
次に、メモ内のテキストに XML 要素をマップします。 マップする XML 要素ごとに、XMLNode コントロールが作成されます。 XMLNode コントロールには、Node という単語に、親要素と子要素の名前が追加された名前が設定されます。 たとえば、上記のスキーマから Insert 要素をマップすると、SampleInsertNode という名前が設定されます。 コントロールの詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。
スキーマを文書に添付するには
リボンの [開発] タブをクリックします。
注意
[開発] タブが表示されていない場合は、最初にこれを表示する必要があります。 詳細については、「方法 : [開発] タブをリボンに表示する」を参照してください。
[XML] グループで、[スキーマ] をクリックします。
[テンプレートとアドイン] ダイアログ ボックスが表示されます。
[テンプレートとアドイン] ダイアログ ボックスの [XML スキーマ] タブをクリックし、[スキーマの追加] をクリックします。
プロジェクト ディレクトリにある、前に作成した ActionsPaneSample.xsd スキーマを参照し、[開く] をクリックします。
[スキーマの設定] ダイアログ ボックスの [OK] をクリックします。
[OK] をクリックして [テンプレートとアドイン] ダイアログ ボックスを閉じます。
[XML データ構造] 作業ウィンドウが表示されます。
XML 要素を文書にマップするには
[XML データ構造] 作業ウィンドウの [Sample] 要素をクリックします。
入力が要求される場合は、[文書全体に適用] をクリックします。
To、From、および Subject を含む 3 行のテキストを選択し、[XML データ構造] 作業ウィンドウの [Insert] 要素をクリックします。
カーソルを "To:" の後ろに置き、Tab キーを 2 回押し、[MemoTo] 要素をクリックして挿入します。
カーソルを "From:" の後ろに置き、Tab キーを 2 回押し、[MemoFrom] 要素をクリックします。
カーソルを "Subject:" の後ろに置き、Tab キーを 1 回押し、[MemoSubject] 要素をクリックします。
表全体が強調表示されるように表を選択し、[Table] 要素をクリックして適用します。
表のセルの中に XML タグが表示されます。
[文書内に XML タグを表示する] チェック ボックスをオフにします。
[XML データ構造] 作業ウィンドウの下部にある [XML オプション] をクリックします。
[混在したコンテンツを無視する] チェック ボックスをオンにして、[OK] をクリックします。
[XML データ構造] 作業ウィンドウを閉じます。
操作ウィンドウへのコントロールの追加
操作ウィンドウ上のコントロールのレイアウトを指定するには、操作ウィンドウ コントロールと呼ばれるコントロールのデザイナーを使用します。このコントロールは基本的にはユーザー コントロールと同じです。 ボタンやテキスト ボックスなどのコントロールを操作ウィンドウ コントロールにドラッグし、配置できます。 ユーザー コンテキストに応じて操作ウィンドウを変更するには、各コンテキストに対応する操作ウィンドウ コントロールを追加してデザインし、それらのコントロールの表示/非表示を適宜切り替えます。
このチュートリアルでは、3 つの操作ウィンドウ コントロールを使用します。 1 つ目の操作ウィンドウ コントロールには 3 つのテキスト ボックスと 1 つのボタンがあり、エンド ユーザーはデータを入力し、それを文書に追加できます。 2 つ目の操作ウィンドウ コントロールには、[表のプロパティ] ダイアログ ボックスを表示するボタンがあります。 3 つ目の操作ウィンドウ コントロールには、文書内でのカーソルの位置にかかわらず操作ウィンドウにすべてのコントロールを表示するチェック ボックスがあります。
操作ウィンドウ コントロールを追加するには
ソリューション エクスプローラーで My Dynamic Actions Pane プロジェクトを選択します。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[操作ウィンドウ コントロール] を選択し、AddTextControl という名前を指定して、[追加] をクリックします。
操作ウィンドウ コントロールの [Size] プロパティを 170, 135 に変更します。
1 つ目の操作ウィンドウ コントロールに Windows フォーム コントロールを追加するには
ツールボックスの [Windows フォーム] タブから、Label コントロールを AddTextControl にドラッグし、[Text] プロパティを "To:" に変更します。
Textbox コントロールを AddTextControl に追加し、次のプロパティを変更します。
プロパティ
値
Name
toBox
Size
110, 20
2 番目の Label コントロールを AddTextControl に追加し、[Text] プロパティを "From:" に変更します。
2 つ目の Textbox コントロールを AddTextControl に追加し、次のプロパティを変更します。
プロパティ
値
Name
fromBox
Size
110, 20
3 番目の Label コントロールを、前のテキスト ボックスの下の AddTextControl に追加し、[Text] プロパティを "Subject:" に変更します。
3 つ目の Textbox コントロールを前のラベルの横の AddTextControl に追加し、次のプロパティを変更します。
プロパティ
値
Name
subjectBox
Multiline
True
Size
110, 40
subjectBox テキスト ボックスのサイズを変更して、複数行を表示できるようにします。
Button コントロールを AddTextControl に追加し、次のプロパティを変更します。
プロパティ
値
Name
insertText
Text
Insert
2 番目の操作ウィンドウ コントロールを作成するには
プロジェクトに 2 番目の操作ウィンドウ コントロールを追加し、ShowPropertiesControl という名前を指定します。
操作ウィンドウ コントロールの [Size] プロパティを 170, 50 に変更します。
[ツールボックス] の [Windows フォーム] タブから Button コントロールを ShowPropertiesControl にドラッグし、次のプロパティを変更します。
プロパティ
値
Name
tableProperties
Text
Table Properties
Enabled
False
Size
100, 23
C# の場合は、ボタンの [Modifiers] プロパティを Internal に変更します。
3 番目の操作ウィンドウ コントロールを作成するには
プロジェクトに 3 番目の操作ウィンドウ コントロールを追加し、ShowAllControl という名前を指定します。
操作ウィンドウ コントロールの [Size] プロパティを 170, 75 に変更します。
[ツールボックス] の [Windows フォーム] タブから GroupBox コントロールを ShowAllControl に追加し、[Text] プロパティを My Actions Pane に変更します。
CheckBox コントロールをグループ ボックスの上の ShowAllControl に追加し、次のプロパティを変更します。
プロパティ
値
Name
showCheck
Text
Show All Controls
C# の場合は、チェック ボックスの [Modifiers] プロパティを Internal に変更します。
ユーザー コンテキストに応答するコードの追加
ここでは、操作ウィンドウを表示し、文書内でのカーソル位置に応じて操作ウィンドウ コントロールを追加および削除するコードを作成できます。 このコードは XMLNode コントロールのイベント ハンドラーに追加します。
XMLNode コントロールのイベントにコードを追加するには
ソリューション エクスプローラーで ThisDocument.vb または ThisDocument.cs を右クリックし、[コードの表示] をクリックします。
ThisDocument の宣言セクションで、各操作ウィンドウ コントロールの変数参照を作成します。
Dim addText As New AddTextControl Dim showProperties As New ShowPropertiesControl Dim showAll As New ShowAllControl Friend WithEvents showCheck As System.Windows.Forms.CheckBox
private AddTextControl addText = new AddTextControl(); private ShowPropertiesControl showProperties = new ShowPropertiesControl(); private ShowAllControl showAll = new ShowAllControl();
ThisDocument の Startup イベント ハンドラーに、ShowAllControl コントロールを追加して操作ウィンドウを表示する次のコードを記述します。
Me.ActionsPane.Controls.Add(showAll) showCheck = showAll.showCheck
this.ActionsPane.Controls.Add(showAll);
注意
操作ウィンドウにコントロールを追加する順序によって、その配置が決まります。 操作ウィンドウの上部に常に表示されるコントロールがある場合は、それを最初に追加する必要があります。 順序は、操作ウィンドウの StackOrder プロパティにも依存します。 詳細については、「方法 : アクション ペイン上のコントロールのレイアウトを管理する」を参照してください。
SampleInsertNode コントロールの ContextEnter イベント ハンドラーに次のコードを追加します。
Private Sub SampleInsertNode_ContextEnter(ByVal sender As Object, _ ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _ Handles SampleInsertNode.ContextEnter If showAll.showCheck.Checked = False Then Me.ActionsPane.Controls.Add(addText) Me.ActionsPane.Controls.Remove(showProperties) End If End Sub
private void SampleInsertNode_ContextEnter(object sender, Microsoft.Office.Tools.Word.ContextChangeEventArgs e) { if (showAll.showCheck.Checked == false) { this.ActionsPane.Controls.Add(addText); this.ActionsPane.Controls.Remove(showProperties); } }
SampleInsertNode コントロールの ContextLeave イベント ハンドラーに次のコードを追加して、ユーザーがこの XML ノードの外側にカーソルを移動したときにコントロールが非表示になるようにします。
Private Sub SampleInsertNode_ContextLeave(ByVal sender As Object, _ ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _ Handles SampleInsertNode.ContextLeave If showAll.showCheck.Checked = False Then Me.ActionsPane.Controls.Remove(addText) End If End Sub
private void SampleInsertNode_ContextLeave(object sender, Microsoft.Office.Tools.Word.ContextChangeEventArgs e) { if (showAll.showCheck.Checked == false) { this.ActionsPane.Controls.Remove(addText); } }
SampleTableNode コントロールの ContextEnter イベント ハンドラーに次のコードを追加します。
Private Sub SampleTableNode_ContextEnter(ByVal sender As Object, _ ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _ Handles SampleTableNode.ContextEnter If showAll.showCheck.Checked = False Then Me.ActionsPane.Controls.Remove(addText) Me.ActionsPane.Controls.Add(showProperties) End If showProperties.tableProperties.Enabled = True End Sub
private void SampleTableNode_ContextEnter(object sender, Microsoft.Office.Tools.Word.ContextChangeEventArgs e) { if (showAll.showCheck.Checked == false) { this.ActionsPane.Controls.Remove(addText); this.ActionsPane.Controls.Add(showProperties); } showProperties.tableProperties.Enabled = true; }
SampleTableNode コントロールの ContextLeave イベント ハンドラーに次のコードを追加して、ユーザーがこの XML ノードの外側にカーソルを移動したときにコントロールが非表示になるようにします。
Private Sub SampleTableNode_ContextLeave(ByVal sender As Object, _ ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _ Handles SampleTableNode.ContextLeave If showAll.showCheck.Checked = False Then Me.ActionsPane.Controls.Remove(showProperties) End If showProperties.tableProperties.Enabled = False End Sub
private void SampleTableNode_ContextLeave(object sender, Microsoft.Office.Tools.Word.ContextChangeEventArgs e) { if (showAll.showCheck.Checked == false) { this.ActionsPane.Controls.Remove(showProperties); } showProperties.tableProperties.Enabled = false; }
C# では、XMLNode コントロールのイベント ハンドラーを追加する必要があります。 このコードは、ThisDocument の Startup イベント ハンドラーに配置できます。 イベンド ハンドラーの作成方法の詳細については、「方法: Office プロジェクトでイベント ハンドラーを作成する」を参照してください。
this.SampleInsertNode.ContextEnter +=new Microsoft.Office.Tools.Word. ContextChangeEventHandler(SampleInsertNode_ContextEnter); this.SampleInsertNode.ContextLeave += new Microsoft.Office.Tools.Word. ContextChangeEventHandler(SampleInsertNode_ContextLeave); this.SampleTableNode.ContextEnter += new Microsoft.Office.Tools.Word. ContextChangeEventHandler(SampleTableNode_ContextEnter); this.SampleTableNode.ContextLeave += new Microsoft.Office.Tools.Word. ContextChangeEventHandler(SampleTableNode_ContextLeave);
チェックポイント
プロジェクトを保存し、文書内でカーソルを移動すると、操作ウィンドウ コントロールが変化することを確認します。
プロジェクトをテストするには
F5 キーを押してプロジェクトを実行します。
カーソルを "To" の位置に移動し、操作ウィンドウに addText 操作ウィンドウ コントロールが表示されることを確認します。
カーソルを表の内側に移動し、操作ウィンドウに showProperties 操作ウィンドウ コントロールが表示されることを確認します。
カーソルを MEMORANDUM の位置に移動し、操作ウィンドウに addText と showProperties のどちらの操作ウィンドウ コントロールも表示されないことを確認します。
操作ウィンドウのコントロール イベントに応答するコードの追加
この時点では、操作ウィンドウ上のコントロールは何の働きもしません。 最後の手順で、すべてのコントロールの表示、テキストの挿入、および [表のプロパティ] ダイアログ ボックスの表示を実行するコードを作成します。
操作ウィンドウにすべてのコントロールを表示するには
ThisDocument に次のコードを追加します。
Private Sub showCheck_CheckStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles showCheck.CheckStateChanged If showAll.showCheck.Checked = True Then Me.ActionsPane.Controls.Add(addText) Me.ActionsPane.Controls.Add(showProperties) Else Me.ActionsPane.Controls.Remove(addText) Me.ActionsPane.Controls.Remove(showProperties) End If End Sub
private void showCheck_CheckStateChanged(object sender, EventArgs e) { if (showAll.showCheck.Checked) { this.ActionsPane.Controls.Add(addText); this.ActionsPane.Controls.Add(showProperties); } else { this.ActionsPane.Controls.Remove(addText); this.ActionsPane.Controls.Remove(showProperties); } }
C# では、checkbox コントロールのイベント ハンドラーを追加する必要があります。 このコードは、ThisDocument の Startup イベント ハンドラーに配置できます。
showAll.showCheck.CheckStateChanged += new EventHandler(showCheck_CheckStateChanged);
[Insert] ボタンがクリックされたときにテキストを挿入するには
ソリューション エクスプローラーで AddTextControl.vb または AddTextControl.cs を右クリックし、[コードの表示] をクリックします。
insertText ボタンの Click イベント ハンドラーに次のコードを記述します。
Private Sub insertText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles insertText.Click With Globals.ThisDocument .InsertMemoFromNode.Text = Me.fromBox.Text .InsertMemoToNode.Text = Me.toBox.Text .InsertMemoSubjectNode.Text = Me.subjectBox.Text End With ' Clear the text boxes. Me.fromBox.Text = "" Me.toBox.Text = "" Me.subjectBox.Text = "" End Sub
private void insertText_Click(object sender, System.EventArgs e) { Globals.ThisDocument.InsertMemoFromNode.Text = this.fromBox.Text; Globals.ThisDocument.InsertMemoToNode.Text = this.toBox.Text; Globals.ThisDocument.InsertMemoSubjectNode.Text = this.subjectBox.Text; // Clear the text boxes. this.fromBox.Text = ""; this.toBox.Text = ""; this.subjectBox.Text = ""; }
C# では、このボタンのイベント ハンドラーを追加する必要があります。 このコードは、InitializeComponent の呼び出しの後の AddTextControl コンストラクターに追加できます。
public AddTextControl() { InitializeComponent(); this.insertText.Click += new System.EventHandler(this.insertText_Click); }
[表のプロパティ] ダイアログ ボックスを表示するには
ソリューション エクスプローラーで ShowPropertiesControl.vb または ShowPropertiesControl.cs を右クリックし、[コードの表示] をクリックします。
tableProperties ボタンの Click イベント ハンドラーに次のコードを追加します。
Private Sub tableProperties_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles tableProperties.Click Globals.ThisDocument.Application.Dialogs( _ Word.WdWordDialog.wdDialogTableProperties).Show() End Sub
private void tableProperties_Click(object sender, System.EventArgs e) { object timeout = 0; Globals.ThisDocument.Application.Dialogs[ Microsoft.Office.Interop.Word.WdWordDialog.wdDialogTableProperties] .Show(ref timeout); }
C# では、このボタンのイベント ハンドラーを追加する必要があります。 このコードは、InitializeComponent の呼び出しの後の ShowPropertiesControl コンストラクターに追加できます。
public ShowPropertiesControl() { InitializeComponent(); this.tableProperties.Click += new System.EventHandler(this.tableProperties_Click); }
アプリケーションのテスト
文書をテストして、操作ウィンドウ コントロールの動作を確認できます。
文書をテストするには
F5 キーを押してプロジェクトを実行します。
操作ウィンドウが表示されることを確認します。
"To"、"From"、および "Subject" の行を含む文書のセクションにカーソルを移動し、操作ウィンドウに addText コントロールが表示されることを確認します。
操作ウィンドウの [To]、[From]、および [Subject] の各テキスト ボックスにテキストを入力し、[Insert] をクリックします。
カーソルを表に移動し、操作ウィンドウに showProperties コントロールが表示されることを確認します。
[Table Properties] ボタンをクリックし、[表のプロパティ] ダイアログ ボックスが表示されることを確認します。
[すべてのコントロールを表示] チェック ボックスをオンにして、操作ウィンドウにすべてのコントロールが表示されることを確認します。
カーソルを表の外側に移動し、[Table Properties] ボタンが非表示になることを確認します。
次の手順
このチュートリアルでは、ユーザー コンテキストに基づいて操作ウィンドウを変更する基本事項について説明します。 ここでは、次の作業を行います。
Word のコントロールへのデータのバインド。 詳細については、「チュートリアル : Word の操作ウィンドウ上のコントロールへのデータ バインディング」を参照してください。
Excel のコントロールへのデータのバインド。 詳細については、「チュートリアル : Excel のアクション ペインのコントロールへのデータ連結」を参照してください。
プロジェクトの配置。 詳細については、「配置の概要 (Visual Studio での Office 開発)」を参照してください。
参照
処理手順
方法 : アクション ペイン上のコントロールのレイアウトを管理する