![](/img/trans.png)
[英]How to get outlook select name dialog box to focus when opened from wpf application and outlook is running
[英]Set Parent for the dialog box when the same dialog box can be opened from both WPF and WinForm application
我有一個應用程序,它有 2 個模塊(一個由 WinForms 制成,另一個由 WPF 制成)。 我在兩個模塊上都有一個導出按鈕。
導出按鈕用於將網格導出到 Excel 文件並保存在我的本地。
單擊“導出”按鈕時,我有一個通用方法(ExportToExcel())將網格導出到 excel。
現在正如我所說,我的應用程序同時使用了 WPF 和 WinForms,現在當用戶單擊第一個模塊(WinForms)上的導出按鈕時,導出對話框打開,現在如果用戶單擊第二個模塊(WPF)的導出按鈕問題在進行 OLE 調用之前,必須將當前線程設置為單線程單元 (STA) 模式。 確保您的 Main 函數上標記了 STAThreadAttribute。 僅當調試器附加到進程時才會引發此異常。 我已經使用thread.SetApartmentState(ApartmentState.STA)更正了應用線程,如下面的代碼所示。
現在使用線程並將 ApartmentState 設置為 STA 后的問題是父級已從“導出”對話框中刪除,該對話框應該是單擊“導出”按鈕並打開對話框的特定模塊(第一個或第二個),現在對話框的父級是窗口而不是應用程序模塊(第一個或第二個)。
另一個問題是,由於沒有為導出對話框設置父級,如果用戶多次單擊導出按鈕,則會打開多個導出對話框,這是不正確的,一旦單擊導出按鈕並打開對話框,除非用戶完成對對話框的操作或將其關閉,否則用戶不應再次單擊導出框。
我的要求是,對話框的父級應該是打開對話框的一個模塊,並且用戶在對話框操作完成之前不能對應用程序執行任何操作。
導出按鈕單擊的代碼
public void ExportToExcel(UltraGrid gridToExport, UltraGridExcelExporter ultraGridExcelExporter, string name)
{
Thread thread = new Thread((ThreadStart)(() =>
{
// code to open dialog box and perform operation on it.
}));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
我不確定你說的是什么,但試試這個:
//You need to enable (IsMdiContainer)
//Example, in your WindowsForms set:
this.IsMdiContainer = true;
WpfMenu formMenu = new WpfMenu();
formMenu.MdiParent = this;
formMenu.Show();
這使得“表單菜單”成為正在執行的表單的子項,我相信它也適用於 WPF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.