2013-03-15 15 views
0

我有一個展望VSTO應用程序。我正試圖從我加載的窗體調用SeletNamesDialog。對話框出現了,它很好,它的模式很好,但它似乎將我的表單移動到Outlook應用程序後面。因此,在我選擇了一堆名稱並單擊確定後,對話框消失了,但我的表單不可見,除非我最小化Outlook(這顯然不理想)。在我的VSTO outlook應用程序中,爲什麼調用SelectNamesDialog.Display()將我的表單移到Outlook後面?

有沒有辦法避免這種情況發生?這裏是我用來加載對話框的代碼:

var app = new Application(); 

     AddressList gal = app.ActiveExplorer().Session.GetGlobalAddressList(); 
     var dlg = app.Session.GetSelectNamesDialog(); 
     dlg.InitialAddressList = gal; 
     bool b = dlg.Display(); 
     var sb = new StringBuilder(); 
     foreach (Recipient r in dlg.Recipients) 
     { 
      sb.Append(r.Name + ";"); 
     } 
     txtPeople.Text = sb.ToString(); 

回答

1

Outlook在顯示地址簿時不會讓你指定窗體的窗口句柄。

您可以使用擴展MAPI(C++或僅Delphi的)和IAddrbook::Address方法或贖回及其RDOAddressBook.ShowAddressBook方法(它有參數ParentWindow)或RDOSelectNamesDialog對象(它將使用的窗口句柄分配給RDOSession.ParentWindow財產)

+0

當我嘗試redemtion我得到這個錯誤:試圖在OS Loader鎖內的託管執行。不要試圖在DllMain或圖像初始化函數中運行託管代碼,因爲這樣做會導致應用程序掛起。 – leora 2013-03-15 02:29:17

+0

關於如何使其工作(通過outlook或贖回錯誤),您有任何建議 – leora 2013-03-15 02:42:10

+0

該警告可以安全地忽略 - 它會被記錄,因爲Redemption在啓動時動態加載MAPI dll。您可以通過轉到Debug |來忽略該錯誤例外|託管調試助手並清除LoaderLock條目 – 2013-03-15 04:47:44

相關問題