연습: 책갈피에 대한 바로 가기 메뉴 만들기

이 연습에서는 Word용 문서 수준 사용자 지정에서 Bookmark 컨트롤에 대한 바로 가기 메뉴를 만드는 방법을 보여 줍니다.사용자가 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭하면 바로 가기 메뉴가 나타나고 텍스트 서식을 지정하기 위한 옵션이 제공됩니다.

적용 대상: 이 항목의 정보는 Word 2013 및 Word 2010의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

이 연습에서는 다음 작업을 수행합니다.

  • 프로젝트 만들기.

  • 문서에 텍스트 및 책갈피 추가.

  • 바로 가기 메뉴에 명령 추가.

  • 책갈피의 텍스트를 서식 지정하려면.

[!참고]

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

사전 요구 사항

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

-

Microsoft Office 개발자 도구를 포함하는 Visual Studio 2012 버전입니다. 자세한 내용은 [Office 솔루션을 개발할 수 있도록 컴퓨터 구성](bb398242\(v=vs.110\).md)을 참조하십시오.
  • Word 2013 또는 Word 2010

프로젝트 만들기

첫 번째 단계에서는 Visual Studio에서 Word 문서 프로젝트를 만듭니다.

새 프로젝트를 만들려면

  • 이름이 My Bookmark Shortcut Menu인 Word 문서 프로젝트를 만듭니다.마법사에서 새 문서 만들기를 선택합니다.자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기을 참조하십시오.

    Visual Studio의 디자이너에 새 Word 문서가 열리고 My Bookmark Shortcut Menu 프로젝트가 솔루션 탐색기에 추가됩니다.

문서에 텍스트 및 책갈피 추가

문서에 텍스트를 추가하고 두 개의 겹치는 책갈피를 추가합니다.

문서에 텍스트를 추가하려면

  • 프로젝트 디자이너에 표시 되는 문서에 다음 텍스트를 입력 합니다.

    이 예제에서는 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭할 때 나타나는 바로 가기 메뉴를 만듭니다.

문서에 Bookmark 컨트롤을 추가하려면

  1. 도구 상자에서 Word 컨트롤 탭, 드래그는 Bookmark 컨트롤을 문서에.

    Bookmark 컨트롤 추가 대화 상자가 나타납니다.

  2. "텍스트를 마우스 오른쪽 단추로 누르면 바로 가기 메뉴 만들기" 단어 선택, 다음을 클릭 하 고 확인.

    bookmark1이 문서에 추가됩니다.

  3. 다른 추가 Bookmark "는 책갈피의 텍스트를에서 마우스 오른쪽 단추로 클릭" 단어를 제어 합니다.

    bookmark2가 문서에 추가됩니다.

    [!참고]

    단어 "텍스트를 마우스 오른쪽"는 모두 bookmark1 및 bookmark2.

디자인 타임에 문서에 책갈피를 추가하면 Bookmark 컨트롤이 만들어집니다.책갈피의 여러 이벤트에 대해 프로그래밍 작업을 할 수 있습니다.사용자가 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭하면 바로 가기 메뉴가 나타나도록 책갈피의 BeforeRightClick 이벤트에 코드를 작성할 수 있습니다.

바로 가기 메뉴에 명령 추가

문서를 마우스 오른쪽 단추로 클릭 하면 나타나는 바로 가기 메뉴에 단추를 추가 합니다.

