Valor por defecto a propiedades de un control derivado

18/02/2005 - 19:14 por Benton | Informe spam
Hola,

He derivado mi propio control a partir de System.Web.UI.WebControls.TextBox
y le he agregado propiedades nuevas. Mi pregunta ahora es cómo hacer que a
la propiedad CssClass
se le asigne un valor por defecto. La propiedad ya existe en la clase
original y lo único que quiero es darle un valor por defecto. ¿Necesito
sobreescribirla? De ser así, ¿cómo?

Gracias de antemano,

-Benton

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
19/02/2005 - 04:18 | Informe spam
Asignale el valor predeterminado en el constructor de la clase derivada.


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

"Benton" escribió en el mensaje
news:
Hola,

He derivado mi propio control a partir de
System.Web.UI.WebControls.TextBox y le he agregado propiedades nuevas. Mi
pregunta ahora es cómo hacer que a la propiedad CssClass
se le asigne un valor por defecto. La propiedad ya existe en la clase
original y lo único que quiero es darle un valor por defecto. ¿Necesito
sobreescribirla? De ser así, ¿cómo?

Gracias de antemano,

-Benton


Respuesta Responder a este mensaje
#2 Benton
19/02/2005 - 21:16 | Informe spam
"Pedro Luna Montalvo, MVP" escribió en
el mensaje news:
Asignale el valor predeterminado en el constructor de la clase derivada.



Eso hace que en tiempo de ejecución la propiedad *siempre* tenga el valor
predeterminado, aunque con el visor de propiedades cambie dicho valor en
tiempo de diseño.

Me expliqué mal, lo que necesito es que al agregar el control a la forma en
tiempo de diseño, la propiedad tenga mi valor por defecto, pero que yo pueda
cambiarlo con el visor de propiedades.

Gracias de antemano,

-Benton


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

"Benton" escribió en el mensaje
news:
Hola,

He derivado mi propio control a partir de
System.Web.UI.WebControls.TextBox y le he agregado propiedades nuevas. Mi
pregunta ahora es cómo hacer que a la propiedad CssClass
se le asigne un valor por defecto. La propiedad ya existe en la clase
original y lo único que quiero es darle un valor por defecto. ¿Necesito
sobreescribirla? De ser así, ¿cómo?

Gracias de antemano,

-Benton






Respuesta Responder a este mensaje
#3 Octavio Hernandez
19/02/2005 - 21:46 | Informe spam
Hola,

Debes aplicar el atributo DefaultValue a la propiedad:

http://msdn.microsoft.com/library/d...sTopic.asp

Esta serie de artículos de Chris Sells (un capítulo de su libro) explica de
forma excelente todo lo que tiene que ver con el diseño de componentes:

http://www.awprofessional.com/artic...icle.asp?p9528&seqNum=1

Slds, Octavio

"Benton" escribió en el mensaje
news:

"Pedro Luna Montalvo, MVP" escribió
en el mensaje news:
Asignale el valor predeterminado en el constructor de la clase derivada.



Eso hace que en tiempo de ejecución la propiedad *siempre* tenga el valor
predeterminado, aunque con el visor de propiedades cambie dicho valor en
tiempo de diseño.

Me expliqué mal, lo que necesito es que al agregar el control a la forma
en tiempo de diseño, la propiedad tenga mi valor por defecto, pero que yo
pueda cambiarlo con el visor de propiedades.

Gracias de antemano,

-Benton


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

"Benton" escribió en el mensaje
news:
Hola,

He derivado mi propio control a partir de
System.Web.UI.WebControls.TextBox y le he agregado propiedades nuevas.
Mi pregunta ahora es cómo hacer que a la propiedad CssClass
se le asigne un valor por defecto. La propiedad ya existe en la clase
original y lo único que quiero es darle un valor por defecto. ¿Necesito
sobreescribirla? De ser así, ¿cómo?

Gracias de antemano,

-Benton










Respuesta Responder a este mensaje
#4 Pedro Luna Montalvo, MVP
20/02/2005 - 20:00 | Informe spam
Creo que valen algunas aclaraciones...

A menos que se le cambie el valor. Si en el diseñador estableces otro valor,
mira que el diseñador creara una sentencia de asignacion del nuevo valor a
esa propiedad. La inclusion del valor predeterminado en el constructor, hace
que este valor sea asignado al momento de crear el objeto (new), si sigues
en depuracion la secuencia de comandos al momento de crear, por ejemplo, un
formulario donde tienes a tu compontente, veras que luego de construir el
objeto se ejecutara una sentencia que el asigna el valor deseado a tu
propiedad.

Como te indico Octavio, lo que tienes que hacer es reemplazar (override - si
lo permite), u ocultar (new - si no permite override), esta propiedad,
utilizando el atributo DefaultValue y ademas, eso no te evita que aun tengas
que asignarle ese valor predeterminado en el constructor del componente.

Por cierto, el atributo DefaultValue lo que le dice al diseñador es: si en
tiempo de diseño se pone ese valor a la propiedad, no agregues codigo para
asignarle ese valor.

Asi, por ejemplo mira el siguiente caso:

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

public class MiBoton : Button {

[DefaultValue("Valor")]
public override string Text {
get {
return base.Text;
}
set {
base.Text = value;
}
}
}

Esto representa un boton donde sobrecargamos su propiedad Text, dandole un
nuevo valor predeterminado

Ahora, crea un formulario y agrega este boton. En su propiedad Text escribe
el valor: Valor
Ejecutalo y veras que por mas que intentes, siempre el texto desaparecera!!

Esto es porque al escribir el valor predeterminado en el diseñador, el no
genera ninguna linea para asignar valor porque asume que es un valor
predeterminado. Pero sabemos que no porque nos falta precisamente lo que te
indique, agregar la linea en el constructor.

El codigo correcto deberia quedar asi:


public class MiBoton : Button {

[DefaultValue("Valor")]
public override string Text {
get {
return base.Text;
}
set {
base.Text = value;
}
}

public MiBoton() {
this.Text = "Valor"; // asigno un valor predeterminado
}
}


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida