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][WindowsForm] Plugin visuel à intégrer dans une application Main


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 43
    Points
    43
    Par défaut [VB.NET][WindowsForm] Plugin visuel à intégrer dans une application Main
    Voila j'ai bien lu les tuto concernant la realisation de plugins mais je ne trouve aucun moyen d'ajouter des composants visuel dans mon application Main.

    Si quelqu' un avait une source (Main, interface et plugin) ca me depannerait enormément.

    Par avance merci

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    J'ai peur de comprendre.
    Peut-tu donner une exemple d'application qui fait ce que tu dis ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 43
    Points
    43
    Par défaut
    Voila j ai un programme qui contient un form nommé form1

    et j aimerai que mon plugin creer un bouton (par exemple) dans ce form.

    J arrive a creer des plugin de fonction mais pasde component visuel.

    J ai beau chercher de l aide et des exemple je n' en trouve aucun si ce n est le tutorial sur les plugin qui malheuresement et trop sommaire

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 43
    Points
    43
    Par défaut
    personne ne saurait m aider ?

  5. #5
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Tu as des notions de programmation ?
    Qu'arrives tu à créer exactement ?
    De quel tutoriel t'es tu servis pour en arriver là ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 43
    Points
    43
    Par défaut
    oui j ai des notions et je me suis servi de ces tuto la :

    http://www.developerfusion.co.uk/show/4371/2/
    http://tech.pederborgpoulsen.dk/2006...r-using-vbnet/

    et le tuto sur les plugin dispo sur developpez.com

    Pour résumer ce que je souhaite faire:
    J ai un form et je veux creer un plugin qui creer un bouton sur ce form lorsque je le charge.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 140
    Points
    140
    Par défaut
    Je pense que ton problème est que tu formalise mal ton besoin.

    Un plugin ne pourra jamais créer un bouton sur ton form car c'est un assembly independant.

    Neanmoins tu peux créer un plugin qui contiens un bouton qui fait certaines choses de facon independante et ensuite charger ce plugin et ajouter le visualcomponant du plugin à ton form (en general dans un objet panel est plus pratique) là ou cela te sied grace à quelque chose du genre NomDeLobjetContenantSurTonForm.components.add(VisualcomponentDuPlugin)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 43
    Points
    43
    Par défaut
    Oui c est tout a fait ca que je cherche a faire toutefois je cherche un exemple simple de code car je ne suis arrivé à mettre au point se système :/

    Citation Envoyé par Tnopy
    Je pense que ton problème est que tu formalise mal ton besoin.

    Un plugin ne pourra jamais créer un bouton sur ton form car c'est un assembly independant.

    Neanmoins tu peux créer un plugin qui contiens un bouton qui fait certaines choses de facon independante et ensuite charger ce plugin et ajouter le visualcomponant du plugin à ton form (en general dans un objet panel est plus pratique) là ou cela te sied grace à quelque chose du genre NomDeLobjetContenantSurTonForm.components.add(VisualcomponentDuPlugin)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 140
    Points
    140
    Par défaut
    Etant donné que j'ai bien travaillé le sujet pour un de mes projets, j'ai fait une application rapide avec un plugin en VB.NET

    La première chose dont tu as besoin si tu veux faire des plugins c'est de faire une interface qui spécifie ce dont ont besoin tous tes plugins afin d'avoir un referentiel unique (puisque au final ton programme ne sais pas du tout ce que fera ton / tes plugins).

    Voici donc le code d'une interface de base, qui spécifie le Nom et le UserControl d'un plugin lambda.
    Ce bout de code represente une librairie DLL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Interface IPluginExemple
        Function PluginName() As String
        Function PluginUserControl() As System.Windows.Forms.UserControl
    End Interface
    Ne pas oublier de référencer
    - system.windows.forms

    Ensuite il faut developper le plugin en lui même.
    Ceci se fait au sein d'une librairie standard aussi .

    Ici le plugin n'est qu'un simple bouton qui affiche "Ca fonctionne"

    La partie InitializeComponent, est généré par VS Studio 2005, lors de la manipulation en drag&drop sur le usercontrol via l'interface, ne pas oublier de le lancer dans le constructeur.

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    Public Class PluginTest
        Inherits System.Windows.Forms.UserControl
        Implements IPluginExemple.IPluginExemple
     
        Friend WithEvents btAction As System.Windows.Forms.Button
     
        '------------------
        '-- Constructeur --
        '------------------
        Public Sub New()
            Call InitializeComponent()
        End Sub
     
        '-----------------------------------------------------------
        '-- Sub generé et mis à jour automatiquement par VS 2005  --
        '--         qui génére tous les éléments visuels          --
        '-----------------------------------------------------------
        Private Sub InitializeComponent()
            Me.btAction = New System.Windows.Forms.Button
            Me.SuspendLayout()
            '
            'btAction
            '
            Me.btAction.Location = New System.Drawing.Point(15, 15)
            Me.btAction.Name = "btAction"
            Me.btAction.Size = New System.Drawing.Size(80, 23)
            Me.btAction.TabIndex = 0
            Me.btAction.Text = "Action"
            Me.btAction.UseVisualStyleBackColor = True
            '
            'PluginTest
            '
            Me.Controls.Add(Me.btAction)
            Me.Name = "PluginTest"
            Me.Size = New System.Drawing.Size(110, 53)
            Me.ResumeLayout(False)
     
        End Sub
     
        '----------------------------------------------
        '-- Gestion des spécification de l'interface --
        '----------------------------------------------
        Public Function PluginName() As String Implements IPluginExemple.IPluginExemple.PluginName
            Return "Plugin de test"
        End Function
     
        Public Function PluginUserControl() As System.Windows.Forms.UserControl Implements IPluginExemple.IPluginExemple.PluginUserControl
            Return Me
        End Function
     
     
        '---------------------------------------------------------
        '-- Procédure qui gère le click sur le bouton du plugin --
        '---------------------------------------------------------
        Private Sub btAction_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAction.Click
            Call MsgBox("Ca fonctionne", MsgBoxStyle.OkOnly, "")
        End Sub
    End Class
    Ne pas oublier de referencer :
    - system.windows.forms
    - system.drawing
    - Et la DLL de l'interface du plugin

    Et finallement le window application dans lequel on charge le plugin.
    Le plugin est declaré comme object puisque l'on ne sait pas le typer.

    De plus pour une fois chargé, il faut utiliser CType afin de pouvoir appeler les methodes de l'interface du 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
     
    Public Class Form1
        Private oPlugin As Object
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Initialisation du plugin Timer
            oPlugin = AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap("PluginTest.dll", "PluginTest")
     
            'Initialisation du nom du GroupBox avec le nom du plugin
            gbPlugin.Text = CType(oPlugin, IPluginExemple.IPluginExemple).PluginName
     
            'Ajustement du clientsize du GroupBox avec celui du plugin
            gbPlugin.ClientSize = CType(oPlugin, IPluginExemple.IPluginExemple).PluginUserControl.ClientSize
     
            'Ajout du UserControl du plugin dans le GroupBox
            gbPlugin.Controls.Add(CType(oPlugin, IPluginExemple.IPluginExemple).PluginUserControl)
        End Sub
    End Class
    Ne plas oublier de referencer :
    - system.windows.forms
    - system.drawing
    - Et la DLL de l'interface du plugin

    Et voila, ce code fonctionne chez moi, il faut faire attention de placer les DLLs dans le même repertoire que ton executable (idem pour le mod debug) puisque qu'aucune n'est referencé sur le système et que le chemin du chargement est dans le repertoire courant.

    De plus le second paramètre de CreateInstanceFromAndUnwrap represente le nom de la classe à charger, donc si tu as défini un namespace n'oublie pas de le prefixé comme il se doit (NomDuNamespace.TaClasse)

    Ceci n'est qu'un petit exemple et ton interface peut etre bien plus evolué selon tes besoins, n'hesite donc pas à travailler sur cette base.

    J'espere que ca t'aura aider, si tu as d'autres question n'hesite pas.
    Fichiers attachés Fichiers attachés

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 43
    Points
    43
    Par défaut
    merci bcp pr ta réponse complete

    Je lis ca se soir et je valide ensuite.

    Encore merci

    PS: si t as les src hesite pas a les ajouter en piece jointes :p

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 140
    Points
    140
    Par défaut
    J'ai rajouté les sources des 3 parties dans un fichier .zip dans le message précédent.

    Ce sont des sources que j'ai rapidement faite pour la réponse dans un environnement VS.NET 2005.

    Avec ca tu devrais pouvoir comprendre comment ca marche.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 43
    Points
    43
    Par défaut
    merci bcp tnopy j apprecie vraiment ton aide

    Prbolème résolu

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 140
    Points
    140
    Par défaut
    De rien

  14. #14
    gph
    gph est déconnecté
    Membre habitué Avatar de gph
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 99
    Points : 134
    Points
    134
    Par défaut
    Merci pour cet exemple qui m'aide à comprendre le concept.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/02/2010, 19h22
  2. Intégrer dans une application un outil ?
    Par ghohm dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2007, 11h53
  3. [VB.NET] Server.MapPath et Session dans une classe
    Par nancy54 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/09/2004, 14h23
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37

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