次の方法で共有


.NET Framework 4.5 に移行されたリボンのカスタマイズを更新する

[リボン (ビジュアル デザイナー)] プロジェクト項目を使用して作成したリボンのカスタマイズを含むプロジェクトのターゲット フレームワークを .NET Framework 4 以降に変更する場合は、プロジェクト コードに対して次の変更を行う必要があります。

  • 生成されたリボン コードを変更する。

  • 実行時にリボン コントロールをインスタンス化するコード、リボン イベントを処理するコード、またはリボン コンポーネントの位置をプログラムによって設定するコードをすべて変更する。

生成されたリボン コードの更新

プロジェクトのターゲット フレームワークを .NET Framework 4 以降に変更する場合は、次の手順を実行して、リボン項目に対して生成されたコードを変更する必要があります。 更新する必要があるコード ファイルは、プログラミング言語の種類とプロジェクトの作成方法に応じて次のように異なります。

  • Visual Studio 2012 か Visual Studio 2010 のいずれかで作成した Visual Basic プロジェクトまたは Visual C# プロジェクトの場合は、リボンの分離コード ファイル (YourRibbonItem.Designer.cs か YourRibbonItem.Designer.vb) ですべての手順を実行します。 Visual Basic プロジェクトで分離コード ファイルを確認するには、ソリューション エクスプローラー[すべてのファイルの表示] をクリックします。

  • Visual Studio 2008 で作成してから Visual Studio 2013 にアップグレードした Visual C# プロジェクトの場合は、リボンのコード ファイル (YourRibbonItem.cs か YourRibbonItem.vb) で最初の 2 つの手順を実行し、リボンの分離コード ファイルで残りの手順を実行します。

生成されたリボン コードを変更するには

  1. RibbonBase の代わりに Microsoft.Office.Tools.Ribbon.OfficeRibbon から派生するように、リボン クラスの宣言を変更します。

  2. リボン クラスのコンストラクターを次のように変更します。 コンストラクターに独自のコードを追加している場合は、コードを変更しないでください。 Visual Basic プロジェクトでは、パラメーターなしのコンストラクターのみを変更します。 その他のコンストラクターは無視します。

    .NET Framework 3.5 を対象とするプロジェクトのリボン クラスの既定のコンストラクターを次のコード例に示します。

    public Ribbon1()
    {
        InitializeComponent();
    }
    

    .NET Framework 4 以降を対象とするプロジェクトのリボン クラスの既定のコンストラクターを次のコード例に示します。

    public Ribbon1()
        : base(Globals.Factory.GetRibbonFactory())
    {
        InitializeComponent();
    }
    
  3. InitializeComponent メソッドでは、代わりに RibbonFactory オブジェクトのいずれかのヘルパー メソッドが使用されるように、リボン コントロールを構築するすべてのコードを変更します。

    Note

    Visual C# プロジェクトでは、Component Designer generated code メソッドを表示するために InitializeComponent という名前の領域を展開する必要があります。

    たとえば、.NET Framework 3.5 を対象とするプロジェクトで、RibbonButton という名前の button1 をインスタンス化する次のコード行がファイルに含まれていると仮定します。

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

    .NET Framework 4 以降を対象とするプロジェクトでは、代わりに次のコードを使う必要があります。

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

    リボン コントロールのすべてのヘルパー メソッドの一覧については、「リボン コントロールのインスタンス化」を参照してください。

  4. Visual C# プロジェクトでは、代わりに特定のリボン デリゲートが使用されるように、InitializeComponent デリゲートを使用する EventHandler<TEventArgs> メソッドのコード行を変更します。

    たとえば、.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 オブジェクトにアクセスするには、次の 2 つの方法があります。

  • リボン クラスの Factory プロパティの使用。 この方法は、リボン クラス内のコードから使用します。

  • Globals.Factory.GetRibbonFactory メソッドの使用。 この方法は、リボン クラス外のコードから使用します。 Globals クラスの詳細については、「Office プロジェクト内のオブジェクトへのグローバル アクセス」を参照してください。

    次のコード例は、.NET Framework 4 以降を対象とするプロジェクトのリボン クラスで RibbonButton を作成する方法を示しています。

<CodeContentPlaceHolder>10<CodeContentPlaceHolder>11 次の表は、プログラムによって作成できるコントロールと、.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
Click

Click

ItemsLoading

TextChanged

ButtonClick

ItemsLoading

SelectionChanged

TextChanged

ButtonClick

Click

ItemsLoading

DialogLauncherClick

ItemsLoading

Click

Click
RibbonControlEventHandler

リボン コンポーネントの位置をプログラムによって設定する

リボンのグループ、タブ、またはコントロールの位置を設定するすべてのコードを変更する必要があります。 .NET Framework 3.5 を対象とするプロジェクトでは、静的な AfterOfficeId クラスの BeforeOfficeId メソッドと Microsoft.Office.Tools.Ribbon.RibbonPosition メソッドを使用して、グループ、タブ、またはコントロールの Position プロパティを割り当てることができます。 .NET Framework 4 以降を対象とするプロジェクトでは、RibbonFactory オブジェクトが提供する RibbonPosition プロパティを使って、これらのメソッドにアクセスする必要があります。

RibbonFactory オブジェクトにアクセスするには、次の 2 つの方法があります。

  • リボン クラスの Factory プロパティの使用。 この方法は、リボン クラス内のコードから使用します。

  • Globals.Factory.GetRibbonFactory メソッドの使用。 この方法は、リボン クラス外のコードから使用します。 Globals クラスの詳細については、「Office プロジェクト内のオブジェクトへのグローバル アクセス」を参照してください。

    次のコード例は、.NET Framework 3.5 を対象とするプロジェクトでリボン クラスのタブの Position プロパティを設定する方法を示しています。

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

次のコード例は、同じタスクを .NET Framework 4 を対象とするプロジェクトで行う方法を示しています。

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