我有一个问题,我已经尝试解决好几天了,但没有运气!
在我的 Windows 窗体应用程序中,我有一个网格。一列包含一个电子邮件地址。当用户双击此列时,我想通过 Outlook 自动化打开一个新的电子邮件窗口。此窗口应具有焦点并允许用户立即键入。
一切正常,当:
- 我正在从 Visual Studio 运行我的应用程序。
- 或者我的应用程序有焦点。
但是,当我运行我的 .exe并且双击该列时 Outlook 具有焦点时,会发生以下情况:
- 新的邮件窗口按预期打开
- 光标在新邮件窗口中闪烁(如预期的那样)
- 当用户开始输入时,光标在 Outlook 中仍然闪烁,但输入的文本出现在我的应用程序的网格中,而不是在 Outlook 中。
我能够用一个上面有一个文本框的简单表单来重现这个问题。
我使用以下代码:
private void textBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
OpenOutlookMail(textBox1.Text);
}
private void OpenOutlookMail(string to)
{
MailItem item = OutlookApp.CreateItem(OlItemType.olMailItem) as MailItem;
item.To = to;
item.Subject = string.Empty;
item.Body = string.Empty;
item.Display();
}
protected Application OutlookApp
{
get
{
if (mOutlookApp == null)
{
mOutlookApp = new Application();
}
return mOutlookApp;
}
}
我已经尝试过的是
- 在调用 OpenOutlookMail 之前通过 this.Activate() 激活我当前的表单
- 激活 MailItem 检查器对象
- 通过自动化激活 Outlook 的 ActiveWindow 和 ActiveExplorer
- 如此处所述使用 AutoIt与 MSDN 论坛上的 MS Word 类似的问题
任何帮助,将不胜感激!