チュートリアル : アプリケーション レベルのプロジェクトでのサービスからのデータへのバインド
アプリケーション レベルのプロジェクトでは、ホスト コントロールにデータをバインドできます。このチュートリアルでは、Microsoft Office Word 文書へのコントロールの追加、MSDN Content Service から取得したデータへのコントロールのバインド、実行時におけるイベントへの応答を行う方法について説明します。
このトピックの情報は適用されます: Word 2010のアプリケーション レベルのプロジェクトを適用します。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このチュートリアルでは、次の作業について説明します。
実行時に、文書に RichTextContentControl コントロールを追加する。
Web サービスからのデータに RichTextContentControl コントロールをバインドする。
RichTextContentControl コントロールの Entering イベントに応答する。
[!メモ]
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
-
Microsoft Office Developer Tools が含まれているエディションの Visual Studio 2012。詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.110\).md)」を参照してください。
- Word 2013 または Word 2010。
新規プロジェクトの作成
まず、Word アドイン プロジェクトを作成します。
新しいプロジェクトを作成するには
Visual Basic または C# を使用して、MTPS Content Service という名前の Word アドイン プロジェクトを作成します。
詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
Visual Studio は ThisAddIn.vb ファイルまたは ThisAddIn.cs ファイルを開き、ソリューション エクスプローラーにプロジェクトを追加します。
Web サービスの追加
このチュートリアルでは、MTPS Content Service と呼ばれる Web サービスを使用します。この Web サービスは、指定された MSDN の記事の情報を XML 文字列またはプレーンテキストの形式で返します。後の手順で、コンテンツ コントロールに返された情報を表示する方法を説明します。
MTPS Content Service をプロジェクトに追加するには
[データ] メニューの [新しいデータ ソースの追加] をクリックします。
データ ソース構成ウィザードで、[サービス] をクリックし、[次へ] をクリックします。
"アドレス" フィールドに、次の URL を入力します。
http://services.msdn.microsoft.com/ContentServices/ContentService.asmx
[移動] をクリックします。
"名前空間" フィールドに「ContentService」と入力し、[OK] をクリックします。
[データ ソース構成ウィザード] ダイアログ ボックスで、[完了] をクリックします。
実行時におけるコンテンツ コントロールの追加とデータへのバインド
アプリケーション レベルのプロジェクトでは、実行時にコントロールを追加してバインドできます。このチュートリアルでは、ユーザーがコントロール内でクリックすると Web サービスからデータを取得するように、コンテンツ コントロールを構成します。
コンテンツ コントロールを追加してデータにバインドするには
ThisAddIn クラスで、MTPS Content Service、コンテンツ コントロール、およびデータ バインディングに使用する変数を宣言します。
Private request As ContentService.getContentRequest Private proxy As ContentService.ContentServicePortTypeClient Private document As ContentService.requestedDocument() Private response As ContentService.getContentResponse Private appId As ContentService.appId Private WithEvents richTextContentControl As Microsoft.Office.Tools.Word.RichTextContentControl Private components As System.ComponentModel.Container Private primaryDocumentsBindingSource As System.Windows.Forms.BindingSource
private ContentService.getContentRequest request; private ContentService.ContentServicePortTypeClient proxy; private ContentService.requestedDocument[] document; private ContentService.getContentResponse response; private ContentService.appId appId; private Microsoft.Office.Tools.Word.RichTextContentControl richTextContentControl; private System.ComponentModel.Container components; private System.Windows.Forms.BindingSource primaryDocumentsBindingSource;
ThisAddIn クラスに次のメソッドを追加します。このメソッドにより、アクティブな文書の先頭にコンテンツ コントロールが作成されます。
Private Sub AddRichTextControlAtRange() Dim currentDocument As Word.Document = Me.Application.ActiveDocument currentDocument.Paragraphs(1).Range.InsertParagraphBefore() Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument) richTextContentControl = extendedDocument.Controls.AddRichTextContentControl _ (currentDocument.Paragraphs(1).Range, "richTextControl2") richTextContentControl.PlaceholderText = _ "Click here to download MSDN Library information about content controls." End Sub
private void AddRichTextControlAtRange() { Word.Document currentDocument = this.Application.ActiveDocument; currentDocument.Paragraphs[1].Range.InsertParagraphBefore(); Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument); richTextContentControl = extendedDocument.Controls.AddRichTextContentControl( currentDocument.Paragraphs[1].Range, "richTextContentControl"); richTextContentControl.PlaceholderText = "Click here to download MSDN Library information about content controls."; }
ThisAddIn クラスに次のメソッドを追加します。このメソッドにより、Web サービスへの要求を作成して送信するのに必要なオブジェクトが初期化されます。
Private Sub InitializeServiceObjects() request = New ContentService.getContentRequest() proxy = New ContentService.ContentServicePortTypeClient() document = New ContentService.requestedDocument(0) {} response = New ContentService.getContentResponse() appId = New ContentService.appId() components = New System.ComponentModel.Container() primaryDocumentsBindingSource = New System.Windows.Forms.BindingSource(components) End Sub
private void InitializeServiceObjects() { request = new ContentService.getContentRequest(); proxy = new ContentService.ContentServicePortTypeClient(); document = new ContentService.requestedDocument[1]; response = new ContentService.getContentResponse(); appId = new ContentService.appId(); components = new System.ComponentModel.Container(); primaryDocumentsBindingSource = new System.Windows.Forms.BindingSource(this.components); }
ユーザーがコンテンツ コントロール内をクリックするとコンテンツ コントロールに関する MSDN ライブラリの文書を取得し、そのデータをコンテンツ コントロールにバインドするためのイベント ハンドラーを作成します。
Private Sub richTextContentControl_Entering _ (ByVal sender As Object, ByVal e As ContentControlEnteringEventArgs) _ Handles richTextContentControl.Entering document(0) = New ContentService.requestedDocument() With document(0) .type = ContentService.documentTypes.primary .selector = "Mtps.Xhtml" End With With request .contentIdentifier = "ed59e522-dd6e-4c82-8d49-f5dbcfcc950d" .locale = "en-us" .version = "VS.90" .requestedDocuments = document End With response = proxy.GetContent(appId, request) primaryDocumentsBindingSource.DataSource = _ response.primaryDocuments(0).Any.InnerText richTextContentControl.DataBindings.Add("Text", _ primaryDocumentsBindingSource.DataSource, "", True, _ System.Windows.Forms.DataSourceUpdateMode.OnValidation) End Sub
void richTextContentControl_Entering(object sender, ContentControlEnteringEventArgs e) { document[0] = new ContentService.requestedDocument(); document[0].type = ContentService.documentTypes.primary; document[0].selector = "Mtps.Xhtml"; request.contentIdentifier = "ed59e522-dd6e-4c82-8d49-f5dbcfcc950d"; request.locale = "en-us"; request.version = "VS.90"; request.requestedDocuments = document; response = proxy.GetContent(appId, request); primaryDocumentsBindingSource.DataSource = response.primaryDocuments[0].Any.InnerText; richTextContentControl.DataBindings.Add("Text", primaryDocumentsBindingSource.DataSource, "", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation); }
AddRichTextControlAtRange メソッドと InitializeServiceObjects メソッドを、ThisAddIn_Startup メソッドから呼び出します。C# を使用してプログラミングを行っている場合は、イベント ハンドラーを追加します。
Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup AddRichTextControlAtRange() InitializeServiceObjects() End Sub
private void ThisAddIn_Startup(object sender, System.EventArgs e) { AddRichTextControlAtRange(); InitializeServiceObjects(); this.richTextContentControl.Entering += richTextContentControl_Entering; }
アドインのテスト
Word を開くと、RichTextContentControl コントロールが表示されます。コントロール内でクリックすると、コントロールのテキストが変更されます。
アドインをテストするには
F5 キーを押します。
コンテンツ コントロール内をクリックします。
MTPS Content Service から情報がダウンロードされ、コンテンツ コントロール内に表示されます。