チュートリアル: 実行時に VSTO アドインで文書にコントロールを追加する
VSTO アドインを使用して、開いている Microsoft Office Word 文書にコントロールを追加できます。 このチュートリアルでは、リボンを使用してユーザーが文書に Button または RichTextContentControl を追加できるようにする方法を説明します。
対象: このトピックの情報は、Word 2010 の VSTO アドインのプロジェクトに適用されます。 詳細については、「 Features Available by Office Application and Project Type」を参照してください。
このチュートリアルでは、次の作業について説明します。
新しい Word VSTO アドイン プロジェクトの作成。
ドキュメントにコントロールを追加するためのユーザー インターフェイス (UI) の提供。
実行時のドキュメントへのコントロールの追加。
ドキュメントからのコントロールの削除。
Note
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
Microsoft Office Developer Tools が含まれている Visual Studio のエディション。 詳細については、「Office ソリューションを開発できるようにコンピューターを構成する」を参照してください。
Word 2013 または Word 2010。
新しい Word アドイン プロジェクトを作成する
まず Word VSTO アドイン プロジェクトを作成します。
新しい Word VSTO アドイン プロジェクトを作成するには
WordDynamicControls という名前で Word 用 VSTO アドイン プロジェクトを作成します。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
Microsoft.Office.Tools.Word.v4.0.Utilities.dll アセンブリへの参照を追加します。 この参照は、このチュートリアルの後半でプログラムを使用して Windows フォーム コントロールをドキュメントに追加するのに必要です。
ドキュメントにコントロールを追加するための UI を提供する
Word のリボンにカスタム タブを追加します。 ユーザーはタブにあるチェック ボックスをオンにして、ドキュメントにコントロールを追加できます。
ドキュメントにコントロールを追加するための UI を提供するには
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、 [リボン (ビジュアル デザイナー)]をクリックします。
新しいリボンの名前を " MyRibbon" に変更し、 [追加]をクリックします。
リボン デザイナーで MyRibbon.cs ファイルまたは MyRibbon.vb ファイルが開き、既定のタブとグループが表示されます。
リボン デザイナーで、 group1 グループをクリックします。
[プロパティ] ウィンドウで、 group1 の [ラベル] プロパティを [コントロールの追加]に変更します。
ツールボックス の [Office リボン コントロール]タブから、 CheckBox コントロールを group1にドラッグします。
[CheckBox1] をクリックしてオンにします。
[プロパティ] ウィンドウで、次のプロパティを変更します。
プロパティ 値 名前 addButtonCheckBox ラベル 追加ボタン group1に 2 つ目のチェック ボックスを追加し、次のプロパティを変更します。
プロパティ 値 名前 addRichTextCheckBox ラベル リッチ テキスト コントロールの追加 リボン デザイナーで [ボタンの追加]をダブルクリックします。
Click [ボタンの追加] チェック ボックスの イベント ハンドラーがコード エディターで開きます。
リボン デザイナーに戻り、 [リッチ テキスト コントロールの追加]をダブルクリックします。
Click [リッチ テキスト コントロールの追加] チェック ボックスの イベント ハンドラーがコード エディターで開きます。
このチュートリアルの後半で、アクティブなドキュメントにコントロールを追加および削除するためのコードをこれらのイベント ハンドラーに追加します。
アクティブなドキュメントでコントロールを追加または削除する
VSTO アドインのコードでは、コントロールを追加するには、その前にアクティブなドキュメントを Documentホスト項目 に変換する必要があります。 Office ソリューションではマネージド コントロールを追加できるのはホスト項目に対してだけです。これはコントロールのコンテナーとして機能します。 VSTO アドイン プロジェクトでは、GetVstoObject
メソッドを使用すると、実行時にホスト項目を作成できます。
アクティブなドキュメントに ThisAddIn
または Button を追加または削除するために呼び出せるメソッドを RichTextContentControl クラスに追加します。 このチュートリアルの後半で、これらのメソッドをリボンのチェック ボックスの Click イベント ハンドラーから呼び出します。
アクティブなドキュメントでコントロールを追加または削除するには
ソリューション エクスプローラーで ThisAddIn.cs または ThisAddIn.vb をダブルクリックして、コード エディターでファイルを開きます。
ThisAddIn
クラスに次のコードを追加します。 このコードは、ドキュメントに追加されるコントロールを表す Button オブジェクトと RichTextContentControl オブジェクトを宣言します。次のメソッドを
ThisAddIn
クラスに追加します。 ユーザーがリボンの [ボタンの追加] チェック ボックスをクリックしてこれがオンになると、このメソッドによって Button がドキュメントの現在の選択項目に追加されます。チェック ボックスがオフになると Button が削除されます。internal void ToggleButtonOnDocument() { Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument); string name = "MyButton"; if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked) { Word.Selection selection = this.Application.Selection; if (selection != null && selection.Range != null) { button = vstoDocument.Controls.AddButton( selection.Range, 100, 30, name); } } else { vstoDocument.Controls.Remove(name); } }
次のメソッドを
ThisAddIn
クラスに追加します。 ユーザーがリボンの [リッチ テキスト コントロールの追加] チェック ボックスをクリックしてこれがオンになると、このメソッドによって RichTextContentControl がドキュメントの現在の選択項目に追加されます。チェック ボックスがオフになると RichTextContentControl が削除されます。internal void ToggleRichTextControlOnDocument() { Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument); string name = "MyRichTextBoxControl"; if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked) { Word.Selection selection = this.Application.Selection; if (selection != null && selection.Range != null) { richTextControl = vstoDocument.Controls.AddRichTextContentControl( selection.Range, name); } } else { vstoDocument.Controls.Remove(name); } }
ドキュメントを保存するときにボタン コントロールを削除する
ドキュメントを保存して閉じるときに Windows フォーム コントロールは保存されません。 ただし、各コントロールの ActiveX ラッパーはドキュメントに残るため、エンド ユーザーがドキュメントを再び開くときにこのラッパーの枠線が表示される場合があります。 VSTO アドインに作成された Windows フォーム コントロールを動的にクリーン アップする方法は、いくつかあります。このチュートリアルでは、ドキュメントを保存するときに、Button コントロールをプログラムで削除します。
ドキュメントを保存するときにボタン コントロールを削除するには
ThisAddIn.cs または ThisAddIn.vb コード ファイルで、次のメソッドを
ThisAddIn
クラスに追加します。 このメソッドは、 DocumentBeforeSave イベントのイベント ハンドラーです。 保存されるドキュメントに Document ホスト項目が関連付けられている場合、イベント ハンドラーはホスト項目を取得し、 Button コントロールが存在する場合にそれを削除します。private void Application_DocumentBeforeSave(Word.Document Doc, ref bool SaveAsUI, ref bool Cancel) { bool isExtended = Globals.Factory.HasVstoObject(Doc); if (isExtended) { Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Doc); if (vstoDocument.Controls.Contains(button)) { vstoDocument.Controls.Remove(button); Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = false; } } }
C# では、
ThisAddIn_Startup
イベント ハンドラーに次のコードを追加します。 C# では、Application_DocumentBeforeSave
イベント ハンドラーを DocumentBeforeSave イベントに接続するためにこのコードが必要です。this.Application.DocumentBeforeSave += new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler( Application_DocumentBeforeSave);
ユーザーがリボンのチェック ボックスをクリックしたときにコントロールを追加または削除する
最後に、リボンに追加したチェック ボックスの Click イベント ハンドラーに対し、ドキュメント上のコントロールを追加または削除するための変更を加えます。
ユーザーがリボンのチェック ボックスをクリックしたときにコントロールを追加または削除するには
MyRibbon.cs または MyRibbon.vb コード ファイルで、生成された
addButtonCheckBox_Click
およびaddRichTextCheckBox_Click
イベント ハンドラーを次のコードで置き換えます。 このコードは、このチュートリアルの前半でToggleButtonOnDocument
クラスに追加したToggleRichTextControlOnDocument
およびThisAddIn
メソッドを呼び出すように、これらのイベント ハンドラーを再定義します。
ソリューションをテストする
リボンのカスタム タブからコントロールを選んでドキュメントに追加します。 ドキュメントを保存すると、 Button コントロールが削除されます。
ソリューションをテストするには
F5 キーを押してプロジェクトを実行します。
アクティブなドキュメントで Enter キーを何度か押して、ドキュメントに新しい空の段落を追加します。
最初の段落を選びます。
[アドイン] タブをクリックします。
[コントロールの追加] グループで [ボタンの追加]をクリックします。
最初の段落にボタンが表示されます。
最後の段落を選びます。
[コントロールの追加] グループで [リッチ テキスト コントロールの追加]をクリックします。
リッチ テキスト コンテンツのコントロールが最後の段落に追加されます。
ドキュメントを保存します。
ボタンがドキュメントから削除されます。
次のステップ
VSTO アドインのコントロールについて詳しくは、次の各トピックをご覧ください。
実行時に他のさまざまな種類のコントロールをドキュメントに追加したり、ドキュメントを再び開くときにコントロールを再作成したりする方法を示すサンプルについては、「Office 開発のサンプルとチュートリアル」にある Word アドイン ダイナミック コントロールのサンプルをご覧ください。
Excel 用の VSTO アドインを使用してワークシートにコントロールを追加する方法を示すチュートリアルについては、「チュートリアル: VSTO アドイン プロジェクトの実行時にワークシートにコントロールを追加する」を参照してください。