VSTOで複数のユーザコントロールを切り替えるには

VSTO
スポンサーリンク
スポンサーリンク

したいこと

VSTOで複数のユーザコントロールを切り替えたい

結論

切り替え可能、同時に複数出すことも可能

方法 切り替える場合

  1. VSTOアドインのプロジェクトを新規に作成してください。
  2. リボンを追加して、ボタンを2個追加して下さい。(OfficeImageId=A,Bに設定)それぞれのボタンでUserControlを起動するためのボタンです。
  3. それぞれのボタンをクリックした際のコードを、Ribbon1.csに次のように追加します。ChangeWindow()は後ほど追加。
  4.         private void button1_Click(object sender, RibbonControlEventArgs e)
            {
                Globals.ThisAddIn.ChangeWindow(0);
            }
    
            private void button2_Click(object sender, RibbonControlEventArgs e)
            {
                Globals.ThisAddIn.ChangeWindow(1);
            }
    
  5. UserControl1.cs, UserControl2.csとして、UserControlを追加します。

  6. ThisAddin.csに以下のようにコードを追加します。myPane,_index, ChangeWindow,ThisAddIn_Startup()内にコードを追加しています。
  7.         public Microsoft.Office.Tools.CustomTaskPane myPane;
    
            private int  _index = -1;
    
            public void ChangeWindow(int index)
            {
                if (index != _index && !myPane.Visible)
                {
                    myPane = this.CustomTaskPanes[index];
                    myPane.Visible = true;
    
                    _index = index;
                }
            }
    
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
                myPane = this.CustomTaskPanes.Add(new UserControl1(), "UserCont1");
                myPane = this.CustomTaskPanes.Add(new UserControl2(), "UserCont2");
            }
    
  8. F5で実行してください。Aボタン(Button1)を押すと、UserControl1を表示されます。×ボタンを押して、Bボタンを押すと、UserContorl2が表示されます。

方法 複数出す場合

ThisAddin.csのChangeWindow関数を以下のようにコードを変更します。

        public void ChangeWindow(int index)
        {
                myPane = this.CustomTaskPanes[index];
                myPane.Visible = true;

        }

実行すると以下のようになります。ButtonA,Bを順に押した状態です。

まとめ

もう少し工夫が必要かもしれませんが、メモとして残しておきます。

タイトルとURLをコピーしました