Classe perso dans un PropertyGrid

Résolu
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 11 janv. 2008 à 17:40
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 13 janv. 2008 à 20:03
Bonjour,

J'ai un petit problème dans l'utilisation d'une PropertyGrid. Lorsque on y affiche une classe (créé nous-même dans le code) ayant comme propriété une autre classe (aussi déclaré nous-même), cette propriété s'affiche en grisé et impossible à "ouvrir":

J'ai créé une classe ayant 2 propriétés, une qui est un Button (ValeurEditable) et donc une classe du framework, une autre qui est une classe que j'ai créé moi même (ValeurPasEditable). Dans la PropertyGrid ca s'affiche comme ca:

La ValeurEditable, qui est une classe Button, possède donc un petit + qui permet de l'ouvrir et de naviguer parmi ses propres propriétés. Mais pour la propriété ValeurPasEditable, qui est une classe que j'ai déclaré moi même, rien à faire, ca reste en grisée et impossible à ouvrir.

Pourtant, lorsque on debug et qu'on met cette classe en espion, on peut sans problème naviguer dans cette ValeurNonEditable:

Et d'ailleur, le problème s'applique aussi lorsque on créé un UserControl et que l'une de ses propriétés est une classe que nous avons nous-même déclarée:

Comment éviter ça?

6 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
13 janv. 2008 à 19:49
Bon, j'ai enfin trouvé la solution

Sur ta classe UneClasse tu ajoutes
l'attribut
<TypeConverter(GetType(ExpandableObjectConverter))> _

Cela te permettra de débloquer le readonly de ta classe

Avant la déclaration de la classe et là tu seras débloqué

Bon courage
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
11 janv. 2008 à 21:31
Salut

Je ne vois pas trop comment tu as fais pour rendre readonly ta propriété
Je suis intéressé de comprendre d'ou vient ton problème

Voici une classe qui fonctionne
Imports System.ComponentModel
Public Class test
    Private m_valeur As Integer
   
_
    <Category("Test")> _
    <Description("Description")> _
    Public Property valeur() As Integer
        Get
            Return m_valeur
        End Get
        Set(ByVal value As Integer)
            m_valeur = value
        End Set
    End Property

End Class
________________________________________________
Voici une classe qui est en readonly

Public Class test
    Private m_valeur As Integer
   
_
    <Category("Test")> _
    <Description("Description")> _
    Public ReadOnly Property valeur() As Integer
        Get
            Return m_valeur
        End Get
    End Property

End Class

_____________________________________

Bon courage
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
12 janv. 2008 à 02:53
Salut,

Oui mais là tu expose un Integer avec ta propriété, pour ça y'a pas de soucis... mais ça n'a rien a voir. Si je reprend ce que je disais:

"J'ai un petit problème dans l'utilisation d'une PropertyGrid. Lorsque
on y affiche une classe (créé nous-même dans le code) ayant comme
propriété une autre classe (aussi déclaré nous-même), cette propriété
s'affiche en grisé et impossible à "ouvrir""

"La ValeurEditable, qui est une classe Button, possède donc un petit +
qui permet de l'ouvrir et de naviguer parmi ses propres propriétés.
Mais pour la propriété ValeurPasEditable, qui est une classe que j'ai
déclaré moi même, rien à faire, ca reste en grisée et impossible à
ouvrir."

"Et d'ailleur, le problème s'applique aussi lorsque on créé un
UserControl et que l'une de ses propriétés est une classe que nous
avons nous-même déclarée"

De plus, on voit bien dans la boite "Espion" que la propriété dont je parle est une classe (ayant donc des membres)
Un Integer n'a pas de propriétés publiques à afficher dans une PropertyGrid, c'est clair

Par exemple, créé une une classe MyProperty avec des propriétés publiques, puis créé un control MyControl ayant une propriété publique as MyProperty. Ajoute MyControl sur un formulaire et regarde ses propriétés dans la boite "Propriété" de l'IDE: La propriété retournant un MyProperty est grisé et il n'y a pas de petit + pour afficher ses membres.
Par contre, si tu ajoute une nouvelle propriété à MyControl retournant cette fois une classe du framework (par exemple button), la propriété ne sera pas grisé dans la PropertyGrid...
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
12 janv. 2008 à 13:51
Ok

Je n'avais pas analysé correctement le problème

Regardes les tuto suivant
http://www.dotnet-tech.com/tutoriels/propertygrid1/PropertyGrid.pdf
http://www.dotnet-tech.com/tutoriels/propertygrid2/Le%20PropertyGrid%20(Part%20II).pdf

Et tu trouveras surement la solution.

Bon courage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
13 janv. 2008 à 19:21
Merci pour ce tuto nhervagault (vous allez les chercher ou vos pseudo? )

Il est vraiment intéressant, explications claires et faciles à comprendre... mais malheureusement ce que je cherche ne s'y trouve pas

Mais si vous cherchez à utiliser les éditeurs personnalisés pour l'édition des propriétés dans une PropertyGrid, ce tuto est fait pour vous...

Donc je vais encore chercher, pas le choix.. et encore merci pour ton aide nhervagault
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
13 janv. 2008 à 20:03
Parfait, c'est nickel

Grand merci à toi
0
Rejoignez-nous