したいこと
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を順に押した状態です。
まとめ
もう少し工夫が必要かもしれませんが、メモとして残しておきます。