2015-05-21 94 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