MS 추가기능 및 앱 개발

PowerPoint VSTO 사용자정의 작업창과 리본메뉴 연동

루아흐뉴마 2018. 9. 1. 11:05
반응형
  • 이전 포스팅(링크-새창)에서 사용자정의 작업창을 통해 달력 추가기능을 개발한 예제에 이어서
  • 사용자정의 작업창을 리본메뉴와 연동하고, 리본메뉴를 통해 작업창을 켜고 끌 수 있도록 하는 예제이다.
  • 이전 포스팅과 마찬가지로 MS Office의 Synchronizing a Custom Task Pane with a Ribbon Button 예제를 번역한 내용을 바탕으로 재구성하였다.
  • (원문링크-새창)


리본메뉴 버튼과 사용자정의 작업창 연동


이 예제는 리본메뉴의 토글버튼을 통해 사용자정의 작업창을 켜고 끄도록 하는 예제이다.
사용자정의 작업창을 개발할 때는 반드시 On/Off 인터페이스를 디자인해주어야 한다.
MS Office 앱에서 기본적으로 유저가 사용자정의 작업창을 On/Off 하는 인터페이스를 제공하지 않기 때문이다.

역자 주 개발자 스스로 만들어주어야 한다는 의미이다.
이렇게 하지 않을 경우, 추가기능을 최초 실행 단계에서 자동으로 실행하는 때 이에외는
추가기능을 다시 실행할 방법이 없다. 앱을 종료했다가 다시 실행해야 한다.

리본메뉴에 토글버튼 추가하기


a) 프로젝트 메뉴를 클릭하고, 사용자정의 컨트롤 추가를 누른다.
b) 새 항목 추가 대화창에서 리본(비주얼 디자이너)을 클릭한다.
c) 리본의 이름을 ManageTaskPaneRibbon으로 지정하고 추가를 누른다.
d) 그러면 ManageTaskPaneRibbon.vb 파일이 생성되고, [디자인] 창에는 기본적인 그룹, 탭 구성 항목이 나타난다.
e) 리본 디자이너에서 그룹1(Group 1)을 클릭한다.
    (속성창이 기본적으로 활성화되어 있는 경우에는 클릭만으로 되지만,
     속성창이 활성화되지 않은 경우 오른쪽 클릭을 해서 속성창을 임의로 실행해줘야 한다.)

f) 속성창에서 Label 속성을 Task Pane Manager로 변경한다. (이렇게 하면 리본메뉴의 Group 1으로 표시되던 항목이 Task Pane Manager로 변경된다.) g) 도구상자의 리본 컨트롤 탭에서, 토글 버튼을 Task Pane Manager 그룹으로 끌어다 놓는다. (도구상자; Control Box가 보이지 않는 경우, 보기(v) - 도구상자(X)) h) ToggleButton1을 클릭(Gourp1의 Label을 변경할 때와 마찬가지로, 우클릭을 해서 속성창을 실행해준다.) I) Togglebutton1의 Label을 Show Task Pane으로 변경한다. 여기까지 끝냈다면 디자인적인 부분은 완료되었다. 실제 사용자정의 작업창과 연동하기 위해 코드를 작성해야 한다.


사용자정의 작업창 제작하기


  • 여기서부터는 본격적인 코딩이다.
  • 앞선 프로젝트에서 만들어 둔 달력 컨트롤 예제 코드를 활용할 것이다.
  • 따라서 MSDN 예제상의 코드와 일부 상이한 부분이 있을 수 있다.


사용자정의 작업창 만들기
a) 솔루션 탐색기에서 PowerPoint 확장(왼쪽 모서리 작은 화살표)
b) ThisAddIn.vb를 마우스 오른쪽 클릭. 코드 보기(View Code)
c) 다음 코드를 ThisAddIn.vb 클래스에 삽입.

Private myUserControl1 as myUserControl 'myUserControl 변수 선언
Private WithEvents myCustomTaskPane As Microsoft.Office.Tools.CustomTaskPane '이벤트와 연동되는(WithEvents) CustomTaskPane 변수 선언


d) ThisAddIn_Startup 이벤트 처리기의 코드를 다음의 코드로 변경
    이 코드는 myUserControl1 개체를 사용자정의 작업창 필드에 추가하는 코드이다.

Private Sub ThisAddIn-Startup(Byval sender As Object, Byval e As System.EventArgs) Handles Me.Startup
    myUserControl1 = New MyUserControl()
    myCustomTaskPnae = Me.CustomTaskPanes.Add(myUserControl1, "Calendar")
    myCustomTaskPane.Visible = True

e) 다음 코드를 ThisAddIn 클래스에 추가한다.
    이 메서드는 VisibleChanged 이벤트를 처리한다.
    사용자가 사용자정의 작업창을 닫았을 때,
    즉 사용자정의 작업창의 닫기(x) 단추를 눌렀을 때 리본메뉴의 토글버튼 상태를 업데이트하는 역할을 한다.

Private Sub myCustomTaskPane_VisibleChanged(Byval sender As Object, Byval e As System.EventArgs) Handles myCustomTaskPane.VisibleChanged
Globals.Ribbons.ManageTaskPaneRibbon.ToggleButton1.Checked = myCustomTaskPane.Visible


f) 다음 코드를 ThisAddIn 클래스에 추가한다.
   이 (TaskPane) 속성은 Private 상태인 myCustomTaskPane 개체를 다른 클래스에 노출시킨다.
   다음 단계에서 리본메뉴의 코드를 작성하면서 이 TaskPane 속성을 사용할 것이다.

Public ReadOnly Property TaskPane() As Microsoft.Office.Tools.CustomTaskPane
    Get
        Return myCustomTaskPane
    End Get
End Property


토글버튼으로 사용자정의 작업창 On/Off


a) 리본 디자이너에서 ShowTaskPane 버튼 더블클릭
   Visual Studio는 자동적으로 toggleButton1_Click 이벤트 처리기를 생성한다.
   동시에 ManageTaskPaneRibbon.vb 파일을 연다.
b) toggleButton1_Click 이벤트 처리기 코드를 다음의 코드로 바꾼다.
   이 코드는 사용자가 토글버튼을 클릭했을 때
   토글버튼의 상태와 상관없이 사용자정의 작업창을 켜고 끄는 역할을 한다.

Private Sub ToggleButton1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles ToggleButton1.Click
     Globals.ThisAddIn.TaskPane.Visible = TryCast(sender, Microsoft.Office.Tools.Ribbon.RibbonToggleButton).Checked
 End Sub


실행 동영상



 Copyright (2018) Ruahneuma. All Rights Reserved.


반응형