チュートリアル : 実行時におけるアプリケーション レベルのアドインの文書へのコントロールの追加
更新 : 2008 年 7 月
対象 |
---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。 プロジェクトの種類
Microsoft Office のバージョン
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。 |
Visual Studio 2008 Service Pack 1 (SP1) 以降、アプリケーション レベルのアドインを使用して、任意の開いている Microsoft Office Word 2007 文書にコントロールを追加できるようになりました。このチュートリアルでは、リボンを使用してユーザーが文書に Button または RichTextContentControl を追加できるようにする方法を説明します。
このチュートリアルでは、次の作業について説明します。
新しい Word アドイン プロジェクトを作成する。
文書にコントロールを追加するためのユーザー インターフェイス (UI: User Interface) を提供する。
実行時に文書にコントロールを追加する。
文書からコントロールを削除する。
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
前提条件
このチュートリアルを実行するには、次のコンポーネントが必要です。
Visual Studio Tools for Office (Visual Studio 2008 Professional および Visual Studio Team System のオプションの要素)
Visual Studio 2008 SP1
Microsoft Office Word 2007
新しい Word アドイン プロジェクトの作成
まず、Word 2007 のアドイン プロジェクトを作成します。
新しい Word アドイン プロジェクトを作成するには
- Word 2007 用のアプリケーション レベルのアドイン プロジェクトを WordDynamicControls という名前で作成します。詳細については、「方法 : Visual Studio Tools for Office プロジェクトを作成する」を参照してください。
文書にコントロールを追加するための UI の提供
Word のリボンにカスタム タブを追加します。ユーザーはタブにあるチェック ボックスをオンにして、文書にコントロールを追加できます。
文書にコントロールを追加するための UI を提供するには
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[リボン (ビジュアル デザイナ)] をクリックします。
新しいリボンの名前を "MyRibbon" に変更し、[追加] をクリックします。
リボン デザイナで MyRibbon.cs ファイルまたは MyRibbon.vb ファイルが開き、既定のタブとグループが表示されます。
リボン デザイナで [group1] グループをクリックします。
[プロパティ] ウィンドウで、[group1] の Label プロパティを Add Controls に変更します。
ツールボックスの [Office リボン コントロール] タブから、CheckBox コントロールを group1 にドラッグします。
[CheckBox1] をクリックして選択します。
[プロパティ] ウィンドウで、次のプロパティを変更します。
プロパティ
値
Name
addButtonComboBox
Label
ボタンの追加
group1 に 2 つ目のチェック ボックスを追加し、次のプロパティを変更します。
プロパティ
値
Name
addRichTextCheckBox
Label
リッチ テキスト コントロールの追加
リボン デザイナで [ボタンの追加] をダブルクリックします。
[ボタンの追加] チェック ボックスの Click イベント ハンドラがコード エディタで開きます。
リボン デザイナに戻り、[リッチ テキスト コントロールの追加] をダブルクリックします。
[リッチ テキスト コントロールの追加] チェック ボックスの Click イベント ハンドラがコード エディタで開きます。
このチュートリアルの後の手順で、これらのイベント ハンドラに、アクティブな文書上でコントロールの追加や削除を行うためのコードを追加します。
アクティブな文書上でのコントロールの追加と削除
アドインのコードでは、コントロールを追加できるようにするには、アクティブな文書を Microsoft.Office.Tools.Word.Documentホスト項目に変換する必要があります。Visual Studio Tools for 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 nativeDocument As Word.Document = Globals.ThisAddIn.Application.ActiveDocument Dim vstoDocument As Document = nativeDocument.GetVstoObject() Dim name As String = "MyButton" If Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked Then If Globals.ThisAddIn.Application.Selection IsNot Nothing Then button = vstoDocument.Controls.AddButton( _ Globals.ThisAddIn.Application.Selection.Range, 100, 30, name) End If Else vstoDocument.Controls.Remove(name) End If End Sub
internal void ToggleButtonOnDocument() { Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument; Document vstoDocument = nativeDocument.GetVstoObject(); string name = "MyButton"; if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked) { if (Globals.ThisAddIn.Application.Selection != null) { button = vstoDocument.Controls.AddButton( Globals.ThisAddIn.Application.Selection.Range, 100, 30, name); } } else { vstoDocument.Controls.Remove(name); } }
ThisAddIn クラスに次のメソッドを追加します。ユーザーがリボンの [リッチ テキスト コントロールの追加] チェック ボックスをクリックした場合、チェック ボックスがオンになると、このメソッドにより、文書上で現在選択されている位置に RichTextContentControl が追加されます。チェック ボックスがオフになると、RichTextContentControl が削除されます。
Friend Sub ToggleRichTextControlOnDocument() Dim nativeDocument As Word.Document = Globals.ThisAddIn.Application.ActiveDocument Dim vstoDocument As Document = nativeDocument.GetVstoObject() Dim name As String = "MyRichTextBoxControl" If Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked Then If Globals.ThisAddIn.Application.Selection IsNot Nothing Then richTextControl = vstoDocument.Controls.AddRichTextContentControl( _ Globals.ThisAddIn.Application.Selection.Range, name) End If Else vstoDocument.Controls.Remove(name) End If End Sub
internal void ToggleRichTextControlOnDocument() { Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument; Document vstoDocument = nativeDocument.GetVstoObject(); string name = "MyRichTextBoxControl"; if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked) { if (Globals.ThisAddIn.Application.Selection != null) { richTextControl = vstoDocument.Controls.AddRichTextContentControl( Globals.ThisAddIn.Application.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 If Doc.HasVstoObject() Then Dim vstoDocument As Document = Doc.GetVstoObject() 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) { if (Doc.HasVstoObject()) { Document vstoDocument = Doc.GetVstoObject(); 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] グループで、[リッチ テキスト コントロールの追加] をクリックします。
リッチ テキスト コントロールが最後の段落に追加されます。
文書を保存します。
文書からボタンが削除されます。
次の手順
アプリケーション レベルのアドインのコントロールの詳細については、次の各トピックを参照してください。
実行時にその他の種類のコントロールを文書に追加し、文書が再び開かれたときにコントロールを再作成する方法を示すサンプルについては、「Word アドインのダイナミック コントロールのサンプル」を参照してください。
Excel のアプリケーション レベルのアドインを使用してワークシートにコントロールを追加する方法を示すチュートリアルについては、「チュートリアル : 実行時におけるアプリケーション レベルのプロジェクトのワークシートへのコントロールの追加」を参照してください。
参照
処理手順
方法 : Office ドキュメントに Windows フォーム コントロールを追加する
方法 : Word 文書にコンテンツ コントロールを追加する
概念
Office ドキュメントでのダイナミック コントロールの永続化
アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2008 年 7 月 |
トピックを追加 |
SP1 機能変更 |