Enregistrer toutes les proriétées de tous les contrôle d'une form dans un txt

Signaler
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
-
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
-
salut à tous
j'ai plusieur extrait de code permettant d'enregistrer toutes les propriétées de tous les contrôle d'une form mis il y a des imcompatibilitées avec certaine propriété, avez-vous un code permettant de faire ce que je souhaitterais.
Ca urge en plus!

ps: j'ai un code génial qui est basé sur une dll, ce code est le concepteur de vue de vs, et on peut enregistrer et tous, ça m'irait très bien mais c'est en C#, j'ai essayé de convertir mais je me retrouve avec une centaine d'erreur (je vous asure), si par miracle quelqu'un arrive à convertir ça en vb.net, je le nomme "king of vb", lol., vla le code: ici

merci d'avance

bye

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://velerweb-2.fr.nfhttp://tempuri.org/tempuri.html

10 réponses

Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Colle ceci dans le module d'une form, sur laquelle tu auras au moins un bouton nommé Button1 (pour lancer le traitement), ou bien déplace le code de mon EVT Click sur Button1 la ou tu veux :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim SW As System.IO.StreamWriter = New System.IO.StreamWriter("c:" & Me.Name & ".txt")
SW.Write(GetChildrenDef(Me))
SW.Close()
MessageBox.Show("Terminé", "EnumControls", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Sub

Private Function GetChildrenDef(ByVal Container As Object) As String
Dim Buffer As String = ""

For Each Ctrl As Control In Container.Controls
Dim CtrlType As System.Type = Ctrl.GetType()
Buffer &= Ctrl.Name & "(" & CtrlType.FullName & ")" & vbCrLf
Dim PI As System.Reflection.PropertyInfo() = CtrlType.GetProperties()
For i As Integer = 0 To PI.Length - 1
Buffer &= " " & PI(i).Name & "="
Dim V As Object = PI(i).GetValue(Ctrl, Nothing)
If V IsNot Nothing Then Buffer &= V.ToString
Buffer &= vbCrLf
Next
If Ctrl.HasChildren Then Buffer &= GetChildrenDef(Ctrl)
Next
Return Buffer
End Function

Cela à l'air de fonctionner à peu près correctement.
Reste quelques soucis avec certaines propriétés, mais je pense qu'on peut améliorer facilement cela en fouillant un peu plus (j'ai fait cela à l'arrache !!)
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
2
Salut,  même problême qu'avec mes autre code, en fait, ce qui ce passe pour la propriété BackColor par exemple, c'est que ce que je retrouve dans mon fichier est System.Windows.forms.BackColor, un truc dans le genre.

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://velerweb-2.fr.nfhttp://tempuri.org/tempuri.html
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Tu dois pouvoir faire un test sur le type de la propriété, t gérer les System.Drawing.Color
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Un truc du genre ...

Private Function GetChildrenDef(ByVal Container As Object) As String
Dim Buffer As String = ""

For Each Ctrl As Control In Container.Controls
Dim CtrlType As System.Type = Ctrl.GetType()
Buffer &= Ctrl.Name & "(" & CtrlType.FullName & ")" & vbCrLf
For Each PI As System.Reflection.PropertyInfo In CtrlType.GetProperties()
Buffer &= " " & PI.Name & "(" & PI.PropertyType.ToString & ")="
Dim V As Object = PI.GetValue(Ctrl, Nothing)
If V IsNot Nothing Then
Select Case PI.PropertyType.ToString
Case "System.Drawing.Color"
Dim C As System.Drawing.Color = DirectCast(V, System.Drawing.Color)
Buffer &= "ARGB=(" & C.A & ", " & C.R & ", " & C.G & ", " & C.B & ")"
Case Else
Buffer &= V.ToString
End Select
End If
Buffer &= vbCrLf
Next
If Ctrl.HasChildren Then Buffer &= GetChildrenDef(Ctrl)
Next
Return Buffer
End Function
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
2
Salut Kristof_Koder, escuse moi de t'avoir dérranger pour ton dernier message car en fait, c'est un autre problême que j'ai, avec le 1er code. auccun rapport avec system.drawings, c'est juste que, je vau enregistrer un boutton, no problême, je veux enregistrer un panel et son contenu, gros problême, ça plante completement, le déboguer de vs n'attervient pas et je doit faire un "terminer maintenant" pour stopper l'application, y a un truc qui passe mal (merci bilou)

je regarde ton code, c'est peux être que t'as oublié de dire de regarder "les contrôle dans les contrôles" ou un truc comme ça.

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://velerweb-2.fr.nfhttp://tempuri.org/tempuri.html
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
2
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Le code que je t'ai fourni est récursif via la ligne suivante : If Ctrl.HasChildren Then Buffer &= GetChildrenDef(Ctrl), qui dit en gros : Si le controle en cours à des enfants, concatène le buffer et la définition de ces enfants.
Chez moi, cela passe très bien. il faudrait que tu fasses du pas à pas pour voir ce qui se passe d'un peu plus près.
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
2
Salut, ça tourne en rond sur

                    Buffer &= "  " & PI(i).Name & "="
                    Dim V As Object = PI(i).GetValue(ctrl, Nothing)
                    If V IsNot Nothing Then Buffer &= V.ToString
                    Buffer &= vbCrLf
                Next

j'vois pas ce qui bloc

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://velerweb-2.fr.nfhttp://tempuri.org/tempuri.html
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Ca tourne en rond sur chaque propriété d'un controle, ca c'est normal car plusieurs dizaines de propriétés pour un controle.
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
2
oui, je 'en doute, mais je ne pense pas que ça soit normal qu'au bout de 5min mon, ça tourne toujour en rond alor qu'il prend moin d'une second a enregistrer une dizaine de contrôle quand je ne met pas de label dans un panel par exemple.

ebaudoux@club.fr
http://velerweb-2.fr.nf
http://velerweb-2.fr.nfhttp://tempuri.org/tempuri.html