2012-07-02 51 views
5

我是新來的Outlook編程所以第一步(後來更高級)是以下任務:如何訪問Outlook中的檢查器窗口功能區?

  • 創建一個新的色帶(Ribbon1)選項卡(應探險家和新的督察顯示)
  • 選擇時(瀏覽)或開口(督察)郵件的功能區選項卡應顯示郵件的主題(如前所述測試)

的資源管理器部分是很容易得到持續,但我有爲新的inspecto做上述的問題RS

我已經試過各種方法,但似乎沒有工作:

  • 我在NewInspector試圖引用Globals.Ribbons [檢查] .Ribbon1但總是空

  • 我試過在NewInspector訂閱激活事件,並從那裏做,但在那裏Application.ActiveInspector()爲空,如果我保存檢查員的全球拷貝從NewInspector事件不會對工作第一個新的檢查員(僅在第二次閱讀郵件之後)。不是在撰寫郵件)

  • 我試圖用絲帶Load事件,但只會發生在第一時間

  • 我試圖使用Globals.Ribbons.Ribbon1成員,但只爲工作第一次

(我發現很多NewInspector的樣品,但沒有一個似乎要修改的不止這一個https://stackoverflow.com/questions/7852017/outlook-2007-ribbon-object-reference-not-set-to-an-instance-of-an-object其他和色帶有沒有答案)

這是推動我瘋了......是真的沒有辦法做這樣一個簡單的任務!?參考

void InspectorsNewInspector(Outlook.Inspector inspector) 
    { 
     AddInspectorEventHandlers(inspector); 
    } 

    private void AddInspectorEventHandlers(Outlook.Inspector inspector) 
    { 
     if (inspector == null) 
     { 
      return; 
     } 

     Ribbon1 ribbon1 = Globals.Ribbons[inspector].Ribbon1; //This always return null!!! 

     ((Outlook.InspectorEvents_10_Event)inspector).Activate += InspectorActivate; 
     ((Outlook.InspectorEvents_10_Event)inspector).Close += InspectorClose; 

     _openInspectors.Add(inspector); 
    } 
+0

分享您對您如何線了'InspectorsNewInspector'源。整個AddIn類將有利於上下文。 – SliverNinja

回答

0

示例代碼在 'NewInspector' 事件,自定義功能區這不加載。如果您調試了代碼,您將會看到它只是在'NewInspector'事件發生後纔會發送到自定義色帶設計器。您可以做的是在自定義色帶加載事件期間實施您需要的內容。那就是

private void MyRibbon_Load(object sender, RibbonUIEventArgs e){} 

在這裏你可以得到當前活動的檢查員。從中你可以得到你需要的物品。

例:

 Inspector inspector = Globals.WPTAddIn.Application.ActiveInspector(); 
     if (inspector != null) 
     { 
      if (inspector.CurrentItem != null) 
      { 
       if (inspector.CurrentItem is MeetingItem) 
       { 
        MeetingItem meetingItem = (MeetingItem)inspector.CurrentItem;}}} 
0

我碰到了同樣的問題今天和一個解決辦法走了過來。我基本上一直試圖訪問我剛剛創建的MailItemRibbon

要解決這個問題,我已經在Globals.Ribbons(不使用檢查器索引器,因爲它給你一個空引用)的每個功能區上循環。對於每個Ribbon對象,我檢查它的類型爲Inspector的上下文。然後我可以對Inspector.CurrentItem進行平等檢查,以確定它們的引用是否相等。如果他們是平等的,我知道要使用Ribbon

這裏有一個片斷

Outlook.MailItem mail = (Outlook.MailItem)this.Application.CreateItem(Outlook.OlItemType.olMailItem); 
Outlook.Inspector currentInspector = (Outlook.Inspector)mail.GetInspector; 

Ribbon2 currentRibbon = null; 
foreach (Ribbon2 ribbon in Globals.Ribbons) 
{ 
    var ribbonInspector = (Outlook.Inspector)ribbon.Context; 
    if (ribbonInspector.CurrentItem.Equals(currentInspector.CurrentItem)) 
    { 
     currentRibbon = (Ribbon2)ribbon; 
     break; 
    } 
} 
相關問題