5

我正在使用以下代码从 DataGridView 读取电子邮件地址,然后创建 Outlook 电子邮件。这完美地工作,除了新电子邮件设置为 topMost 和/或作为对话窗口打开,这意味着当新电子邮件窗口打开时,我无法在 Outlook 中单击或执行任何其他操作。如果我打开了我的新电子邮件并且我试图在我的收件箱中搜索或查找某些内容,这会出现问题。此外,在我关闭或发送电子邮件之前,我的应用程序不会响应(被锁定)。

有没有办法创建新电子邮件并仍然允许常规功能?如果我从 Outlook 本身单击新电子邮件按钮,我可以根据需要打开任意数量的电子邮件,使用搜索等。

this.TopMost = false条线是隐藏我的 WinForms 应用程序并在前面显示新的电子邮件窗口。

try
{

      string emailString = resultsGrid[resultsGrid.Columns["Email"].Index, resultsGrid.SelectedCells[resultsGrid.Columns["Email"].Index].RowIndex].Value.ToString();

    if(emailString.Contains("mailto:"))
    {
        emailString = emailString.Replace("mailto:", "");
    }

    this.TopMost = false;

    // Create the Outlook application by using inline initialization.
    Outlook.Application oApp = new Outlook.Application();

    //Create the new message by using the simplest approach.
    Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    oMsg.Subject = "";
    oMsg.To = emailString;
    oMsg.Body = "";
    oMsg.Display(true);


    oMsg = null;
    oApp = null;
}
catch (Exception ex)
{
    MessageBox.Show(string.Format("An error occurred: {0}", ex.Message));
}

奇怪的是,如果我在电子邮件中写一些东西并关闭它,我可以保存它。如果我这样做,当我打开电子邮件备份时,它会返回到它的锁定状态。我开始认为这与电子邮件的创建方式有关,因此某些设置或属性正在被应用和保存。

4

1 回答 1

10

尝试替换此行:

oMsg.Display(true);

…和:

oMsg.Display(false);

根据MailItem.Display文档,参数的名称是Modal,并且应该指定为:

True使窗口模态化。默认值为False

于 2012-06-03T14:39:35.520 回答