前提・実現したいこと
C#を使って、Excelを制御するプログラムを作っています。
Microsoft.Office.Interop.Excel名前空間のApplicationクラスを使っています。
呼び出し元となるC#プログラムにUIがあり、生成したExcelが呼び出し元プログラムの背面に表示されるようにしたいです。
タスクバーでExcelのアイコンをクリックしても、呼び出し元プログラムの前面には出てきて欲しくないです。
イメージ的には、Excelの前面に表示したプロパティウインドウで何か入力し背面のExcelに反映させる、のようなUIを考えています。
恐れ入りますが、何か解決策はあるでしょうか。
なお、他のアプリケーションは、操作されれば通常のアプリ通りに、前面に表示されるようにしたいので、フォームのTopMostプロパティをTrueに設定するというのは、やめたいと思っています。
試したこと
Microsoft.Office.Interop.Excel名前空間で生成したExcelインスタンスのWindowActivateイベントで、イベント検知時に呼び出し元アプリケーションをアクティブにする、ということを試したのですが、このイベントはExcel内でのアクティブなWindowが切り替わった時に発生するもので、タスクバーのExcelをクリックしても発生しませんでした。そのため、この方法は断念しました。
C#
1private void Form1_Load(object sender, EventArgs e) 2{ 3 // Excelアプリケーションを生成し、イベントハンドラを割り当てる 4 var application = new Microsoft.Office.Interop.Excel.Application(); 5 application.WindowActivate += this.Application_WindowActivate; 6 application.WorkbookActivate += this.Application_WorkbookActivate; 7 application.Visible = true; 8} 9 10private void Application_WorkbookActivate(Workbook Wb) 11{ 12 // Excelアプリケーションの中でアクティブなブックが切り替わった時にイベント発生する 13 System.Diagnostics.Debug.Print($"{DateTime.Now.ToString()} Application_WorkbookActivate Wb.FullName:{Wb.FullName}"); 14} 15 16private void Application_WindowActivate(Workbook Wb, Window Wn) 17{ 18 // Excelアプリケーションの中でアクティブなウインドウが切り替わった時にイベント発生する 19 System.Diagnostics.Debug.Print($"{DateTime.Now.ToString()} Application_WindowActivate Wb.FullName:{Wb.FullName}"); 20}
補足情報(FW/ツールのバージョンなど)
今回のテスト環境は以下の通りです。
- Visual Studio 2019
- C#
- .NET Framework 4.5
- Microsoft Excel 2010(たまたまテスト環境が2010でした)
- Windows 10
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/23 07:51
2019/12/23 11:04
2019/12/23 13:13
2019/12/23 14:25 編集
2019/12/24 11:26
2019/12/25 04:30 編集
2019/12/25 05:02