Propiedad

07/07/2004 - 11:18 por Pablo Diaz | Informe spam
Muy buenas a tod@s d nuevo:

Quiero ponerle a mi control una propiedad q sea una estrutcura, por ejemplo
como aparece la propiedad Size de los formularios q esta formada por Width y
Height.

Tengo declarada la siguiente estructura:

public struct MargenesTexto

{

public int Derecho;

public int Izquierdo;

public int Superior;

public int Inferior;

}

y luego declaro la propiedad d este modo:

public MargenesTexto Margenes

{

get {return margenes;}

set {margenes = value;}

}

El problema es q al añadir mi control a un formulario pues dicha propiedad
me sale deshabilitada y en la lista d propiedades en el campo del valor me
sale lo siguiente "ControlTxText.ControlTexto+MargenesTexto". ControlTxText
es el nombre del proyecto y ControlTexto el nombre dl control.

Preguntas similare

Leer las respuestas

#1 José Miguel Torres
07/07/2004 - 11:29 | Informe spam
Prueba en ponerle un constructor a la estructura tal que así:
public struct MargenesTexto

{



public MargenesTexto(int d, int i, int s, int inf)
{
Derecho = d;
Izquierdo = i;
Superior = s;
Inferior = inf;
}
public int Derecho;

public int Izquierdo;

public int Superior;

public int Inferior;

}


dime q tal.


José Miguel Torres
jtorres_diaz~~ARROBA~~terra.es
http://jmtorres.blogspot.com



"Pablo Diaz" escribió en el mensaje
news:
Muy buenas a d nuevo:

Quiero ponerle a mi control una propiedad q sea una estrutcura, por


ejemplo
como aparece la propiedad Size de los formularios q esta formada por Width


y
Height.

Tengo declarada la siguiente estructura:

public struct MargenesTexto

{

public int Derecho;

public int Izquierdo;

public int Superior;

public int Inferior;

}

y luego declaro la propiedad d este modo:

public MargenesTexto Margenes

{

get {return margenes;}

set {margenes = value;}

}

El problema es q al añadir mi control a un formulario pues dicha propiedad
me sale deshabilitada y en la lista d propiedades en el campo del valor me
sale lo siguiente "ControlTxText.ControlTexto+MargenesTexto".


ControlTxText
es el nombre del proyecto y ControlTexto el nombre dl control.


Respuesta Responder a este mensaje
#2 Pablo Diaz
07/07/2004 - 11:40 | Informe spam
Q va me sale lo mismo.
Dsd el codigo si puedo acceder a la propiedad y a sus miembros pero en la
lista d propiedades en tiempo d diseño no me sale para acceder a cada uno d
los miembros con el tipico signo mas. Creo q es pq los miembros de la
estructura no son propiedades
"José Miguel Torres" <jtorres_diaz~~ARROBA~~terra.es> escribió en el mensaje
news:
Prueba en ponerle un constructor a la estructura tal que así:
> public struct MargenesTexto
>
> {
>
public MargenesTexto(int d, int i, int s, int inf)
{
Derecho = d;
Izquierdo = i;
Superior = s;
Inferior = inf;
}
> public int Derecho;
>
> public int Izquierdo;
>
> public int Superior;
>
> public int Inferior;
>
> }
dime q tal.


José Miguel Torres
jtorres_diaz~~ARROBA~~terra.es
http://jmtorres.blogspot.com



"Pablo Diaz" escribió en el mensaje
news:
> Muy buenas a d nuevo:
>
> Quiero ponerle a mi control una propiedad q sea una estrutcura, por
ejemplo
> como aparece la propiedad Size de los formularios q esta formada por


Width
y
> Height.
>
> Tengo declarada la siguiente estructura:
>
> public struct MargenesTexto
>
> {
>
> public int Derecho;
>
> public int Izquierdo;
>
> public int Superior;
>
> public int Inferior;
>
> }
>
> y luego declaro la propiedad d este modo:
>
> public MargenesTexto Margenes
>
> {
>
> get {return margenes;}
>
> set {margenes = value;}
>
> }
>
> El problema es q al añadir mi control a un formulario pues dicha


propiedad
> me sale deshabilitada y en la lista d propiedades en el campo del valor


me
> sale lo siguiente "ControlTxText.ControlTexto+MargenesTexto".
ControlTxText
> es el nombre del proyecto y ControlTexto el nombre dl control.
>
>


