5

次のコードを使用して、DataGridView から電子メール アドレスを読み取り、Outlook 電子メールを作成しています。これは完全に機能しますが、新しい電子メールが topMost として設定されているか、ダイアログ ウィンドウとして開かれていることを除いて、新しい電子メール ウィンドウが開いている間は Outlook でクリックしたり他の操作を行ったりすることはできません。これは、新しいメールを開いて、受信トレイで何かを検索または検索しようとした場合に問題になります。また、メールを閉じるか送信するまで、アプリケーションが応答しません (ロックされます)。

新しい電子メールを作成し、通常の機能を引き続き使用する方法はありますか? Outlook 自体から新しいメール ボタンをクリックすると、必要な数のメールを開いたり、検索を使用したりできます。

行は、this.TopMost = falseWinForms アプリを非表示にして、新しいメール ウィンドウを前面に表示することです。

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 に答える