cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
1 avril 2009 à 17:44
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
4 avril 2009 à 09:07
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 :
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
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