2012-07-02 10 views
5

私はOutlookのプログラミングに新たなんだ最初のステップ(もっと後で進ん)次の作業であるためそれほど:Outlookのインスペクタウィンドウリボンにアクセスする方法は?

  • 新しいリボンを作成します(Ribbon1)タブが(探検家と新しい検査官に示すべきである)

(テストに述べたように)リボンタブは、メールの件名を表示する必要があります選択する(探検)または開口部(インスペクター)メールすると

  • は、エクスプローラの一部は、軌道に乗るのは非常に簡単でしたが、私は持っています新しいinspectoのための上記の問題RS

    私は様々なアプローチが、どれを試してみたが動作するようです:私はGlobals.Ribbons [インスペクタ] .Ribbon1を参照するようにNewInspectorで試してみた

    • が、それは常にnullである

    • 私はNewInspectorでActivateイベントを購読しようとしましたが、Application.ActiveInspector()はnullであり、NewInspectorイベントからインスペクタのグローバルコピーを保存すると動作しません最初の新しいインスペクタ(2回目以降の読まれたメールのみ)私はリボンのLoadイベントを使用しようとしたが、それが唯一の最初の時間に発生していない

    • )コンメールに

    • 私はGlobals.Ribbons.Ribbon1メンバーを使用しようとしただけのために働くことにしましたこれは私が運転している初めて

    (私はNewInspectorのサンプルをたくさん見つけたが、誰もがこの1 https://stackoverflow.com/questions/7852017/outlook-2007-ribbon-object-reference-not-set-to-an-instance-of-an-object以外のリボンを変更したいように見えるんし、そのために何の答えは存在しない)

    クレイジー...このような簡単な作業を行う方法は本当にありません! 'NewInspector' イベント中に参照

    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

    シェアだということを使用することを知っています。 AddInクラス全体は、コンテキストにとって有益です。 – SliverNinja

    答えて

    0

    ため

    サンプルコードは、カスタムリボンは、それがロードされていません。コードをデバッグすると、カスタムリボンデザイナーに行く '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にループしました(インスペクタインデクサを使用しないと、null参照が返されます)。 Ribbonオブジェクトごとに、コンテキストがInspectorであることを確認します。私はInspector.CurrentItemの等価チェックをして、それらの参照が等しいかどうかを判断することができます。それらが等しい場合、私はRibbon

    は、ここでは、 `InspectorsNewInspector`アップ配線方法のためのあなたの源スニペット

    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; 
        } 
    } 
    
    関連する問題