Problema con una estructura como propiedad

25/05/2005 - 18:31 por Kylix 2001 | Informe spam
Buenas tardes


En el codigo que inserto abajo, en Visual Studio, cuando intento modificar
con el editor de propiedades el valor de "val1" en el codigo del formulario,
no inserta codigo para guardar dicho cambio.

Alguien sabe por que? Que me falta? Tambien lo intente haciendo que la
estructura "prueba" fuera una clase descendiente de "Component" pero en eso
caso el editor de propiedades solo me mostraba el nombre de la propiedad
pero no me dejaba acceder a su contenido (en color gris).


Alguna idea?



public struct prueba
{
private bool _val1;

public bool val1
{ get { return this._val1; }
set { this._val1 = value; }
}

}


public class Controlillo : TextBox
{
private prueba _At1;

public prueba _At1
{
get { return this._At1; }
set { this._At1 = value; }
}
}



Gracias por la ayuda y saludos.
 

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
26/05/2005 - 16:47 | Informe spam
Puedes hacer dos cosas:

1) Colocarle el siguiente atributo a la propiedad:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

De esta forma se colocara codigo para setear cada propiedad de la
estructura.

2) Si quieres que se cree codigo como el generado por la estructura Size, es
decir colocando un constructor, deberas ponerle un constructor a la
estructura, crear una clase derivada de ExpandableObjectConverter que
permita convertir la estructura a un InstanceDescriptor y asignar esta clase
como TypeConverter de la estructura. Algo asi:

public class PruebaConverter : ExpandableObjectConverter {

public override object ConvertTo(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value, Type
destinationType) {

if (destinationType == typeof(InstanceDescriptor)) {

ConstructorInfo ci = value.GetType().GetConstructor(new Type[] {
typeof(bool) });
Prueba p = (Prueba) value;

return new InstanceDescriptor(ci, new Object[] { p.val1 });
}

return base.ConvertTo (context, culture, value, destinationType);
}

public override bool CanConvertTo(ITypeDescriptorContext context, Type
destinationType) {

if (destinationType == typeof(InstanceDescriptor))
return true;

return base.CanConvertTo (context, destinationType);

}

}

[TypeConverter(typeof(PruebaConverter))]
public struct Prueba {

public Prueba(bool val) {
_val1 = val;
}

/* */

}

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Preguntas similares