2015-02-03 11 views
0

토글 단추가있는 탭을 추가 한 사용자 지정 리본이 있습니다. 이 토글 버튼에는 토글 버튼이 눌린 상태를 반환하는 콜백 함수에 링크 된 getPressed 속성이 있습니다. 토글 버튼의 ​​목적은 사용자 정의 작업 창을 표시하거나 숨기는 것입니다. 이것은 잘 작동합니다.여러 통합 문서에 대해 Excel 2013에서 리본 컨트롤 무효화

그러나 내 문제는 Excel 2013에서 두 개 이상의 통합 문서를 열어 토글 단추를 무효화하면 활성 통합 문서 중 하나만 업데이트된다는 것입니다. 또한 모든 통합 문서에서 사용자 지정 작업 창이 표시되거나 보이지 않도록 다른 통합 문서의 토글 단추를 누른 상태를 업데이트하려고합니다.

누구나 Excel 2013에서 모든 통합 문서의 리본에서 컨트롤을 무효화하는 방법을 알고 있습니다.

저는 vb.net과 excel-dna를 사용하고 있습니다. 전환 버튼 그렇게 정의된다

<toggleButton id="toggleButtonInputData" size="large" onAction="rxToggleButton_onAction" getPressed="rxToggleButton_getPressed" getImage="rxButton_GetImage" getLabel="rxbutton_GetLabel" getEnabled="rxGenericControl_GetEnabled" visible="true"/> 

콜백 함수는 다음

Public Sub CTP_InputData_VisibleStateChange() Handles CTP_InputData.VisibleStateChange 
     XLRibbon.myRibbon.InvalidateControl("toggleButtonInputData") 
End Sub 
+0

대신 Invalidate 메서드를 사용해 보셨습니까? –

+0

예, 결과는 동일합니다. 활성 통합 문서 리본 만 업데이트됩니다. –

답변

1

무효화에만 위해 처리된다

Function rxToggleButton_GetPressed(ctl As CustomUI.IRibbonControl) As Object 
     Select Case ctl.Id 
      Case "toggleButtonInputData" 
       Return CTP_InputData.IsToggleButtonPressed 
     End Select 
    End Function 

제가 사용 전환 버튼을 무효화 활성 통합 문서의 리본. 그러나 다른 통합 문서로 전환하면 콜백이 다시 실행되어 새 통합 문서의 리본에 적용됩니다. 당신은 제목 표시 줄 또는 활성화 할 통합 문서의 리본을 클릭하면 예상대로

은, 모든 작품 :

버그이 전환 관련 엑셀 2013에서 몇 가지 단점이있다. 그러나 활성화중인 통합 문서의 셀을 클릭하면 두 개의 콜백이 생깁니다. 첫 번째 콜백은 비활성화 통합 문서의 리본에 적용되고 두 번째 콜백은 활성화 통합 문서의 리본에 적용됩니다. 문제는 비활성화 된 도서에 대한 호출 여부를 콜백에서 구별 할 수 없다는 것입니다. COM 이벤트를 사용하면 COM 통합 문서 및 Window- (De) Activate 이벤트가 모두 실행 된 후에도 콜백이 발생합니다.

Excel 2013의 한 가지 분명한 버그는 IRibbonControl .Context 올바른 창으로 설정되어 있지 않습니다 - 그것은 활성화 창을 반영하는 콜백 모두 첫 번째 콜백이 비활성화 창에 적용됩니다 불구하고 여기에

이 문제에 대한 자세한 설명입니다 : https://social.msdn.microsoft.com/Forums/windowsserver/en-US/a3dade87-1df7-46ec-8876-437194d7553e/how-to-reference-the-correct-workbook-from-a-control-in-a-ribbon-callback?forum=exceldev

. 요약하면 비활성화 된 리본의 상태를 제대로 제어 할 수는 없지만 활성 리본에만 신경을 쓰면 무효화가 제대로 작동하지만 활성화시에만 콜백을 기대하십시오.

+0

감사합니다 Govert. 실제로 비활성화 된 리본의 상태를 제어하는 ​​데 문제가있는 것으로 보입니다. 그래서 우리는 그것으로 살아야 할 것입니다. –