したいこと
VSTOで複数のユーザコントロールを切り替えたい
結論
切り替え可能、同時に複数出すことも可能
方法 切り替える場合
- VSTOアドインのプロジェクトを新規に作成してください。
- リボンを追加して、ボタンを2個追加して下さい。(OfficeImageId=A,Bに設定)それぞれのボタンでUserControlを起動するためのボタンです。
- それぞれのボタンをクリックした際のコードを、Ribbon1.csに次のように追加します。ChangeWindow()は後ほど追加。
- UserControl1.cs, UserControl2.csとして、UserControlを追加します。
- ThisAddin.csに以下のようにコードを追加します。myPane,_index, ChangeWindow,ThisAddIn_Startup()内にコードを追加しています。
- F5で実行してください。Aボタン(Button1)を押すと、UserControl1を表示されます。×ボタンを押して、Bボタンを押すと、UserContorl2が表示されます。

private void button1_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.ChangeWindow(0);
}
private void button2_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.ChangeWindow(1);
}


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");
}

方法 複数出す場合
ThisAddin.csのChangeWindow関数を以下のようにコードを変更します。
public void ChangeWindow(int index)
{
myPane = this.CustomTaskPanes[index];
myPane.Visible = true;
}
実行すると以下のようになります。ButtonA,Bを順に押した状態です。

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

