Problême avec du XML (j'en ai marre!)
Bonsoir à tous,
Après maintenant 2 mois de bloquage sur mon problême, et après avoir dientifié le vrai problême, je repose un message en vous expliquant clairement ce qu'il se passe. J'ai trouvé le problême, mais je n'ai toujours pas de solution depuis maintenant 2 semaines.
Voila le problême, j'ai un fichier xml que j'utilise pour créer une form avec ces contrôle et tout. j'ai 2 Name, Object et Property. Object définit un contrôle, et tout les property qui sont dedans sont les propriété du contrôle.
Je vous décrie ce que fais mon code pour que vous comprenniez le problême après:
Quand il lit le type d'un object, il donne une valeur à une variable qui dit si c'est une form, un bouton ou autre. Quand il y a un property, il donne la valeur du property au contrôle qui est en cour, et on le sais grace à la variable dont je parle juste au dessus.
Le problême, c'est qu'il arrive que j'ai un Object, qui se trouve dans un autre Object. Le code vois un nouveau object, donc il idéntifie le type du contrôle. Mais c'est pas ce qu'il faut, car après, il ne peu plus s'occuper des Property du contrôle précédent.
Bon, je ne suis pas sur que je vous ai bien expliqué, mais ça vous éclaircira surment si je vous donne mon code vb.net et celui en xml:
Code:
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
| Public Sub CONVERT(ByVal FileName As String)
Dim ctrl As New Control ' variable pour la création d'un contrôle
Dim forms As New Form 'variable pour la création de la form
Dim type_ctrl As Integer = 0 ' 1 = Form et 2 = Contrôle
Dim xr As XmlTextReader = New XmlTextReader(FileName)
Do While xr.Read()
Select Case xr.NodeType
Case XmlNodeType.Element
Select Case xr.Name
Case "Object" ' Ici, on va identifier le type d'objet, un form, un boutton...ect
Select Case xr.GetAttribute("type")
Case "System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ' Si cest une form
type_ctrl = 1 '1, c'est une form
forms = New Form
forms.Show()
Case "System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ' Si c'est un bouton
type_ctrl = 2 '2, c'est un contrôle
ctrl = New Button
forms.Controls.Add(ctrl)
End Select
Case "Property"
Select Case xr.GetAttribute("name")
Case "Text" 'Pour la propriété Text du contrôle ou de la Form
If type_ctrl = 1 Then 'Si c'est une form
forms.Text = xr.ReadString
End If
If type_ctrl = 2 Then 'Si c'est un contrôle
ctrl.Text = xr.ReadString
End If
End Select
End Select
Case XmlNodeType.Element
Select Case xr.Name
Case "Object"
type_ctrl = 0
End Select
End Select
Loop
End Sub |
Et voici celui en XML:
Code:
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
|
<Object type="System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="Dialog" children="Controls">
<Object type="System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="Cancel_Button" children="Controls">
<Property name="TabIndex">1</Property>
<Property name="Size">75, 23</Property>
<Property name="Name">Cancel_Button</Property>
<Property name="UseVisualStyleBackColor">True</Property>
<Property name="Text">Annuler</Property>
<Property name="Location">313, 250</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Property name="DialogResult">Cancel</Property>
</Object>
<Object type="System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="OK_Button" children="Controls">
<Property name="TabIndex">0</Property>
<Property name="Size">75, 23</Property>
<Property name="Name">OK_Button</Property>
<Property name="UseVisualStyleBackColor">True</Property>
<Property name="Text">OK</Property>
<Property name="Location">232, 250</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
</Object>
<Property name="ShowIcon">False</Property>
<Property name="MaximizeBox">False</Property>
<Property name="Text">Boite de dialogue</Property>
<Property name="ShowInTaskbar">False</Property>
<Property name="Name">Dialog</Property>
<Property name="StartPosition">CenterScreen</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Property name="MinimizeBox">False</Property>
<Property name="ClientSize">400, 285</Property>
<Property name="FormBorderStyle">FixedDialog</Property>
</Object> |
MERCI D'AVANCE A TOUS !!!!!!!!
A+++++