none
Outlookアドイン開発 作成中の予定表フォームを開きたい RRS feed

  • 質問

  • OutlookのアドインをC#で作成しております。初めて作成しているので、以下変な質問かもしれませんがご容赦下さい。

    環境:VisualStudio2015、C#、Outlook2016

    仕様:新しい会議(もしくは、新しい予定)から予定を入力して、独自に作成したフォームに切替(リボンメニューより)て、付加情報を設定したら、ボタンをクリックすると作成していた予定表フォームの本文(Body)へ付加情報内容を設定するとともに、作成中の予定表へ画面が戻る。

    現時点では、独自フォームにて設定した内容を、予定表の本文(Body)へ設定することろまでは出来ていますが、独自フォームから予定表フォームへ切り替えができません。

    VS2015にて、VSTOアドインとして作成しており、独自フォーム(新しいOutlookフォーム領域)を分離フォームとして追加し、リボンメニューから呼び出すように作成しています。

    動作でわからないのが、リボンから独自フォームを表示したとき、予定表フォームは非表示になっているだけ?なのか。。。

    以下は独自フォームのボタンをクリックしたときのロジック

    ↓独自フォームが開く前に、予定表フォーム情報を取得しておく

    Outlook.AppointmentItem myOutlookItem;

    myOutlookItem = (Outlook.AppointmentItem)this.OutlookItem;

    ↓独自フォームのボタンをクリックしたとき

    private void bt_Click(object sender, EventArgs e)
            {
                myOutlookItem.Body = "【独自フォームからセットされました】" ;

        // ここに予定表フォームを開く(表示)ロジックを入れたい

            }

    よろしくお願い致します。


    • 編集済み Mitakana 2017年8月18日 0:39
    2017年8月18日 0:38

回答

  • こんな?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Office = Microsoft.Office.Core;
    using Outlook = Microsoft.Office.Interop.Outlook;
    
    namespace OutlookAddIn2
    {
        partial class FormRegion1
        {
            #region Form Region Factory
    
            [Microsoft.Office.Tools.Outlook.FormRegionMessageClass(Microsoft.Office.Tools.Outlook.FormRegionMessageClassAttribute.Appointment)]
            [Microsoft.Office.Tools.Outlook.FormRegionName("OutlookAddIn2.FormRegion1")]
            public partial class FormRegion1Factory
            {
                public Outlook.Inspector Inspector { get; private set; }
    
                public IList<string> PageNames { get; private set; }
                private List<string> _PageNames = new List<string>();
                
                private void FormRegion1Factory_FormRegionInitializing(object sender, Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs e)
                {
                    this.PageNames = _PageNames.AsReadOnly();
    
                    var myOutlookItem = (Outlook.AppointmentItem)e.OutlookItem;
    
                    this.Inspector = myOutlookItem.GetInspector;
                    this.Inspector.PageChange += ins_PageChange;
                }
    
                void ins_PageChange(ref string ActivePageName)
                {
                    if (!this._PageNames.Contains(ActivePageName))
                    {
                        this._PageNames.Add(ActivePageName);
                    }
                }
            }
    
            #endregion
    
    
            private void button1_Click(object sender, EventArgs e)
            {
                var factory = this.Factory as FormRegion1Factory;
                if (factory != null && factory.PageNames.Count > 0)
                {
                    factory.Inspector.SetCurrentFormPage(factory.PageNames.First());
    
                    //factory.Inspector.SetCurrentFormPage("予定\x200b\x200b");//ゼロ幅スペースがくっついていて判りにくいです…               
                }
            }
    
            private void FormRegion1_FormRegionShowing(object sender, System.EventArgs e)
            {
            }
    
            private void FormRegion1_FormRegionClosed(object sender, System.EventArgs e)
            {
            }
        }
    }


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年8月18日 9:08

すべての返信

  • こんな?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Office = Microsoft.Office.Core;
    using Outlook = Microsoft.Office.Interop.Outlook;
    
    namespace OutlookAddIn2
    {
        partial class FormRegion1
        {
            #region Form Region Factory
    
            [Microsoft.Office.Tools.Outlook.FormRegionMessageClass(Microsoft.Office.Tools.Outlook.FormRegionMessageClassAttribute.Appointment)]
            [Microsoft.Office.Tools.Outlook.FormRegionName("OutlookAddIn2.FormRegion1")]
            public partial class FormRegion1Factory
            {
                public Outlook.Inspector Inspector { get; private set; }
    
                public IList<string> PageNames { get; private set; }
                private List<string> _PageNames = new List<string>();
                
                private void FormRegion1Factory_FormRegionInitializing(object sender, Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs e)
                {
                    this.PageNames = _PageNames.AsReadOnly();
    
                    var myOutlookItem = (Outlook.AppointmentItem)e.OutlookItem;
    
                    this.Inspector = myOutlookItem.GetInspector;
                    this.Inspector.PageChange += ins_PageChange;
                }
    
                void ins_PageChange(ref string ActivePageName)
                {
                    if (!this._PageNames.Contains(ActivePageName))
                    {
                        this._PageNames.Add(ActivePageName);
                    }
                }
            }
    
            #endregion
    
    
            private void button1_Click(object sender, EventArgs e)
            {
                var factory = this.Factory as FormRegion1Factory;
                if (factory != null && factory.PageNames.Count > 0)
                {
                    factory.Inspector.SetCurrentFormPage(factory.PageNames.First());
    
                    //factory.Inspector.SetCurrentFormPage("予定\x200b\x200b");//ゼロ幅スペースがくっついていて判りにくいです…               
                }
            }
    
            private void FormRegion1_FormRegionShowing(object sender, System.EventArgs e)
            {
            }
    
            private void FormRegion1_FormRegionClosed(object sender, System.EventArgs e)
            {
            }
        }
    }


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年8月18日 9:08
  • Gekka様 ありがとうございます。参考にさせて頂き、実装してみます。 少々時間がかかってしまいますが、結果をご報告させて頂きます。取り急ぎお礼まで。
    2017年8月18日 10:24
  • Gekka様

    ご報告が遅くなりました。

    教えて頂いたロジックにて、想定通りの動作を確認できました。

    諦めかけておりましたが、実現できて感謝しております。

    ありがとうございました。

    2017年8月24日 4:48