Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 2010
-
30 janv. 2007 à 18:24
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 2010
-
31 janv. 2007 à 01:30
Bonjour à tous.
J'ai un problème dans un de mes scripts.
Mon but est d'enregistrer dans un fichier texte les propriétés des controles présents sur une de mes forms.
En fait, l'utilisateur peut, grace à mon logiciel, créer une interface graphique, comme dans VB en fait. J'utilise un PropertyGrid pour que l'utilisateur puisses modifier les valeurs des controles. Et donc, il faut qu'il puisse enregistrer sa création.
Il faut donc que j'enregistres les propriétés de tous les controles que l'utilisateur à créé.
Peut-être y-a t'il un moyen d'accéder aux propriétés grâce au PropertyGrid, mais je n'ai pas trouvé le moyen...
Il y a peut-être un autre moyen aussi, je suis ouvert à toutes propositions.
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 20104 31 janv. 2007 à 01:27
C'est gentil à toi mais finalement voici ma solution :
Ceci enregistre les porpriétés d'une des forms de mon projet :
Dim m_Ctrl As Object
Dim PropertySaver As PropertyAndValueList
PropertySaver = New PropertyAndValueList()
PropertySaver.Clear()
m_Ctrl = frmMain.fDesign
Dim properties() As PropertyInfo = m_Ctrl.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance)
For Each p As PropertyInfo In properties
If p.CanRead And p.CanWrite Then
Dim val As Object = p.GetValue(m_Ctrl, Nothing)
If p.PropertyType.IsSerializable Then
PropertySaver.Add(New PropertyAndValue(p.Name, val))
End If
End If
Next
'// Sèrialisation des propriétés de la Form :
formatter.Serialize(stream, PropertySaver)
Quand aux classes de ce code :
<Serializable()> _
Public Class PropertyAndValueList
Inherits CollectionBase
Public Sub Add(ByVal p As PropertyAndValue)
List.Add(p)
End Sub
Public Function GetPropertyAndValue(ByVal propertyName As String) As PropertyAndValue
For Each p As PropertyAndValue In List
If p.PropertyName = propertyName Then
Return p
End If
Next
Return Nothing
End Function
End Class
<Serializable()> _
Public Class PropertyAndValue
Private m_PropertyName As String = String.Empty
Public Property PropertyName() As String
Set(ByVal value As String)
m_PropertyName = value
End Set
Get
Return m_PropertyName
End Get
End Property
Private m_PropertyValue As Object = Nothing
Public Property PropertyValue() As Object
Set(ByVal value As Object)
m_PropertyValue = value
End Set
Get
Return m_PropertyValue
End Get
End Property
Public Sub New(ByVal PropertyName As String, ByVal PropertyValue As Object)
m_PropertyName = PropertyName
m_PropertyValue = PropertyValue
End Sub
End Class
Et ensuite je me contente d'enregistrer le flux Stream. Pour recharcher j'utilise DeSerialized() de l'objet IFormatter.
Voilà, je le mets à tout hasard, si qqn est interessé.