2011-09-16 6 views
4

私はOutlookアドインを作成しましたが、XMLリボン構成ファイルを使用して新しいタブとボタンを指定しています。ボタンはOutlook内の新しいタブに読み込まれます。今では、ユーザーに基づいて、これらのボタンを非表示または無効にしたい場合があります。 Outlook Interop APIを使用してカスタムタブのメニューボタンを無効にする最も簡単な方法は何ですか?Outlookアドインとカスタムメニュー項目の無効化/非表示

私の最初の推測は、リボンが作成された後にいくつかのコマンドバーコレクションを繰り返し、メニューボタンを検索する必要があるということですが、これらのコレクションがどこにあるのかわかりません。

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject() 
{ 
    this.ribbon = new MyRibbon(); 

    // loop through tabs and ribbon items, look for my custom control, and enabled/disable specific buttons. 

    return this.ribbon; 
} 

答えて

6

申し訳ありません。最後にそれを分かりました。 xml構成内には、ボタン/グループ/タブ用のgetVisibleコールバックがあります。

だから、あなたがする必要があるすべては、私の場合、私はグループのためにそれをやった、XMLにコールバックを追加します:

<ribbon> 
    <tabs> 
     <tab idQ="myNs:myTab" label="My Label" > 
      <group id="settingsGroup" label="Settings" getVisible="Control_Visible" > 
       <button id="preferences" label="Preferences" image="configuration.png" 
     screentip="Preferences" size="large" onAction="Settings_Click" supertip="Preferences" /> 
      </group> 
     </tab> 
    </tabs> 
</ribbon> 

との間の場合、コールバックメソッド

public bool Control_Visible(Office.IRibbonControl control) 
{ 
    // In order to maintain a reference to the groups, I store the controls into a List<Office.IRibbonControl>. 
    if(!this.groupControls.Contains(control)) 
    { 
     this.groupControls.Add(control); 
    }   

    // logic here to determine if it should return true or false to be visible... 
    return true; 
} 

を作成Outlookの使用、ボタン/タブ/グループの表示設定を変更する場合は、リボンのInvalidate()メソッドを呼び出してリボンを再描画する必要があります。 IE:

this.ribbon.Invalidate(); 
関連する問題