바로 가기 메뉴에 명령을 추가 하려면

  1. 추가 된 리본 XML 프로젝트 항목입니다.자세한 내용은 방법: 리본 메뉴 사용자 지정 시작을 참조하십시오.

  2. 솔루션 탐색기, ThisDocument.cs 또는 ThisDocument.vb.

  3. 메뉴 표시줄에서 선택 보기, 코드.

    ThisDocument 클래스 파일을 코드 편집기에서 엽니다.

  4. 다음 코드를 추가 된 ThisDocument 클래스입니다.이 코드는 CreateRibbonExtensibilityObject 메서드를 재정의하고 Office 응용 프로그램에 리본 XML 클래스를 반환합니다.

    Protected Overrides Function CreateRibbonExtensibilityObject() As Microsoft.Office.Core.IRibbonExtensibility
        Return New Ribbon1()
    End Function
    
    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        return new Ribbon1();
    }
    
  5. 솔루션 탐색기, 리본 XML 파일을 선택 합니다.기본적으로 리본 XML 파일 Ribbon1.xml 명명 됩니다.

  6. 메뉴 표시줄에서 선택 보기, 코드.

    리본 xml 파일을 코드 편집기에서 열립니다.

  7. 코드 편집기에서 리본 XML 파일의 내용을 다음 코드로 대체 합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
      <contextMenus>
        <contextMenu idMso="ContextMenuText">
          <button id="BoldButton" label="Bold" onAction="ButtonClick"        
               getVisible="GetVisible" />
          <button id="ItalicButton" label="Italic" onAction="ButtonClick" 
              getVisible="GetVisible"/>
        </contextMenu>
      </contextMenus>
    </customUI>
    

    이 코드 문서를 마우스 오른쪽 단추로 클릭 하면 나타나는 바로 가기 메뉴에 두 개의 단추를 추가 합니다.

  8. 솔루션 탐색기에서 ThisDocument를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.

  9. 다음 변수 및 클래스 수준에서 책갈피 변수를 선언 합니다.

    Public selectedBookmark As Microsoft.Office.Tools.Word.Bookmark
    Public ShowBoldButton As String = False
    Public ShowItalicButton As String = False
    Public WordTrue As Integer = -1
    Public WordFalse As Integer = 0
    
            public Microsoft.Office.Tools.Word.Bookmark selectedBookmark;
            public bool showBoldButton = false;
            public bool showItalicButton = false;
            public int WordTrue = -1;
            public int WordFalse = 0;
    
    
  10. 솔루션 탐색기에서 리본 코드 파일을 선택 합니다.리본 코드 파일을 기본적으로 라는 Ribbon1.cs 또는 Ribbon1.vb.

  11. 메뉴 표시줄에서 선택 보기, 코드.

    코드 편집기에서 리본 코드 파일이 열립니다.

  12. 리본 코드 파일에 다음 메서드를 추가 합니다.이 문서의 바로 가기 메뉴에 추가 된 두 개의 단추에 대 한 콜백 메서드입니다.이 메서드가 이러한 단추의 바로 가기 메뉴에 표시 되는지 여부를 결정 합니다.굵게 및 기울임꼴 단추 에서만 책갈피 내의 텍스트를 마우스 오른쪽 단추로 누르면 표시 됩니다.

    Public Function GetVisible(ByVal control As Office.IRibbonControl) As Boolean
        If control.Id = "BoldButton" Then
            If Globals.ThisDocument.ShowBoldButton = True Then
                Globals.ThisDocument.ShowBoldButton = False
                Return True
            Else
                Return False
            End If
        ElseIf control.Id = "ItalicButton" Then
            If Globals.ThisDocument.ShowItalicButton = True Then
                Globals.ThisDocument.ShowItalicButton = False
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If
    End Function
    
           public bool GetVisible(Office.IRibbonControl control)
           {
               if (control.Id == "BoldButton")
               {
                   if (Globals.ThisDocument.showBoldButton == true)
                   {
                       Globals.ThisDocument.showBoldButton = false;
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }
               else if (control.Id == "ItalicButton")
               {
                   if (Globals.ThisDocument.showItalicButton == true)
                   {
                       Globals.ThisDocument.showItalicButton = false;
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }
               else
               {
                   return false;
               }
    
           }
    
    

책갈피의 텍스트를 서식 지정하려면

  1. 리본 코드 파일에 추가 된 ButtonClick 책갈피에 서식을 적용 하는 이벤트 처리기입니다.

    Public Sub ButtonClick(ByVal control As Office.IRibbonControl)
        If control.Id = "BoldButton" Then
            If Globals.ThisDocument.selectedBookmark.Bold = _
                Globals.ThisDocument.WordTrue Then
                Globals.ThisDocument.selectedBookmark.Bold = _
                    Globals.ThisDocument.WordFalse
            Else
                Globals.ThisDocument.selectedBookmark.Bold = _
                    Globals.ThisDocument.WordTrue
            End If
        ElseIf control.Id = "ItalicButton" Then
            If Globals.ThisDocument.selectedBookmark.Italic = _
                Globals.ThisDocument.WordTrue Then
                Globals.ThisDocument.selectedBookmark.Italic = _
                    Globals.ThisDocument.WordFalse
            Else
                Globals.ThisDocument.selectedBookmark.Italic = _
                    Globals.ThisDocument.WordTrue
            End If
        End If
    End Sub
    
    public void ButtonClick(Office.IRibbonControl control)
    {
        if (control.Id == "BoldButton")
        {
            if (Globals.ThisDocument.selectedBookmark.Bold == 
                Globals.ThisDocument.WordTrue)
            {
                Globals.ThisDocument.selectedBookmark.Bold = 
                    Globals.ThisDocument.WordFalse;
            }
            else
            {
                Globals.ThisDocument.selectedBookmark.Bold = 
                    Globals.ThisDocument.WordTrue;
            }
        }
        else if (control.Id == "ItalicButton")
        {
            if (Globals.ThisDocument.selectedBookmark.Italic == 
                Globals.ThisDocument.WordTrue)
            {
                Globals.ThisDocument.selectedBookmark.Italic = 
                    Globals.ThisDocument.WordFalse;
            }
            else
            {
                Globals.ThisDocument.selectedBookmark.Italic = 
                    Globals.ThisDocument.WordTrue;
            }
        }
    
    }
    
  2. 솔루션 탐색기, ThisDocument.cs 또는 ThisDocument.vb.

  3. 메뉴 표시줄에서 선택 보기, 코드.

    ThisDocument 클래스 파일을 코드 편집기에서 엽니다.

  4. 다음 코드를 추가 된 ThisDocument 클래스입니다.

    
    Private Sub Bookmark_BeforeRightClick(ByVal sender As Object, ByVal e _
    As Microsoft.Office.Tools.Word.ClickEventArgs) _
    Handles Bookmark1.BeforeRightClick, Bookmark2.BeforeRightClick
        Dim startPosition As Integer = 0
        Dim i As Integer
    
        ' If bookmarks overlap, get bookmark closest to cursor.
        For i = 1 To e.Selection.Bookmarks.Count
            If e.Selection.Bookmarks(i).Start > startPosition Then
                startPosition = e.Selection.Bookmarks(i).Start
            End If
        Next
    
        ' If closest bookmark is the sender, show the shortcut menu options.
        If DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark).Start = _
            startPosition Then
            selectedBookmark = DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark)
    
            ShowBoldButton = True
            ShowItalicButton = True
    
        End If
    
    End Sub
    
    
            void bookmark_BeforeRightClick(object sender, ClickEventArgs e)
            {
                int startPosition = 0;
    
                // If bookmarks overlap, get bookmark closest to cursor.
                for (int i = 1; i <= e.Selection.Bookmarks.Count; i++)
                {
                    if (e.Selection.Bookmarks[i].Start > startPosition)
                    {
                        startPosition = e.Selection.Bookmarks[i].Start;
                    }
                }
    
                // If closest bookmark is the sender, show shortcut menu options.
                if (((Microsoft.Office.Tools.Word.Bookmark)sender).Start == startPosition)
                {
                    selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
    
                    showBoldButton = true;
                    showItalicButton = true;
    
                }
    
            }
    
    

    [!참고]

    책갈피가 겹치는 경우 이를 처리하기 위한 코드를 작성해야 합니다.그렇지 않으면 기본적으로 선택 영역의 모든 책갈피에 대한 코드가 호출됩니다.

  5. C#의 경우 Startup 이벤트에 Bookmark 컨트롤에 대한 이벤트 처리기를 추가해야 합니다.이벤트 처리기를 만드는 방법에 대한 자세한 내용은 방법: Office 프로젝트에서 이벤트 처리기 만들기를 참조하십시오.

    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
        this.bookmark1.BeforeRightClick += new ClickEventHandler(bookmark_BeforeRightClick);
        this.bookmark2.BeforeRightClick += new ClickEventHandler(bookmark_BeforeRightClick);
    }
    

응용 프로그램 테스트

책갈피의 텍스트를 마우스 오른쪽 단추로 클릭 하면 굵게 및 기울임꼴 메뉴 항목이 바로 가기 메뉴에 나타나는지 및 텍스트 서식이 지정 된 올바르게 확인 하기 위해 문서를 테스트 합니다.

문서를 테스트하려면

  1. F5 키를 눌러 프로젝트를 실행합니다.

  2. 첫 번째 책갈피를 마우스 오른쪽 단추로 클릭하고 굵게를 클릭합니다.

  3. bookmark1의 텍스트가 모두 굵게 서식 지정되는지 확인합니다.

  4. 책갈피가 겹치는 위치의 텍스트를 마우스 오른쪽 단추로 클릭하고 기울임꼴을 클릭합니다.

  5. bookmark2의 모든 텍스트가 기울임꼴이며 bookmark2와 겹치는 bookmark1의 텍스트 부분만 기울임꼴인지 확인합니다.

다음 단계

이후에 수행할 수 있는 작업은 다음과 같습니다.

참고 항목

개념

Word를 사용한 연습

확장된 개체를 사용하여 Word 자동화

책갈피 컨트롤

Office 솔루션의 선택적 매개 변수

기타 리소스

Office UI 사용자 지정