2009-07-23 4 views
1

Je suis nouveau à C#, programmeur C++ de longue date, je me demandais juste une fois l'initialisation d'une grille de propriétés en utilisant .selectedObjects. Est-il possible d'obtenir le contenu des valeurs actuelles dans la grille de propriétés.Obtention du contenu de PropertyGrid?

Ben

+0

Pouvez-vous clarifier votre question? Si vous définissez SelectedObject, vous avez accès à l'objet que le PropertyGrid modifie, non? – jasonh

Répondre

0

PropertyGrid ne pas exposer ses internes au consommateur. Cependant, .Net vous permet d'effectuer une "Réféfaction" pour examiner la structure (et exécuter des parties de) code, y compris les propriétés de classe.

Here est un article qui couvre les bases de la réflexion. Vous pouvez réellement voir plus d'internes avec la réflexion que ce que la grille de propriété affiche.

0

Vous devez parcourir toutes les propriétés de l'objet dans la grille, en utilisant Reflection basé sur le type de l'objet.

object o = PropertyGrid.SelectedObject; 
Type t = o.GetType(); // We will work on type "t" 
List<MemberInfo> members = new List<MemberInfo>(); 
members.AddRange(t.GetProperties(BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance); // Get the public instance properties list 
foreach (MemberInfo member in members) 
{ 
    Type type = null; 
    object value = null; 
    PropertyInfo pi = (member as PropertyInfo); 
    type = pi.PropertyType; 
    if (type.IsSubclassOf(typeof(CollectionBase))) 
     continue; // Sorry 
    if (pi.GetCustomAttributes(typeof(NotSerializedAttribute), true).GetLength(0) > 0) 
     continue; 
    if (!pi.CanRead || !pi.CanWrite) 
     continue; 
    value = pi.GetValue(o, null); 
    // TODO Print out, or save the "value" 
} 
Questions connexes