다음을 통해 공유


.NET Framework 4로 마이그레이션하는 Office 프로젝트에서 리본 메뉴 사용자 지정 업데이트

프로젝트에 리본(비주얼 디자이너) 프로젝트 항목을 사용하여 만든 리본 사용자 지정이 포함되어 있는 경우 대상 프레임워크를 .NET Framework 4로 변경하면 프로젝트 코드를 다음과 같이 변경해야 합니다.

  • 생성된 리본 코드를 수정합니다.

  • 런타임에 리본 컨트롤을 인스턴스화하거나 리본 이벤트를 처리하거나 리본 구성 요소의 위치를 프로그래밍 방식으로 설정하는 코드를 수정합니다.

생성된 리본 코드 업데이트

프로젝트의 대상 프레임워크를 .NET Framework 4로 변경하면 다음 단계를 수행하여 리본 항목의 생성된 코드를 변경해야 합니다. 업데이트해야 하는 코드 파일은 프로젝트를 만든 방법과 프로그래밍 언어에 따라 달라집니다.

  • Visual Studio 2010에서 만든 Visual Basic 프로젝트나 Visual C# 프로젝트에서는 리본 코드 숨김 파일(YourRibbonItem.Designer.cs 또는 YourRibbonItem.Designer.vb)의 모든 단계를 수행합니다. Visual Basic 프로젝트에서 코드 숨김 파일을 보려면 솔루션 탐색기에서 모든 파일 표시 단추를 클릭합니다.

  • Visual Studio 2008에서 만든 다음 Visual Studio 2010으로 업그레이드한 Visual C# 프로젝트에서는 리본 코드 파일(YourRibbonItem.cs 또는 YourRibbonItem.vb)의 처음 두 단계를 수행하고 리본 코드 숨김 파일의 나머지 단계를 수행합니다.

생성된 리본 코드를 변경하려면

  1. Microsoft.Office.Tools.Ribbon.OfficeRibbon 대신 Microsoft.Office.Tools.Ribbon.RibbonBase에서 파생되도록 리본 클래스의 선언을 수정합니다.

  2. 아래와 같이 리본 클래스의 생성자를 수정합니다. 생성자에 고유 코드를 추가한 경우에는 코드를 변경하지 마십시오. Visual Basic 프로젝트에서는 매개 변수가 없는 생성자만 수정하고 다른 생성자는 무시합니다.

    다음 코드 예제에서는 .NET Framework 3.5를 대상으로 하는 프로젝트에 있는 리본 클래스의 기본 생성자를 보여 줍니다.

    Public Sub New()
        MyBase.New()
        InitializeComponent()
    End Sub
    
    public Ribbon1()
    {
        InitializeComponent();
    }
    

    다음 코드 예제에서는 .NET Framework 4를 대상으로 하는 프로젝트에 있는 리본 클래스의 기본 생성자를 보여 줍니다.

    Public Sub New()
        MyBase.New(Globals.Factory.GetRibbonFactory())
        InitializeComponent()
    End Sub
    
    public Ribbon1()
        : base(Globals.Factory.GetRibbonFactory())
    {
        InitializeComponent();
    }
    
  3. InitializeComponent 메서드에서 리본 컨트롤을 생성하는 코드를 수정하여 코드가 RibbonFactory 개체의 도우미 메서드 중 하나를 대신 사용하도록 합니다.

    참고

    Visual C# 프로젝트에서 InitializeComponent 메서드를 보려면 Component Designer generated code라는 영역을 확장해야 합니다.

    예를 들어 .NET Framework 3.5를 대상으로 하는 프로젝트의 button1이라는 RibbonButton을 인스턴화하는 다음과 같은 코드 줄이 파일에 포함되어 있다고 가정합니다.

    Me.button1 = New Microsoft.Office.Tools.Ribbon.RibbonButton()
    
    this.button1 = new Microsoft.Office.Tools.Ribbon.RibbonButton();
    

    .NET Framework 4를 대상으로 하는 프로젝트에서는 다음 코드 줄을 대신 사용해야 합니다.

    Me.button1 = Me.Factory.CreateRibbonButton()
    
    this.button1 = this.Factory.CreateRibbonButton();
    

    리본 컨트롤에 대한 도우미 메서드의 전체 목록을 보려면 리본 컨트롤 인스턴스화를 참조하십시오.

  4. Visual C# 프로젝트에서 EventHandler<TEventArgs> 대리자를 사용하는 InitializeComponent 메서드의 코드 줄을 수정하여 특정 대리자를 대신 사용하도록 합니다.

    예를 들어 .NET Framework 3.5를 대상으로 하는 프로젝트의 RibbonButton.Click 이벤트를 처리하는 다음과 같은 코드 줄이 파일에 포함되어 있다고 가정합니다.

    this.button1.Click += new System.EventHandler<Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs>(
        this.button1_Click);
    

    .NET Framework 4를 대상으로 하는 프로젝트에서는 다음 코드 줄을 대신 사용해야 합니다.

    this.button1.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(
        this.button1_Click);
    

    리본 대리자의 전체 목록을 보려면 리본 이벤트 처리를 참조하십시오.

  5. Visual Basic 프로젝트에서 파일 끝의 ThisRibbonCollection 클래스를 찾습니다. 더 이상 Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection에서 상속하지 않도록 이 클래스의 선언을 수정합니다.

리본 컨트롤 인스턴스화

리본 컨트롤을 동적으로 인스턴스화하는 코드를 수정해야 합니다. .NET Framework 3.5를 대상으로 하는 프로젝트에서 리본 컨트롤은 특정 시나리오에서 직접 인스턴스화할 수 있는 클래스입니다. .NET Framework 4를 대상으로 하는 프로젝트에서 이러한 컨트롤은 직접 인스턴스화할 수 없는 인터페이스입니다. RibbonFactory 개체에서 제공하는 메서드를 사용하여 컨트롤을 만들어야 합니다.

