2013-10-06 4 views
0

Word에 사용자 지정 리본이 있습니다. 리본에는 하나의 comboBox가 있습니다. comboBox_recentConditions은 디자이너를 사용하여 정의되었으므로 초기화시 초기화되고로드시 비어 있습니다. 이제는 Application_WindowActivate 이벤트가 발생할 때마다이 comboBox를 동적으로 설정하려고합니다.C# VSTO - RibbonControl을 동적으로 설정합니다.

각 Word 문서 RibbonControls라는 클래스의 자체 인스턴스가 있습니다

static void Application_WindowActivate(Document doc, Window Wn) 
    { 
     Globals.Ribbons.SourceRibbon.comboBox_recentConditions = WordGate.docRibbonControls.RecentConditionComboBox; 
    } 

는 리본 콤보 있다는 것입니다 문제 : Application_WindowActivate 이벤트 지금

class RibbonControls 
{ 
    private RibbonComboBox recentConditionComboBox; 

    public RibbonControls() 
    { 
     this.recentConditionComboBox = new RibbonComboBox(); 
    } 

    public RibbonComboBox RecentConditionComboBox 
    { 
     get 
     { 
      return recentConditionComboBox; 
     } 
     set 
     { 
      recentConditionComboBox = value; 
     } 
    } 
} 

을 나는 다음을 수행 컨트롤은 변경되지 않고 Application_WindowActivate가 호출 된 후에도 항상 비어 있습니다. 런타임에 각 문서에 실제로 해당 항목이 포함 된 자체 comboBox가 있는지 확인하기 위해 테스트를 진행했습니다. 내가 무엇이 누락 되었습니까?

제 질문을 정리하려면 : 제가 comboBox.Items에 3 가지 항목이 있다고 가정 해 봅시다.

MessageBox.Show(Globals.Ribbons.SourceRibbon.comboBox_recentConditions.Items.Count.ToString()); 

Application_WindowActivate의 끝에서이 숫자 3.

감사를 인쇄합니다 : 그것을 클릭하면 내가 이것을 추가하면 나는 아무것도 볼 수 있지만.

답변

0

그렇게 할 수 없습니다. 읽어 보시기 바랍니다 Ribbon callbacks

콤보 상자에 항목을 추가하는 getItemLabel 이벤트를 사용해야합니다. WindowActivate 중에 콤보 박스를로드하려면 Ribbon.Invalidate 또는 Ribbon.InvalidateControl을 호출하면 관련 리본 콜백이 모두 호출됩니다.

+0

시도 : Globals.Ribbons.SourceRibbon.RibbonUI.InvalidateControl ("comboBox_recentConditions"); Globals.Ribbons.SourceRibbon.RibbonUI.Invalidate(); 하지만 작동하지 않습니다. – etaiso

+0

Globals.ThisAddin.Ribbon.Invalidate()이어야합니다. – Kiru

+0

리본이 ThisAddIn에 없습니다. – etaiso