2014-06-19 43 views
2

因爲我在功能區的類中,沒有指向Outlook.Application對象的指針。所以,我不能使用是否有可能在按鈕的onAction函數中捕獲Outlook 2010外接程序中的「發送」事件?

Application.ItemSend += new ApplicationEvents_11_ItemSendEventHandler(MyItemSendEventHandler) 

這個事件處理程序。

如何到達功能區類中的Outlook.Application對象,或者有其他方法來捕獲發送事件?

public void SendEnMail(Office.IRibbonControl control) //OnAction Function 
    { 
     Outlook.Application oApp = new Outlook.Application(); 
     Outlook._MailItem myMail = (Outlook._MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
     myMail.Display(true); 
     Outlook.Application application = Globals.ThisAddIn.Application; 
     application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); 
    } 
    void Application_ItemSend(object Item, ref bool Cancel) 
    { 
     string a = ((Microsoft.Office.Interop.Outlook.MailItem)Item).Body; 
     System.Windows.Forms.MessageBox.Show(a); 
     Cancel = true; 
    } 

我不能捕獲像這樣的ItemSend事件。但如果我將事件處理程序寫入ThisAddIn類

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     Application.ItemSend += new    Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); 
    } 
void Application_ItemSend(object Item, ref bool Cancel) 
    { 
     string a = ((Microsoft.Office.Interop.Outlook.MailItem)Item).Body; 
     System.Windows.Forms.MessageBox.Show(a); 
     Cancel = true; 
    } 

像這樣,它正在工作。

回答

0

我經常這樣做:

Outlook.Application application = Outlook.Application.GetActiveInstance(); 

但這應該工作一樣:

Outlook.Application application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; 

或者,如果您選擇製作COMAddIn你能趕上在的OnConnection事件的應用程序對象。 希望它有幫助

編輯: 它使得事件綁定在插件啓動時完成。當你綁定到onAction上的事件時,你將(從那時起)繼續捕獲每個Item的ItemSend你點擊按鈕的次數(因爲它增加了一個新的處理器)。您也可以嘗試趕上mail.SendEvent

private Outlook.MailItem myMail; 
public void SendEnMail(Office.IRibbonControl control) //OnAction Function 
{ 
    myMail = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
    myMail.Send += mail_Send; 
} 

void mail_Send(ref bool Cancel) 
{ 
    string a = myMail.Body; 
    System.Windows.Forms.MessageBox.Show(a); 
    Cancel = true; 
} 

EDIT2: 因爲我使用的是不同的庫對不起。 根據MSDN它應該是Send事件而不是SendEvent事件。我已經相應地更改了示例。 這次希望它有效。

我想我看到的問題是使用_MailItem,它是MailItem接口的接口。使用MailItem接口,而不是

+0

我是新手在C#和加載項開發。所以,我不明白我會在哪裏寫這行。 – goktugbc

+0

我編輯了我的問題btw。 – goktugbc

+0

它沒有再次工作:( 錯誤'Microsoft.Office.Interop.Outlook._MailItem'沒有包含'SendEvent'的定義,也沒有擴展方法'SendEvent'接受類型爲'Microsoft .Office.Interop.Outlook._MailItem「可以找到(你是否缺少使用指令或程序集引用?) – goktugbc

相關問題