2015-05-21 45 views
0

我正在制作一个简单的Outlook草稿生成器。它工作正常,但我试图通过浏览按钮添加附件,但我无法弄清楚。我需要一个OpenFileDialog对象来使用Attachments.Add方法将它添加到电子邮件中,但我失去了对OpenFileDialog对象的引用,因为它只存在于AddAttachment()函数中。C# - 使用不同的按钮添加Outlook电子邮件附件的问题

OpenFileDialog attachment = new OpenFileDialog(); 

     attachment.Title = "Select files to attach"; 
     attachment.ShowDialog(); 

      if (attachment.ShowDialog() == DialogResult.OK) 
     { 
      mail.Attachments.Add(attachment.FileName, Outlook.OlAttachmentType.olByValue, 1, attachment.FileName); 
     } 

这工作,但它是在相同的功能,我CreateMailItem()函数,这意味着它会一直打开文件对话框,让你在浏览按钮或点击不。

private void CreateMailItem() 
    { 
     Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 
     Microsoft.Office.Interop.Outlook.MailItem mail = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 

     mail.Subject = ""; 
     mail.To = ""; 
     mail.CC = ""; 
     mail.Body = ""; 
     mail.Importance = Microsoft.Office.Interop.Outlook.OlImportance.olImportanceNormal; 
     mail.Display(false); 

该函数之后是OpenFileDialog部分。 我想将OpenFileDialog部件添加到按钮,然后将OpenFileDialog对象实例FileName传递给mail.Attachment.Add()方法,但邮件对象仅存在于CreateMailItem()方法中。说完之后,我想用CreateMailItem()方法生成带有附件的电子邮件草稿。有小费吗?

在此先感谢!

回答

0

看起来您只需要在全局范围声明OpenFileDialog类的实例并检查FileName属性是否已初始化。

或者干脆可以传递的MailItem类的实例给AddAttachment方法:

public void AddAttachment(MailItem mail) 
{ 
    OpenFileDialog attachment = new OpenFileDialog(); 

    attachment.Title = "Select files to attach"; 
    attachment.ShowDialog(); 

     if (attachment.ShowDialog() == DialogResult.OK) 
    { 
     mail.Attachments.Add(attachment.FileName, Outlook.OlAttachmentType.olByValue, 1, attachment.FileName); 
    } 
} 

private void CreateMailItem() 
{ 
    Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 
    Microsoft.Office.Interop.Outlook.MailItem mail = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 

    mail.Subject = ""; 
    mail.To = ""; 
    mail.CC = ""; 
    mail.Body = ""; 
    mail.Importance = Microsoft.Office.Interop.Outlook.OlImportance.olImportanceNormal; 

    AddAttachment(mail); 

    mail.Display(false); 
} 

最后,不要在一行代码使用多个点。我总是建议打破财产和方法调用链,并在单独的行中声明它们。它允许即时发布底层的COM对象。完成使用后,请使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook对象。然后在Visual Basic中将变量设置为Nothing(C#中的空值)以释放对该对象的引用。请阅读MSDN中Systematically Releasing Objects文章的更多内容。

+0

我之前尝试过这样做,问题在于它调用CreateMailItem()方法内部的方法AddAttachment(),所以它总是会弹出OpenFileDialog,当我真的只希望它弹出时,只需点击我的浏览按钮。 – user3642271

+0

你是否需要将选定的文件附加到多个电子邮件? –

+0

不,只是为了创建这封电子邮件。我只需要一个浏览按钮功能来记住我想添加到电子邮件中的文件,然后在点击“生成电子邮件按钮”时添加它们。 – user3642271