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

VB.NET Discussion :

Générer une classe VB.Net


Sujet :

VB.NET

  1. #1
    Membre du Club Avatar de Veler
    Profil pro
    Lycéen
    Inscrit en
    Mars 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2007
    Messages : 195
    Points : 47
    Points
    47
    Par défaut Générer une classe VB.Net
    Bonjours,

    J'ai créée un concepteur de form en VB.Net 2008 (DesignSurface, IDesignerHost...etc).
    Il fonction plutôt bien.
    J'aimerais pouvoir enregistrer le contenu du designer dans une class VB.Net.

    J'ai trouvé l'astuce, avec CodeDom, CodeCompileUnit...Etc

    Mais il y a un énorme HICK, lol

    A la fin, j'obtiens une class vb.Net sans bug, jusque que je ne sais pas comment faire pour, comment dire, obtenir le contenu du design...

    En gros, je me retrouve avec la sub InitializeComponent vide !!! lol, je ne sais pas ce que je dois faire pour qu'elle possède des truc du genre Me.Button1.Text = "Du Texte" ....etc

    Voici mon code :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Dim myDesignerClass As CodeDom.CodeTypeDeclaration
            Dim initializeComponent As CodeDom.CodeMemberMethod
            Dim main As CodeDom.CodeEntryPointMethod
            Dim con As CodeDom.CodeConstructor
            Dim ns As CodeDom.CodeNamespace
            Dim root As System.ComponentModel.IComponent
            Dim nametable As Hashtable
            Dim ds As System.ComponentModel.Design.DesignSurface
            Dim idh As System.ComponentModel.Design.IDesignerHost
     
            Code = New CodeDom.CodeCompileUnit
            ds = Me.Designer ' Le DesignSurface
            ds.Flush()
            idh = DirectCast(ds.GetService(GetType(System.ComponentModel.Design.IDesignerHost)), System.ComponentModel.Design.IDesignerHost)
            root = idh.RootComponent
     
            nametable = New Hashtable(idh.Container.Components.Count)
     
            ns = New CodeDom.CodeNamespace(Projet_Variable.Nom)
     
            myDesignerClass = New CodeDom.CodeTypeDeclaration
            initializeComponent = New CodeDom.CodeMemberMethod
     
            ' Imports
            ns.Imports.Add(New CodeDom.CodeNamespaceImport("System"))
            ns.Imports.Add(New CodeDom.CodeNamespaceImport("System.ComponentModel"))
            ns.Imports.Add(New CodeDom.CodeNamespaceImport("System.Windows.Forms"))
     
            myDesignerClass = New CodeDom.CodeTypeDeclaration(root.Site.Name)
            myDesignerClass.BaseTypes.Add(root.GetType.FullName)
            ns.Types.Add(myDesignerClass)
     
            code.Namespaces.Add(ns)
     
            ' Constructeurs
            con = New CodeDom.CodeConstructor
            con.Attributes = CodeDom.MemberAttributes.Public
            con.Statements.Add(New CodeDom.CodeMethodInvokeExpression(New CodeDom.CodeMethodReferenceExpression(New CodeDom.CodeThisReferenceExpression(), "InitializeComponent")))
            myDesignerClass.Members.Add(con)
     
            ' Main
            main = New CodeDom.CodeEntryPointMethod
            main.Name = "Main"
            main.Attributes = CodeDom.MemberAttributes.Public Or CodeDom.MemberAttributes.Static
            main.CustomAttributes.Add(New CodeDom.CodeAttributeDeclaration("System.STAThreadAttribute"))
            main.Statements.Add(New CodeDom.CodeMethodInvokeExpression(New CodeDom.CodeMethodReferenceExpression(New CodeDom.CodeTypeReferenceExpression(GetType(System.Windows.Forms.Application)), "Run"), New CodeDom.CodeExpression() {New CodeDom.CodeObjectCreateExpression(New CodeDom.CodeTypeReference(root.Site.Name))}))
            myDesignerClass.Members.Add(main)
     
            ' InitializeComponent
            initializeComponent = New CodeDom.CodeMemberMethod
            initializeComponent.Name = "InitializeComponent"
            initializeComponent.Attributes = CodeDom.MemberAttributes.Private
            initializeComponent.ReturnType = New CodeDom.CodeTypeReference(GetType(Void))
            myDesignerClass.Members.Add(initializeComponent)
     
            Dim names As Reflection.AssemblyName() = Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()
            Dim i As Integer = 0
            While i < names.Length
                Dim assembly As Reflection.Assembly = Reflection.Assembly.Load(names(i))
                code.ReferencedAssemblies.Add(assembly.Location)
                i += 1
            End While
     
     
     
     
     
     
     
     
     
            Dim o As CodeDom.Compiler.CodeGeneratorOptions = New CodeDom.Compiler.CodeGeneratorOptions
     
            o.BlankLinesBetweenMembers = True
            o.BracingStyle = "VB"
            o.ElseOnClosing = False
            o.IndentString = "    "
     
            Dim swVB As IO.StringWriter = New IO.StringWriter
            Dim vb As VBCodeProvider = New VBCodeProvider
     
            vb.GenerateCodeFromCompileUnit(code, swVB, o)
     
            MsgBox(swVB.ToString)
    Pas très commenté, désolé.

    Pouvez-vous m'aider?

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    t'as regardé vers
    System.ComponentModel.Design.Serialization

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    je veux bien voir le reste de ton code, j'ai jamais reussi à creer de design surface
    et j'en aurais besoin pour utiliser le générateur de requete d'sql serveur pendant l'execution

  4. #4
    Membre du Club Avatar de Veler
    Profil pro
    Lycéen
    Inscrit en
    Mars 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2007
    Messages : 195
    Points : 47
    Points
    47
    Par défaut
    Bonjours,

    Je n'ai rien trouvé dans System.ComponentModel.Design.Serialization, enfin disons plutôt que je n'ai pas réussit à l'utiliser correctement.

    Je veux bien donner le reste des codes sources, mais alors ça va être long, d'autant plus j'ai écrit la base du concepteur en C#, enfin si tu t'y connais, pas de problème

    Envois-moi un message privée si tu veux

  5. #5
    Membre du Club Avatar de Veler
    Profil pro
    Lycéen
    Inscrit en
    Mars 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2007
    Messages : 195
    Points : 47
    Points
    47
    Par défaut
    Salut,

    Alors voila :
    Après de nombreuses recherche (sans internet, en vacance^^), je pense que la réponse se trouve dans CodeDomDesignerLoader, en revanche, je n'arrive toujours pas à faire la sérialisation du concepteur de form.

    Si quelqu'un a la solution à mon problème^^
    @++

Discussions similaires

  1. Instantiation d'une classe c++ .NET
    Par djslayers dans le forum Windows
    Réponses: 1
    Dernier message: 13/04/2008, 11h55
  2. Générer une classe Java
    Par zsoh dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2007, 15h05
  3. Réponses: 2
    Dernier message: 22/08/2007, 23h08
  4. Générer une classe java à partir d'une autre
    Par hebmaster dans le forum Général Java
    Réponses: 5
    Dernier message: 29/05/2006, 16h09
  5. Réponses: 14
    Dernier message: 15/12/2005, 18h46

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