IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB Net] Accéder à une variable du programme principal depuis une interface


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [VB Net] Accéder à une variable du programme principal depuis une interface
    Bonjour,

    Je cherche à accéder à une variable (une SqlConnection) depuis une interface.

    Je développe une appli à l'aide de plugin (j'ai suivi ce tuto http://drq.developpez.com/dotnet/articles/plugin/vbnet/). Passer des infos à mon interface, pas de problème, mais faire accéder mon interface à mon programme principal : j'y arrive pas...

    Voici les parties de code que j'ai écrites jusqu'à présent :

    Mon interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Interface IPlugin
     
        Function NomPlugin() As String
        Function Menu() As System.Windows.Forms.UserControl
        Sub ConnexionBaseDonnees(ByVal Connexion As System.Data.SqlClient.SqlConnection)
     
    End Interface
    Mon programme principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Imports System.IO
     
    Public Class frmPrincipale
     
        Private Sub frmPrincipale_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.Refresh()
            Connexion()
     
            Dim RepertoirePlugin As New DirectoryInfo(Directory.GetCurrentDirectory + "\Plugin")
     
            If RepertoirePlugin.Exists Then
     
                Dim message As String = String.Empty
                Dim frmSplash As New frmSplashRecherche
     
                frmSplash.lblMessage.Text = "Chargement des modules..."
                frmSplash.Show()
                frmSplash.Refresh()
     
                Try
                    For Each Fichier In Directory.GetFiles(RepertoirePlugin.FullName, "Plugin*.dll")
                        Dim obj As Object
                        obj = AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap(Fichier, "PluginApp.PluginClass")
     
                        frmSplash.lblMessage.Text = "Chargement du module " + CType(obj, IPlugin.IPlugin).NomPlugin() + "..."
                        frmSplash.Refresh()
     
                        Dim ControlePlugin As UserControl = CType(obj, IPlugin.IPlugin).Menu
                        Dim BarreMenuPlugin As MenuStrip = CType(ControlePlugin.Controls.Item(0), MenuStrip)
     
                        BarreMenu.Items.AddRange(BarreMenuPlugin.Items)
     
                        CType(obj, IPlugin.IPlugin).ConnexionBaseDonnees(Fonctions.maConnexion)
                    Next
                Catch ex As Exception
                    message = ex.Message
                Finally
                    frmSplash.Close()
                    frmSplash.Dispose()
     
                    If message.Length > 0 Then
                        MsgBox("Le chargement d'un ou plusieurs module(s) a échoué." + vbCrLf + vbCrLf + "Message retourné : " + vbCrLf + vbCrLf + message, MsgBoxStyle.Critical, "Erreur lors du chargement des modules")
                    End If
                End Try
            End If
        End Sub
    End Class
    Mon plugin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Class PluginClass
        Implements IPlugin.IPlugin
     
        Private maConnexion As SqlClient.SqlConnection
     
        Private Sub AjouterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AjouterToolStripMenuItem.Click
            Try
                MsgBox(maConnexion.State)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub
     
        Public Function NomPlugin() As String Implements IPlugin.IPlugin.NomPlugin
            Return "Gestion des étiquettes"
        End Function
     
        Public Function Menu() As System.Windows.Forms.UserControl Implements IPlugin.IPlugin.Menu
            Return Me
        End Function
     
        Public Sub ConnexionBaseDonnees(ByVal Connexion As SqlClient.SqlConnection) Implements IPlugin.IPlugin.ConnexionBaseDonnees
            maConnexion = Connexion
            MsgBox(maConnexion.State)
        End Sub
    End Class
    J'ai essayé de suivre la piste de la Réflexion mais sans succès (j'avoue que c'est un peux obscur pour moi aussi).

    Si quelqu'un a un tuyau, un tuto ou autre, MERCI !!!

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Surcharge du constructeur "PluginClass"?
    http://msdn.microsoft.com/fr-fr/libr...9e(VS.90).aspx
    assesseur sur ta variable privé "maConnexion " ?
    http://msdn.microsoft.com/fr-fr/libr...00(VS.80).aspx

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse rapide !

    En fait, je m'apperçois que je n'ai pas mis assez d'extraits de code et du coup, le problème a sans doute été compris à l'envers... Désolé.

    En fait, la variable Private maConnexion de l'extrait de code de mon 1er post fait partie de mon plugin. Elle sera utilisée pour récupérer la connexion SQL ouverte par le programme principal qui est stockée dans la variable Fonctions.maConnexion.

    La gestion de la connexion SQL (connexion, déconnexion, paramétrage) étant réalisée au niveau du programme principal, je pensais, à chaque clic de l'utilisateur sur un menu du plugin, récupérer la connexion SQL du programme principal, tester si la connexion est ouverte ou pas avant de passer aux actions à réaliser par le plugin.

    J'espère avoir été suffisamment clair sur ce que je souhaite faire. En même temps, ce n'est peut être pas la meilleure manière... Petit Padawan espère devenir grand Jedi LOL

  4. #4
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Effectivement, j'ai lu un peu vite...

    Je ne connais pas le développement par plugins.

    L'idée qui me vient à l'esprit serait de construire une couche d’accès aux données (DAL) indépendante sur laquelle l'appli et les plugins pourraient s'appuyer.

    |------------DAL---------------|
    |Appli||plugin1|....|plugin n|

    C'est juste une idée, je ne sais pas si c'est viable.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon, finalement, j'ai fait autrement.

    Plutôt que ce soit le plugin qui demande la connexion SQL, j'ai fait une collection de plugin au niveau du programme principal. Lorsque la connexion SQL change, c'est le programme principal qui avertit tous les plugins enregistrés dans la collection en leur passant la nouvelle reférence de la connexion SQL.

    Je suis tombé également sur le problème d'affichage des form des plugins.

    Ma form principale acceptant des fenêtres MDI, il a fallu que je passe un pointeur à mes plugins sur ma form principale pour que les plugins puissent enregistrer leurs forms en tant qu'enfants de cette form principale.

    Au final, pour la communication programme principal/plugins, on va toujours dans le même sens : prog principal -> plugin...

    Je n'ai pas réussi à faire l'inverse.

    Merci quand même pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération de la valeur d une variable elle même contenue dans une variable
    Par guiplongeur dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 16/03/2015, 16h23
  2. Mettre une variable dans l'appel d'une variable de session
    Par PrinceMaster77 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2011, 10h12
  3. Réponses: 9
    Dernier message: 05/11/2008, 09h37
  4. Réponses: 1
    Dernier message: 17/01/2007, 21h52
  5. Réponses: 7
    Dernier message: 13/03/2006, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo