チュートリアル : 実行時におけるアプリケーション レベルのアドインの文書へのコントロールの追加
アプリケーション レベルのアドインを使用して、任意の開いている Microsoft Office Word 文書にコントロールを追加できます。このチュートリアルでは、リボンを使用してユーザーが文書に Button または RichTextContentControl を追加できるようにする方法を説明します。
このトピックの情報は適用されます: Word 2010のアプリケーション レベルのプロジェクトを適用します。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このチュートリアルでは、次の作業について説明します。
新しい Word アドイン プロジェクトを作成する。
文書にコントロールを追加するためのユーザー インターフェイス (UI: User Interface) を提供する。
実行時に文書にコントロールを追加する。
文書からコントロールを削除する。
[!メモ]
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
-
Microsoft Office Developer Tools が含まれているエディションの Visual Studio 2012。詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.110\).md)」を参照してください。
- Word 2013 または Word 2010。
新しい Word アドイン プロジェクトの作成
まず、Word アドイン プロジェクトを作成します。
新しい Word アドイン プロジェクトを作成するには
Word 用のアプリケーション レベルのアドイン プロジェクトを WordDynamicControls という名前で作成します。詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
[Microsoft.Office.Tools.Word.v4.0.Utilities.dll] のアセンブリへの参照を追加します。この参照は、このチュートリアルの後半で Windows フォーム コントロールをドキュメントにプログラムで追加するのに必要です。
文書にコントロールを追加するための UI の提供
Word のリボンにカスタム タブを追加します。ユーザーはタブにあるチェック ボックスをオンにして、文書にコントロールを追加できます。
文書にコントロールを追加するための UI を提供するには
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[リボン (ビジュアル デザイナー)] をクリックします。
新しいリボンの名前を "MyRibbon" に変更し、[追加] をクリックします。
リボン デザイナーで MyRibbon.cs ファイルまたは MyRibbon.vb ファイルが開き、既定のタブとグループが表示されます。
リボン デザイナーで [group1] グループをクリックします。
[プロパティ] ウィンドウで、[group1] の Label プロパティを [ボタンの追加] に変更します。
ツールボックスの [Office リボン コントロール] タブから、CheckBox コントロールを group1 にドラッグします。
[CheckBox1] をクリックして選択します。
[プロパティ] ウィンドウで、次のプロパティを変更します。
プロパティ
価値
名前
addButtonCheckBox
ラベル
ボタンの追加
group1 に 2 つ目のチェック ボックスを追加し、次のプロパティを変更します。
プロパティ
価値
名前
addRichTextCheckBox
ラベル
リッチ テキスト コントロールの追加
リボン デザイナーで [ボタンの追加] をダブルクリックします。
[ボタンの追加] チェック ボックスの Click イベント ハンドラーがコード エディターで開きます。
リボン デザイナーに戻り、[リッチ テキスト コントロールの追加] をダブルクリックします。
[リッチ テキスト コントロールの追加] チェック ボックスの Click イベント ハンドラーがコード エディターで開きます。
このチュートリアルの後の手順で、これらのイベント ハンドラーに、アクティブな文書上でコントロールの追加や削除を行うためのコードを追加します。
アクティブな文書上でのコントロールの追加と削除
アドインのコードでは、コントロールを追加できるようにするには、アクティブな文書を Microsoft.Office.Tools.Word.Documentホスト項目に変換する必要があります。Officeソリューションでは、マネージ コントロールはコントロールのコンテナーとして機能するホスト項目に対してのみ追加できます。アプリケーション レベルのアドイン プロジェクトでは、ホスト項目は GetVstoObject メソッドを使用して実行時に作成できます。
メソッドを ThisAddIn クラスに追加します。このクラスを呼び出して、アクティブな文書に対して Button または RichTextContentControl の追加や削除を実行できます。このチュートリアルの後の手順で、リボンのチェック ボックスの Click イベント ハンドラーから、これらのメソッドを呼び出します。
アクティブな文書でコントロールの追加や削除を行うには
ソリューション エクスプローラーで、ThisAddIn.cs または ThisAddIn.vb をダブルクリックし、コード エディターでファイルを開きます。
ThisAddIn クラスに次のコードを追加します。このコードは、文書に追加されるコントロールを表す Button オブジェクトと RichTextContentControl オブジェクトを宣言します。
Private button As Microsoft.Office.Tools.Word.Controls.Button = Nothing Private richTextControl As RichTextContentControl = Nothing
private Microsoft.Office.Tools.Word.Controls.Button button = null; private RichTextContentControl richTextControl = null;
ThisAddIn クラスに次のメソッドを追加します。ユーザーがリボンの [ボタンの追加] チェック ボックスをクリックした場合、チェック ボックスがオンになると、このメソッドにより、文書上で現在選択されている位置に Button が追加されます。チェック ボックスがオフになると、Button が削除されます。
Friend Sub ToggleButtonOnDocument() Dim vstoDocument As Document = Globals.Factory.GetVstoObject(Me.Application.ActiveDocument) Dim name As String = "MyButton" If Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked Then Dim selection = Me.Application.Selection If selection IsNot Nothing AndAlso selection.Range IsNot Nothing Then button = vstoDocument.Controls.AddButton( _ selection.Range, 100, 30, name) End If Else vstoDocument.Controls.Remove(name) End If End Sub
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 が削除されます。
Friend Sub ToggleRichTextControlOnDocument() Dim vstoDocument As Document = Globals.Factory.GetVstoObject(Me.Application.ActiveDocument) Dim name As String = "MyRichTextBoxControl" If Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked Then Dim selection = Me.Application.Selection If selection IsNot Nothing AndAlso selection.Range IsNot Nothing Then richTextControl = vstoDocument.Controls.AddRichTextContentControl( _ selection.Range, name) End If Else vstoDocument.Controls.Remove(name) End If End Sub
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 ラッパーは文書に残り、文書を再び開くと、このラッパーの境界線がエンド ユーザーに対して表示されます。アドインで動的に作成された Windows フォーム コントロールをクリーンアップするには、いくつかの方法があります。このチュートリアルでは、文書が閉じられるときに Button コントロールをプログラムによって削除します。
文書が保存されるときにボタン コントロールを削除するには
ThisAddIn.cs または ThisAddIn.vb コード ファイルで、次のメソッドを ThisAddIn クラスに追加します。このメソッドは、DocumentBeforeSave イベントのイベント ハンドラーです。保存された文書に、これに関連付けられた Document ホスト項目がある場合、イベント ハンドラーはホスト項目を取得し、Button コントロールを削除します (存在している場合)。
Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _ ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles Application.DocumentBeforeSave Dim isExtended As Boolean = Globals.Factory.HasVstoObject(Doc) If isExtended Then Dim vstoDocument As Document = Globals.Factory.GetVstoObject(Doc) If vstoDocument.Controls.Contains(button) Then vstoDocument.Controls.Remove(button) Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = False End If End If End Sub
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 イベント ハンドラーを次のコードに置き換えます。このコードは、これらのイベント ハンドラーを再定義し、このチュートリアルの前半で ThisAddIn クラスに追加した ToggleButtonOnDocument メソッドと ToggleRichTextControlOnDocument メソッドを呼び出すようにします。
Private Sub addButtonCheckBox_Click(ByVal sender As System.Object, _ ByVal e As RibbonControlEventArgs) Handles addButtonCheckBox.Click Globals.ThisAddIn.ToggleButtonOnDocument() End Sub Private Sub addRichTextCheckBox_Click(ByVal sender As System.Object, _ ByVal e As RibbonControlEventArgs) Handles addRichTextCheckBox.Click Globals.ThisAddIn.ToggleRichTextControlOnDocument() End Sub
private void addButtonCheckBox_Click(object sender, RibbonControlEventArgs e) { Globals.ThisAddIn.ToggleButtonOnDocument(); } private void addRichTextCheckBox_Click(object sender, RibbonControlEventArgs e) { Globals.ThisAddIn.ToggleRichTextControlOnDocument(); }
ソリューションのテスト
リボンのカスタム タブからコントロールを選択し、文書に追加します。文書を保存すると、Button コントロールは削除されます。
ソリューションをテストするには
F5 キーを押してプロジェクトを実行します。
アクティブな文書で、Enter キーを数回押し、新しい空の段落を文書に追加します。
最初の段落を選択します。
[アドイン] タブをクリックします。
[Add Controls] グループで、[ボタンの追加] をクリックします。
最初の段落にボタンが表示されます。
最後の段落を選択します。
[Add Controls] グループで、[リッチ テキスト コントロールの追加] をクリックします。
リッチ テキスト コントロールが最後の段落に追加されます。
ドキュメントを保存します。
文書からボタンが削除されます。
次の手順
アプリケーション レベルのアドインのコントロールの詳細については、次の各トピックを参照してください。
実行時にその他の種類のコントロールを文書に追加し、文書が再び開かれたときにコントロールを再作成する方法を示すサンプルについては、「Office 開発のサンプルとチュートリアル」の Word アドインのダイナミック コントロールのサンプルを参照してください。
Excel のアプリケーション レベルのアドインを使用してワークシートにコントロールを追加する方法を示すチュートリアルについては、「チュートリアル : 実行時におけるアプリケーション レベルのプロジェクトのワークシートへのコントロールの追加」を参照してください。
参照
処理手順
方法 : Office ドキュメントに Windows フォーム コントロールを追加する
方法 : Word 文書にコンテンツ コントロールを追加する
概念
Office ドキュメントでのダイナミック コントロールの永続化
アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張