Enregistrer toutes les proriétées de tous les contrôle d'une form dans un txt
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
31 août 2007 à 23:26
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
2 sept. 2007 à 17:51
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
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 1 sept. 2007 à 00:05
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 !!)
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 1 sept. 2007 à 00:11
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.
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 1 sept. 2007 à 00:59
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 1 sept. 2007 à 08:59
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.
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 2 sept. 2007 à 17:20
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.
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 2 sept. 2007 à 17:51
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.