Respuesta Responder a este mensaje
#3 Anonimo
07/07/2004 - 12:19 | Informe spam
decinos si lo consigues en el futuro


Q va me sale lo mismo.
Dsd el codigo si puedo acceder a la propiedad y a sus


miembros pero en la
lista d propiedades en tiempo d diseño no me sale para


acceder a cada uno d
los miembros con el tipico signo mas. Creo q es pq los


miembros de la
estructura no son propiedades
"José Miguel Torres" <jtorres_diaz~~ARROBA~~terra.es>


escribió en el mensaje
news:
Prueba en ponerle un constructor a la estructura tal




que así:
> public struct MargenesTexto
>
> {
>
public MargenesTexto(int d, int i, int s, int




inf)
{
Derecho = d;
Izquierdo = i;
Superior = s;
Inferior = inf;
}
> public int Derecho;
>
> public int Izquierdo;
>
> public int Superior;
>
> public int Inferior;
>
> }
dime q tal.


José Miguel Torres
jtorres_diaz~~ARROBA~~terra.es
http://jmtorres.blogspot.com



"Pablo Diaz" escribió en el




mensaje
news:
> Muy buenas a d nuevo:
>
> Quiero ponerle a mi control una propiedad q sea una




estrutcura, por
ejemplo
> como aparece la propiedad Size de los formularios q




esta formada por
Width
y
> Height.
>
> Tengo declarada la siguiente estructura:
>
> public struct MargenesTexto
>
> {
>
> public int Derecho;
>
> public int Izquierdo;
>
> public int Superior;
>
> public int Inferior;
>
> }
>
> y luego declaro la propiedad d este modo:
>
> public MargenesTexto Margenes
>
> {
>
> get {return margenes;}
>
> set {margenes = value;}
>
> }
>
> El problema es q al añadir mi control a un




formulario pues dicha
propiedad
> me sale deshabilitada y en la lista d propiedades en




el campo del valor
me
> sale lo




siguiente "ControlTxText.ControlTexto+MargenesTexto".
ControlTxText
> es el nombre del proyecto y ControlTexto el nombre




dl control.
>
>






.

Respuesta Responder a este mensaje
#4 Hernan M Foffani
07/07/2004 - 16:46 | Informe spam
Quiero ponerle a mi control una propiedad q sea una
estrutcura, por ejemplo como aparece la propiedad Size de
los formularios q esta formada por Width y Height.
...
Dsd el codigo si puedo acceder a la propiedad y a sus
miembros pero en la
lista d propiedades en tiempo d diseño no me sale para
acceder a cada uno d
los miembros con el tipico signo mas. Creo q es pq los
miembros de la estructura no son propiedades



No es tan sencillo. Te hace falta un TypeConverter
para la struct o class de la propiedad de tu control.

Para la clase de tu control no hace falta porque está
incluida al derivar de Control. Tampoco hace falta para
las propiedades de tipo Size porque el TypeConverter de
Size ya lo incluyo Microsoft en el .NET. Pero sí hace
falta para las propiedades cuyos tipos sean clases o
estructuras escritas por ti. Por ejemplo:

Si tu control tuviera una propiedad BasePrisma de tipo
Tamanio:

private Tamanio _basePrisma = new Tamanio(0,0);

public Tamanio BasePrisma {
get { return _basePrisma ; }
set { _basePrisma = value; }
}

donde Tamanio esta definida como:

public struct Tamanio {
private int _ancho;
private int _alto;

public Tamanio(int ancho, int alto) {
_ancho = ancho;
_alto = alto;
}

public int Ancho {
get { return _ancho; }
set { _ancho = value; }
}

public int Alto {
get { return _alto; }
set { _alto = value; }
}
}

necesitaras un TypeConverter para que puedas modificar los
datos de la propiedad como BasePrisma fuera de tipo Size.

Para este caso particular especifica el convertidor como
atributo de la clase

