Editar propiedades que son objetos.

30/07/2003 - 11:10 por Jose Antonio | Informe spam
Cuando en un control de usuario se untiliza la clase Point, Size, etc.,
cuando se editan en la ventana de propiedades, aparece un signo (+) para
expandirlas y poner el valor de la X,Y o altura y anchura, etc.

Sin embargo si creamos una clase nuestra por ejemplo :

Clase TresD que tiene tres propiedades Largo, Ancho y Alto.

Si esta clase TresD forma parte de tu control de usuario, en la ventana de
propiedades no sale el (+) para poder dar valores a Largo, Ancho y Alto.

Se necesito algun atributo especial para que salga?
Donde hay que ponerlo en la clase base o en el control de usuario?


Saludos y gracias.
 

Leer las respuestas

#1 Octavio Hernández
30/07/2003 - 16:50 | Informe spam
Jose A.,

El truco está en que la clase TypeConverter que asocias a la propiedad debe
heredar de ExpandableObjectConverter. Te mando un ejemplo muy parecido a lo
que quieres tomado de un curso que damos (además de mostrar eso, enseña cómo
utilizar el atributo Browsable).

Salu2 - Octavio

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace Danysoft.Controls
{
public class RedLabel : System.Windows.Forms.Label
{
public RedLabel()
{
base.ForeColor = Color.Red;
}
[Browsable(false)]
public override Color ForeColor
{
get
{
return base.ForeColor; // podría ser return Color.Red;
}
}

private TVector _vector;
[TypeConverter(typeof(TVector_Converter))]
public TVector Vector { get { return _vector; } set { _vector = value; } }
}

public class TVector_Converter: ExpandableObjectConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type
sourceType)
{
if (sourceType == typeof(string))
{
return true;
}
return base.CanConvertFrom (context, sourceType);
}

public override object ConvertFrom(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
string[] v = ((string)value).Split(new char[] {','});
return new TVector(int.Parse(v[0]), int.Parse(v[1]), int.Parse(v[2]));
}
return base.ConvertFrom (context, culture, value);
}
}

public struct TVector
{
private int _x, _y, _z;
public TVector(int a, int b, int c) { _x = a; _y = b; _z = c; }
[Browsable(true)]
public int x
{
get { return _x; }
set { _x = value; }
}
[Browsable(true)]
public int y
{
get { return _y; }
set { _y = value; }
}
[Browsable(true)]
public int z
{
get { return _z; }
set { _z = value; }
}
public override string ToString()
{
return _x.ToString() + "," + _y + "," + _z;
}
}
}

"Jose Antonio" escribió en el mensaje
news:%
Cuando en un control de usuario se untiliza la clase Point, Size, etc.,
cuando se editan en la ventana de propiedades, aparece un signo (+) para
expandirlas y poner el valor de la X,Y o altura y anchura, etc.

Sin embargo si creamos una clase nuestra por ejemplo :

Clase TresD que tiene tres propiedades Largo, Ancho y Alto.

Si esta clase TresD forma parte de tu control de usuario, en la ventana de
propiedades no sale el (+) para poder dar valores a Largo, Ancho y Alto.

Se necesito algun atributo especial para que salga?
Donde hay que ponerlo en la clase base o en el control de usuario?


Saludos y gracias.


Preguntas similares