다음과 같은 두 가지 방법으로 RibbonFactory 개체에 액세스할 수 있습니다.

  • 리본 클래스의 Factory 속성을 사용합니다. 리본 클래스 내부의 코드에서 이 방법을 사용합니다.

  • Globals.Factory.GetRibbonFactory 메서드를 사용합니다. 리본 클래스 외부의 코드에서 이 방법을 사용합니다. Globals 클래스에 대한 자세한 내용은 Office 프로젝트의 개체에 전역 액세스를 참조하십시오.

다음 코드 예제에서는 .NET Framework 4를 대상으로 하는 프로젝트의 리본 클래스에 RibbonButton을 만드는 방법을 보여 줍니다.

Dim button As Microsoft.Office.Tools.Ribbon.RibbonButton =
    Me.Factory.CreateRibbonButton()
Microsoft.Office.Tools.Ribbon.RibbonButton button =
    this.Factory.CreateRibbonButton();

다음 표에서는 프로그래밍 방식으로 만들 수 있는 컨트롤과 .NET Framework 4를 대상으로 하는 프로젝트에 컨트롤을 만드는 데 사용할 메서드를 보여 줍니다.

컨트롤

.NET Framework 4 프로젝트에서 사용할 RibbonFactory 메서드

RibbonButton

CreateRibbonButton

RibbonButtonGroup

CreateRibbonButtonGroup

RibbonCheckBox

CreateRibbonCheckBox

RibbonComboBox

CreateRibbonComboBox

RibbonDialogLauncher

CreateRibbonDialogLauncher

RibbonDropDown:

CreateRibbonDropDown

RibbonDropDownItem

CreateRibbonDropDownItem

RibbonEditBox

CreateRibbonEditBox

RibbonGallery

CreateRibbonGallery

RibbonGroup

CreateRibbonGroup

RibbonLabel

CreateRibbonLabel

RibbonManager

CreateRibbonManager

RibbonMenu

CreateRibbonMenu

RibbonSeparator

CreateRibbonSeparator

RibbonSplitButton

CreateRibbonSplitButton

RibbonTab

CreateRibbonTab

RibbonToggleButton

CreateRibbonToggleButton

리본 이벤트 처리

리본 컨트롤의 이벤트를 처리하는 코드를 수정해야 합니다. .NET Framework 3.5를 대상으로 하는 프로젝트에서는 이러한 이벤트가 제네릭 EventHandler<TEventArgs> 대리자에 의해 처리됩니다. .NET Framework 4를 대상으로 하는 프로젝트에서는 이러한 이벤트가 이제 다른 대리자에 의해 처리됩니다.

다음 표에서는 리본 이벤트 및 .NET Framework 4를 대상으로 하는 프로젝트에서 해당 이벤트와 연결된 대리자를 보여 줍니다.

Event

.NET Framework 4 프로젝트에서 사용할 대리자

생성된 리본 클래스의 LoadImage 이벤트

RibbonLoadImageEventHandler

Load

RibbonUIEventHandler

RibbonButton.Click

RibbonCheckBox.Click

RibbonComboBox.ItemsLoading

RibbonComboBox.TextChanged

RibbonDropDown.ButtonClick

RibbonDropDown.ItemsLoading

RibbonDropDown.SelectionChanged

RibbonEditBox.TextChanged

RibbonGallery.ButtonClick

RibbonGallery.Click

RibbonGallery.ItemsLoading

RibbonGroup.DialogLauncherClick

RibbonMenu.ItemsLoading

RibbonSplitButton.Click

RibbonToggleButton.Click

RibbonControlEventHandler

프로그래밍 방식으로 리본 구성 요소의 위치 설정

리본 그룹, 탭 또는 컨트롤의 위치를 설정하는 코드를 수정해야 합니다. .NET Framework 3.5를 대상으로 하는 프로젝트에서는 정적 Microsoft.Office.Tools.Ribbon.RibbonPosition 클래스의 AfterOfficeIdBeforeOfficeId 메서드를 사용하여 그룹, 탭 또는 컨트롤의 Position 속성을 할당할 수 있습니다. .NET Framework 4를 대상으로 하는 프로젝트에서는 RibbonFactory 개체에서 제공하는 RibbonPosition 속성을 사용하여 이러한 메서드에 액세스해야 합니다.

다음과 같은 두 가지 방법으로 RibbonFactory 개체에 액세스할 수 있습니다.

  • 리본 클래스의 Factory 속성을 사용합니다. 리본 클래스 내부의 코드에서 이 방법을 사용합니다.

  • Globals.Factory.GetRibbonFactory 메서드를 사용합니다. 리본 클래스 외부의 코드에서 이 방법을 사용합니다. Globals 클래스에 대한 자세한 내용은 Office 프로젝트의 개체에 전역 액세스를 참조하십시오.

다음 코드 예제에서는 .NET Framework 3.5를 대상으로 하는 프로젝트의 리본 클래스에 있는 탭의 Position 속성을 설정하는 방법을 보여 줍니다.

Me.tab1.Position = RibbonPosition.AfterOfficeId("TabHome")
this.tab1.Position = RibbonPosition.AfterOfficeId("TabHome");

다음 코드 예제에서는 .NET Framework 4를 대상으로 하는 프로젝트에서의 동일한 작업을 보여 줍니다.

Me.tab1.Position = Me.Factory.RibbonPosition.AfterOfficeId("TabHome")
this.tab1.Position = this.Factory.RibbonPosition.AfterOfficeId("TabHome");

참고 항목

개념

.NET Framework 4로 Office 솔루션 마이그레이션

리본 디자이너