2010-05-24 12 views
12

Muy bien, mi terminología en lo que respecta a C# no es buena, así que intentaré explicar esto con un pequeño ejemplo. Si crear una clase que está utilizando dentro de un PropertyGrid y tiene los siguientes valores:Implementando subcampos en un PropertyGrid

class Test 
{ 
    public Point example { get; set; } 
} 

Esto producirá una PropertyGrid que tiene un objeto expandible "ejemplo" que tiene campos X e Y con el fin de crear una "Punto".

Estoy intentando crear un "nombre" objeto que tiene los campos "Nombre" y "Apellido", por lo que tengo:

class Test 
{ 
    public Name example { get; set; } 
} 

public struct Name 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
} 

Sin embargo, esto no está funcionando según lo previsto.

Creo que necesito anular algunos métodos para que esto funcione, sin embargo, dado que realmente no tengo la terminología baja para PropertyGrids, me es difícil encontrar una solución.

Cualquier ayuda sería genial.

Respuesta

14

Después de mucho mirar alrededor finalmente pude descifrarlo, la palabra clave que faltaba era "ExpandableObjectConverter".

De todos modos, aquí es código de ejemplo:

public Form1() 
{ 
    InitializeComponent(); 

    Person x = new Person(); 
    propertyGrid1.SelectedObject = x; 
} 

public class Person 
{ 
    public string Caption { get; set; } 

    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public class Name 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     public override string ToString() 
     { 
      return LastName + ", " + FirstName; 
     } 
    } 

    private Name _name = new Name(); 

    public Name testName 
    { 
     get { return _name; } 
    } 
} 

PropertyGrids seguro son confusas.

+1

+1 para responder a su propia pregunta y +1 para la pregunta. – ChrisBD

+0

Lo agradezco, gracias por intentar resolver. – tplaner

+0

Gracias por la decoración [TypeConverter (typeof (ExpandableObjectConverter))], me faltaba – Pisu

1

Creo que en este caso las definiciones de propiedades de auto-implimented

public string Name { get; set; } 

no funcionan para este tipo struct pero los tipos de clases. En el primer ejemplo, Point es un tipo de clase.

Trate

class Name 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

continuación

class Test 
{ 
    public Name example {get; set;} 
} 

puede trabajar.

+0

Sí, lo probé, pero tampoco funciona. El campo está en gris, lo que me lleva a pensar que algo debe ser anulado. – tplaner

+0

Hmm - Tendré que verificar en una máquina que me da VS. Puede deberse al hecho de que se requiere un constructor – ChrisBD