2016-08-07 3 views
4

私はパワーポイントアドインを開発しており、これを行うにはリボンデザイナーを使用しています。私はRibbonDropDownItemsを含むギャラリーアイテムを持っています。 RibbonDropDownItem Interfaceにはthe RibbonButton Interfaceのような 'Click'イベントがないので、そこにクリックリスナーを追加する方法が見つかりません。RibbonDropDownItemクリックリスナー

したがって、RibbonDropDownItemからクリックイベントをキャッチする方法はありますか?


EDIT: オフィス2013年から2016年あなたがRibbonDropDown制御のSelectionChangedイベントをサブスクライブする必要が

答えて

1

ためのアドインを実装します。ユーザーがリボンのドロップダウンコントロールで新しいアイテムを選択すると発生します。

  • ユーザーが既に選択されている項目を選択したときに、選択した項目が変更された場合にのみ、SelectionChangedイベントが発生します。
  • ユーザーがボタンをクリックしたとき。
  • コード内のSelectedItemまたはSelectedItemIndexプロパティに新しい値を割り当てるとき。

最後に、あなたは、MSDNでの記事の次直列に流暢なUIコントロールの詳細を読むことができます:

+0

こんにちは、ありがとうございました。私はそれを指定していないが、私はオフィス2013/2016と一緒に働いている。私はSelectionChangedイベントが最新のAPIバージョンでサポートされていることを理解できますか? – Mario

+0

いいえ、間違った道があります。注意してください。リボンXMLマークアップとハンドコールバックをコード内で使用することもできます。 –

+0

私はリボンのXMLを乱さずに解決策を見つけました。それでも、あなたの答えは解決策を提供します - これはおそらくよりクリーンです - 別のアプローチを使用して、upvote :) – Mario

0

私が発見しましたXMLアプローチを採用することなくソリューションを提供します。 (私のRibbonDropDownItemsが含まれています)

RibbonGalleryクラス「は、ユーザがこのRibbonGallery上項目をクリックしたときに発生し、」クリックイベントを提供します。

だから、アイテムのいずれかがクリックされたことを確認してからRibbonGallery#のSelectedItemで選択した項目を取得するためにRibbonGalleryクリックのリスナーにを使用することができます。

private void myDropdownGallery_Click(object sender, RibbonControlEventArgs e) 
{ 
    //'ribbonGalleryObject' is the object created in Ribbon.Designer.cs 
    RibbonDropDownItem item = ribbonGalleryObject.SelectedItem; 

    string itemLabel = item.Label; 

    if (itemLabel == "myItem1") { 
     System.Windows.Forms.MessageBox.Show("Item 1 says hello"); 
    } 
    else if (itemLabel == "myItem2"){ 
     System.Windows.Forms.MessageBox.Show("Item 2 says hello"); 
    } 
} 

さらに、あなたはRibbonDropDownItemsイベントハンドラを区別し、現在の1と同様、あなたのアーキテクチャを維持するために反射に頼ることができる:ここでは一例です。

private void gallery1_Click(object sender, RibbonControlEventArgs e) 
{ 
    //'ribbonGalleryObject' is the object created in Ribbon.Designer.cs 
    RibbonDropDownItem item = ribbonGalleryObject.SelectedItem; 

    string itemLabel = item.Label; 
    string methodName = itemLabel + "_Click"; 

    System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName); 
    methodInfo.Invoke(this, null); 
} 

//click event handler for item 1 
public void myItem1_Click() 
{ 
    System.Windows.Forms.MessageBox.Show("Item 1 says hello"); 
} 

//click event handler for item 2 
public void myItem2_Click() 
{ 
    System.Windows.Forms.MessageBox.Show("Item 2 says hello"); 
} 

アイテムのラベル項目のイベントハンドラ名間の「隠れた」依存関係があるので、あなたが反射アプローチに注意する必要があります注意してください。

関連する問題