다음을 통해 공유


.NET Framework 4.5로 마이그레이션된 리본 사용자 지정 업데이트

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

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

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

생성된 리본 코드 업데이트

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

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

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

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

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

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

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

    public Ribbon1()
    {
        InitializeComponent();
    }
    

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

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

    참고 항목

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

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

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

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

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

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

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

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

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

    <CodeContentPlaceHolder>9 리본 대리자의 전체 목록을 보려면 리본 이벤트 처리를 참조하세요.

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

리본 컨트롤 인스턴스화

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

RibbonFactory 개체에 액세스하는 방법에는 다음 두 가지가 있습니다.

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

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

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

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

제어 .NET Framework 4 이상 프로젝트에서 사용할 RibbonFactory 메서드
RibbonButton CreateRibbonButton
RibbonButtonGroup CreateRibbonButtonGroup
RibbonCheckBox CreateRibbonCheckBox
RibbonComboBox CreateRibbonComboBox
RibbonDialogLauncher CreateRibbonDialogLauncher
: CreateRibbonDropDown
RibbonDropDownItem CreateRibbonDropDownItem
RibbonEditBox CreateRibbonEditBox
RibbonGallery CreateRibbonGallery
RibbonGroup CreateRibbonGroup
RibbonLabel CreateRibbonLabel
RibbonManager CreateRibbonManager
RibbonMenu CreateRibbonMenu
RibbonSeparator CreateRibbonSeparator
RibbonSplitButton CreateRibbonSplitButton
RibbonTab CreateRibbonTab
RibbonToggleButton CreateRibbonToggleButton

리본 이벤트 처리

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

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

이벤트 .NET Framework 4 이상 프로젝트에서 사용할 대리자
생성된 Ribbon 클래스의 LoadImage 이벤트 RibbonLoadImageEventHandler
Load RibbonUIEventHandler
Click

Click

ItemsLoading

TextChanged

ButtonClick

ItemsLoading

SelectionChanged

TextChanged

ButtonClick

Click

ItemsLoading

DialogLauncherClick

ItemsLoading

Click

Click
RibbonControlEventHandler

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

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

RibbonFactory 개체에 액세스하는 방법에는 다음 두 가지가 있습니다.

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

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

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

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

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

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