在我的VSTO outlook应用程序中,为什么调用SelectNamesDialog.Display()会将我的表单移到Outlook后面?

时间:2013-03-15 01:16:03

标签: outlook vsto

我有一个Outlook VSTO应用程序。我试图从我加载的表单调用SeletNamesDialog。对话框出现很棒,它的模态很好,但它似乎将我的形式移到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 个答案:

答案 0 :(得分:1)

在显示地址簿时,Outlook不允许您指定表单的窗口句柄。

您可以使用扩展MAPI(仅限C ++或Delphi)和IAddrbook::Address方法或Redemption及其RDOAddressBook.ShowAddressBook方法(具有ParentWindow参数)或RDOSelectNamesDialog对象(它将使用分配给RDOSession.ParentWindow属性的窗口句柄)