Mise à jour des personnalisations de ruban dans les projets Office qui font l'objet d'une migration vers .NET Framework 4
Si votre projet contient une personnalisation de Ruban créée à l'aide de l'élément de projet Ruban (Concepteur visuel), vous devez apporter les modifications suivantes au code de votre projet si la version cible du .NET Framework est modifiée en .NET Framework 4 :
Modifiez le code généré du ruban.
Modifiez tout code qui instancie des contrôles du ruban pendant l'exécution, gère des événements du ruban ou définit par programmation la position d'un composant de ruban.
Mise à jour du code généré du ruban
Si la version cible du .NET Framework de votre projet est modifiée en .NET Framework 4, vous devez modifier le code généré pour l'élément Ruban en procédant aux étapes suivantes. Les fichiers de code que vous devez mettre à jour dépendent du langage de programmation et de la manière dont vous avez créé le projet :
Dans les projets Visual Basic ou dans les projets Visual C# que vous avez créés dans Visual Studio 2010, procédez à toutes les étapes du fichier code-behind du ruban (VotreElémentRuban.Designer.cs ou VotreElémentRuban.Designer.vb). Pour afficher le fichier code-behind dans les projets Visual Basic, vous devez cliquer sur le bouton Afficher tous les fichiers de l'Explorateur de solutions.
Dans les projets Visual C# que vous avez créés dans Visual Studio 2008 puis avez mis à niveau vers Visual Studio 2010, procédez aux deux premières étapes dans le fichier code du ruban puis procédez aux étapes restantes (VotreElémentRuban.cs ou VotreElémentRuban.vb) dans le fichier code-behind du ruban.
Pour modifier le code généré du ruban
Modifiez la déclaration de la classe du ruban afin qu'elle dérive de Microsoft.Office.Tools.Ribbon.RibbonBase au lieu de Microsoft.Office.Tools.Ribbon.OfficeRibbon.
Modifiez le constructeur de la classe du ruban comme indiqué ci-dessous. Si vous avez ajouté votre propre code au constructeur, ne modifiez pas votre code. Dans les projets Visual Basic, modifiez uniquement le constructeur sans paramètre. Ignorez l'autre constructeur.
L'exemple de code suivant affiche le constructeur par défaut d'une classe de ruban dans un projet qui cible le .NET Framework 3.5.
Public Sub New() MyBase.New() InitializeComponent() End Sub
public Ribbon1() { InitializeComponent(); }
L'exemple de code suivant affiche le constructeur par défaut d'une classe de ruban dans un projet qui cible le .NET Framework 4.
Public Sub New() MyBase.New(Globals.Factory.GetRibbonFactory()) InitializeComponent() End Sub
public Ribbon1() : base(Globals.Factory.GetRibbonFactory()) { InitializeComponent(); }
Dans la méthode InitializeComponent, modifiez tout code qui construit un contrôle de ruban afin que le code utilise à la place l'une des méthodes d'assistance de l'objet RibbonFactory.
Notes
Dans les projets Visual C#, vous devez développer la zone nommée Component Designer generated code pour consulter la méthode InitializeComponent.
Par exemple, supposez que votre fichier contiennent la ligne suivante de code qui instancie un RibbonButton nommé button1 dans un projet qui cible le .NET Framework 3.5.
Me.button1 = New Microsoft.Office.Tools.Ribbon.RibbonButton()
this.button1 = new Microsoft.Office.Tools.Ribbon.RibbonButton();
Dans un projet qui cible le .NET Framework 4, vous devez plutôt utiliser le code suivant.
Me.button1 = Me.Factory.CreateRibbonButton()
this.button1 = this.Factory.CreateRibbonButton();
Pour une liste complète des méthodes d'assistance pour les contrôles de ruban, consultez Instanciation des contrôles de ruban.
Dans les projets Visual C#, modifiez toute ligne de code de la méthode InitializeComponent qui utilise un délégué EventHandler<TEventArgs> et utilisez à la place un délégué de ruban spécifique.
Par exemple, supposez que votre fichier contienne la ligne suivante de code qui gère l'événement RibbonButton.Click dans un projet ciblant le .NET Framework 3.5.
this.button1.Click += new System.EventHandler<Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs>( this.button1_Click);
Dans un projet qui cible le .NET Framework 4, vous devez plutôt utiliser le code suivant.
this.button1.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler( this.button1_Click);
Pour une liste complète des délégués du ruban, consultez Gestion des événements de ruban.
Dans les projets Visual Basic, localisez la classe ThisRibbonCollection à la fin du fichier. Modifiez la déclaration de cette classe pour qu'elle n'hérite plus de Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection.
Instanciation des contrôles de ruban
Vous devez modifier tout code qui instancie dynamiquement des contrôles de ruban. Dans les projets qui ciblent le .NET Framework 3.5, les contrôles de ruban sont des classes que vous pouvez instancier directement dans certains scénarios. Dans les projets qui ciblent le .NET Framework 4, ces contrôles sont des interfaces que vous ne pouvez pas instancier directement. Vous devez créer des contrôles à l'aide des méthodes fournies par l'objet RibbonFactory.
Il existe deux méthodes pour accéder à l'objet RibbonFactory :
En utilisant la propriété Factory de la classe du ruban. Utilisez cette approche depuis le code dans votre classe de ruban.
En utilisant la méthode Globals.Factory.GetRibbonFactory. Utilisez cette approche depuis le code en dehors de votre classe de ruban. Pour plus d'informations sur la classe Globals, consultez Accès global aux objets dans les projets Office.
L'exemple de code suivant montre comment créer un RibbonButton dans une classe de ruban dans un projet ciblant le .NET Framework 4.
Dim button As Microsoft.Office.Tools.Ribbon.RibbonButton =
Me.Factory.CreateRibbonButton()
Microsoft.Office.Tools.Ribbon.RibbonButton button =
this.Factory.CreateRibbonButton();
Le tableau suivant répertorie les contrôles que vous pouvez créer par programmation et la méthode à utiliser pour créer les contrôles dans les projets ciblant le .NET Framework 4.
Contrôle |
Méthode RibbonFactory à utiliser dans les projets .NET Framework 4 |
---|---|
Gestion des événements de ruban
Vous devez modifier tout code qui gère des événements de contrôles de ruban. Dans les projets qui ciblent le .NET Framework 3.5, ces événements sont contrôlés par le délégué générique EventHandler<TEventArgs>. Dans les projets qui ciblent le .NET Framework 4, ces événements sont désormais contrôlés par d'autres délégués.
Le tableau suivant répertorie les événements de ruban et les délégués qui leur sont associés dans les projets qui ciblent le .NET Framework 4.
Événement |
Délégué à utiliser dans les projets .NET Framework 4 |
---|---|
Événement LoadImage dans une classe générée du ruban |
|
RibbonDropDown.SelectionChanged |
Définition par programmation de la position d'un composant de ruban
Vous devez modifier tout code qui définit la position des groupes, onglets ou contrôles de ruban. Dans les projets qui ciblent le .NET Framework 3.5, vous pouvez utiliser les méthodes AfterOfficeId et BeforeOfficeId de la classe statique Microsoft.Office.Tools.Ribbon.RibbonPosition pour assigner la propriété Position d'un groupe, onglet ou contrôle. Dans les projets qui ciblent le .NET Framework 4, vous devez accéder à ces méthodes à l'aide de la propriété RibbonPosition fournie par l'objet RibbonFactory.
Il existe deux méthodes pour accéder à l'objet RibbonFactory :
En utilisant la propriété Factory de la classe du ruban. Utilisez cette approche depuis le code dans votre classe de ruban.
En utilisant la méthode Globals.Factory.GetRibbonFactory. Utilisez cette approche depuis le code en dehors de votre classe de ruban. Pour plus d'informations sur la classe Globals, consultez Accès global aux objets dans les projets Office.
L'exemple de code suivant montre comment définir la propriété Position d'un onglet dans une classe de ruban dans un projet qui cible le .NET Framework 3.5.
Me.tab1.Position = RibbonPosition.AfterOfficeId("TabHome")
this.tab1.Position = RibbonPosition.AfterOfficeId("TabHome");
L'exemple de code suivant montre la même tâche dans un projet qui cible le .NET Framework 4.
Me.tab1.Position = Me.Factory.RibbonPosition.AfterOfficeId("TabHome")
this.tab1.Position = this.Factory.RibbonPosition.AfterOfficeId("TabHome");