我有一個C#Winforms應用程序。我已經將項目的輸出類型設置爲'類庫',並使其可見,所以我可以在Excel中的VBA代碼中引用它。因此,我可以通過Excel啓動我的WinForms-App。當關閉在DLL中調用的C#WinForms應用程序時,Excel意外關閉
到目前爲止一切正常。在我的VBA代碼我打電話像這樣(微距)應用:
Dim app As MyWinFormsApp.Program
Set app = New MyWinFormsApp.Program
Dim result As Integer
result = app.Main()
我的計劃課我的C#-Code看起來是這樣的:
public int Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
return 0;
}
當我開始我的宏的的WinForms窗口打開並且程序正常工作。
我的問題是:當我通過單擊紅色X關閉WinForms窗口時,Excel也意外關閉。
我已經發現是:
在我的C#類Form1.Designer.cs我有這樣的處置法:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
當我打電話base.Dispose() - 方法通過「假」
base.Dispose(false);
Excel中沒有意外關閉,當我關閉的WinForms-窗口,但是當我想以後關閉Excel,這是不可能的。我得到這個'Mouse-Wait-Symbol'並且不能做任何事情,所以我必須殺掉TaskManager中的Excel進程。
(我也嘗試使用新的WinForms項目真的什麼都不提供,在我原來的項目中,我做錯了什麼?我有完全一樣的行爲。)
所以我問題是:有誰知道我可以如何關閉我的WinForms-App,然後以「常規方式」關閉Excel。
非常感謝!
不知道閹我明白你的權利。在調用我的app.Main()方法之前,我只需在我的VBA代碼中設置Application.UserControl = True。得到了同樣的結果.. Excel正在意外關閉...... – toniweser
我現在無法測試,但我說的是在您的Main()方法中設置,而不是在vba代碼中。也許程序在運行時正在修改它,idk ... – Magnetron