[TypeConverter(typeof(TamanioConverter))]
public struct Tamanio {
... resto de la clase ...

y donde TamanioConverter esta definida como:

public class TamanioConverter :
ExpandableObjectConverter {

public override bool CanConvertFrom(
ITypeDescriptorContext context, Type t) {

if (t == typeof(string)) return true;
return base.CanConvertFrom(context, t);
}

public override object ConvertFrom(
ITypeDescriptorContext context,
CultureInfo info,
object value) {

if (value is string) {
try {
string[] parsed = ((string)value).Split
(new char[] {','});
Tamanio p = new Tamanio(0,0);
p.Ancho = Int32.Parse(parsed[0].Trim
());
p.Alto = Int32.Parse(parsed[1].Trim());
return p;
} catch {}
throw new ArgumentException(
"Can not convert '" + (string)value +
"' to type ");
}
return base.ConvertFrom(context, info, value);
}

public override object ConvertTo(
ITypeDescriptorContext context,
CultureInfo culture, object value, Type
destType) {

if (destType == typeof(string) && value is
Tamanio) {
Tamanio p = (Tamanio)value;
return p.Ancho + ", " + p.Alto;
}
return base.ConvertTo(context, culture, value,
destType);
}
}


Saludos,
-H.
Respuesta Responder a este mensaje
#5 Pablo Diaz
08/07/2004 - 10:45 | Informe spam
Muchisimas gracias quillo. Lo he probado y me funciona correctamente.
Me pasa una cosa con el control. Lo compilo y me lo genera correctamente.
Luego lo añado a un formulario y me lo añade correctamente tb, pero cuando
le doy a grabar o a ver el codigo fuente, etc pues se me queda pillado el
visual studio, le quité todos los cambios q le habia hecho al control hasta
antes q me pasara esto y se me sigue quedando colgado. Sabes a q puede ser
debido esto?

"Hernan M Foffani" escribió en el mensaje
news:28db501c46431$27032870$
Quiero ponerle a mi control una propiedad q sea una
estrutcura, por ejemplo como aparece la propiedad Size de
los formularios q esta formada por Width y Height.
...
Dsd el codigo si puedo acceder a la propiedad y a sus
miembros pero en la
lista d propiedades en tiempo d diseño no me sale para
acceder a cada uno d
los miembros con el tipico signo mas. Creo q es pq los
miembros de la estructura no son propiedades



No es tan sencillo. Te hace falta un TypeConverter
para la struct o class de la propiedad de tu control.

Para la clase de tu control no hace falta porque está
incluida al derivar de Control. Tampoco hace falta para
las propiedades de tipo Size porque el TypeConverter de
Size ya lo incluyo Microsoft en el .NET. Pero sí hace
falta para las propiedades cuyos tipos sean clases o
estructuras escritas por ti. Por ejemplo:

Si tu control tuviera una propiedad BasePrisma de tipo
Tamanio:

private Tamanio _basePrisma = new Tamanio(0,0);

public Tamanio BasePrisma {
get { return _basePrisma ; }
set { _basePrisma = value; }
}

donde Tamanio esta definida como:

public struct Tamanio {
private int _ancho;
private int _alto;

public Tamanio(int ancho, int alto) {
_ancho = ancho;
_alto = alto;
}

public int Ancho {
get { return _ancho; }
set { _ancho = value; }
}

public int Alto {
get { return _alto; }
set { _alto = value; }
}
}

necesitaras un TypeConverter para que puedas modificar los
datos de la propiedad como BasePrisma fuera de tipo Size.

Para este caso particular especifica el convertidor como
atributo de la clase

[TypeConverter(typeof(TamanioConverter))]
public struct Tamanio {
... resto de la clase ...

y donde TamanioConverter esta definida como:

public class TamanioConverter :
ExpandableObjectConverter {

public override bool CanConvertFrom(
ITypeDescriptorContext context, Type t) {

if (t == typeof(string)) return true;
return base.CanConvertFrom(context, t);
}

public override object ConvertFrom(
ITypeDescriptorContext context,
CultureInfo info,
object value) {

if (value is string) {
try {
string[] parsed = ((string)value).Split
(new char[] {','});
Tamanio p = new Tamanio(0,0);
p.Ancho = Int32.Parse(parsed[0].Trim
());
p.Alto = Int32.Parse(parsed[1].Trim());
return p;
} catch {}
throw new ArgumentException(
"Can not convert '" + (string)value +
"' to type ");
}
return base.ConvertFrom(context, info, value);
}

public override object ConvertTo(
ITypeDescriptorContext context,
CultureInfo culture, object value, Type
destType) {

if (destType == typeof(string) && value is
Tamanio) {
Tamanio p = (Tamanio)value;
return p.Ancho + ", " + p.Alto;
}
return base.ConvertTo(context, culture, value,
destType);
}
}


Saludos,
-H.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida