Propriétés des objets (.Net)

Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 - 30 janv. 2007 à 18:24
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Derniè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.

Bonne prog, @+, Scalpweb

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
30 janv. 2007 à 23:34
Salut

Regardes les videos de mitsu.

http://ms.helifan.net/France/Vision/ListMSDN.aspx?Cid=cbfc89d5-4759-4403-b8bf-440c3d8dfd10&ord=adate&index=0

Dans une des dernieres video, il parle de la serialisation des forms pour faire un peut comme du xaml.

Tu peux surement te baser sur ce concept
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
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é.

Bonne prog, @+, Scalpweb
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
31 janv. 2007 à 01:30
J'ai oublié de mentionner que ce code est tiré en partie d'une source C# disponible sur le réseau code source.

Je n'ai pas gardé le lien, faites une recherche si vous êtes interessé.

Bonne prog, @+, Scalpweb
0
Rejoignez-nous