3 votes

Appeler une procédure dans une autre classe

J'ai créé un complément pour Outlook 2010. J'ai un ruban avec un bouton dessus. Lorsque vous cliquez sur ce bouton, je veux qu'il appelle une procédure dans le fichier ThisAddIn.vb.

Il y a deux fichiers : ThisAddin.vb et Ribbon.vb.

J'ai essayé plusieurs choses en vain. J'ai également défini toutes les procédures comme publiques.

Appeler Testing123()

Appeler ThisAddIn.Testing123()

Etc.

Comment puis-je appeler correctement cette procédure ?

****Ribbon1.vb****
Imports Microsoft.Office.Tools.Ribbon

Public Class MyOutlookTab

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles Button1.Click

        Call Testing123()

    End Sub

End Class

***ThisAddIn.vb***
Public Class ThisAddIn

    Public Sub Testing123()
        System.Windows.Forms.MessageBox.Show("Cela fonctionne !")
    End Sub

End Class

4voto

competent_tech Points 29781

Le problème est que vous essayez de référencer des méthodes de classe sans créer de classe.

Vous avez trois options pour que cela fonctionne :

1) Convertissez ThisAddIn en un Module. Alors, il n'y aura pas de problème d'accès à la méthode Testing123 comme vous l'avez actuellement.

2) Convertissez ThisAddin.Testing123 en une méthode Shared, c'est-à-dire :

Public Shared Sub Testing123()

Ensuite, vous y accéderiez comme suit :

Call ThisAddin.Testing123()

3) Créez une instance de la classe ThisAddIn avant d'utiliser ses méthodes :

Dim oAddIn As New ThisAddIn
Call oAddIn.Testing123()

Mise à jour

Il semble que les modules complémentaires sont traités différemment des classes standards.

Cet article MSDN contient des conseils d'implémentation spécifiques pour accéder à la fonctionnalité des modules complémentaires à partir d'autres types de solutions.

Sur la base de cet article, vous devez prendre quelques mesures supplémentaires :

1) Créez une interface pour exposer la fonctionnalité de votre module complémentaire :

 _
Public Interface IAddInUtilities
    Sub Testing123()
End Interface

2) Ajoutez une classe d'utilitaires à votre projet de module complémentaire :

 _
 _
Public Class AddInUtilities
    Implements IAddInUtilities

    Public Sub Testing123() Implements IAddInUtilities.Testing123
        System.Windows.Forms.MessageBox.Show("Ça marche !")
    End Sub

3) Ajoutez ce qui suit à ThisAddIn pour exposer les utilitaires aux appelants externes :

Private utilities As AddInUtilities

Protected Overrides Function RequestComAddInAutomationService() As Object
    If utilities Is Nothing Then
        utilities = New AddInUtilities()
    End If
    Return utilities
End Function

4) Je ne suis pas très clair sur la syntaxe exacte nécessaire pour la dernière étape car je n'ai pas l'automatisation installée dans Office, mais vous devrez faire quelque chose dans ce sens :

' OutlookTest devrait être changé par le nom du projet auquel ThisAddIn appartient
Dim addIn As Office.COMAddIn = Globals.ThisAddIn.Application.COMAddIns.Item("OutlookTest")
Dim utilities As OutlookTest.IAddInUtilities = TryCast( _
    addIn.Object, OutlookTest.IAddInUtilities)
utilities.Testing123()

2voto

malt_man Points 47

Merci pour les commentaires de tout le monde mais j'ai trouvé la solution dans un exemple ici : http://msdn.microsoft.com/en-us/library/ee620548.aspx où ils parlent d'ajouter un ruban à la demande de réunion (2/3 du chemin vers le bas).

C'est en fait assez simple. Vous appelez la procédure en utilisant le "Global"

Globals.ThisAddIn.Testing123()

Rien d'autre n'est nécessaire.

1voto

Standage Points 1512

Vous devez créer une nouvelle instance de la classe avant de pouvoir l'appeler en vb.net !

Donc quelque chose comme devrait vous permettre de l'appeler..

Public Class MyOutlookTab

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles Button1.Click
        Dim testing As New ThisAddIn()
        Call testing.Testing123()

    End Sub

End Class

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X