Problema con valor por defecto de una propiedad

11/01/2009 - 17:51 por Carlos | Informe spam
hice una clase de textbox, digamos myTextBox. Alli en tiempo de diseño le
indique a la propiedad CharacterChasing el valor de Upper para que los datos
ingresados se transformen a mayusculas. Funciona bien.

En un form de windows luego pongo un myTextBox y necesito que para ese form
su propiedad CharacterChasing este con valor Normal en vez de Upper.

Pues resulta que aunque la cambio, al ejecutar el form no me respeta el
cambio y el disenador vuelve a ponerlo en Upper.

Como arreglo eso?
parece un bug

Preguntas similare

Leer las respuestas

#1 SoftJaén
11/01/2009 - 19:06 | Informe spam
"Carlos" escribió:

hice una clase de textbox, digamos myTextBox. Alli en tiempo de diseño
le indique a la propiedad CharacterChasing el valor de Upper para que los
datos ingresados se transformen a mayusculas. Funciona bien.

En un form de windows luego pongo un myTextBox y necesito que para ese
form su propiedad CharacterChasing este con valor Normal en vez de Upper.

Pues resulta que aunque la cambio, al ejecutar el form no me respeta el
cambio y el disenador vuelve a ponerlo en Upper.

Como arreglo eso?
parece un bug



Hola, Carlos:

No creo que se trate de ningún tipo de «bug». Más bien se tratará de la
implementación que has efectuado de la propiedad CharacterCasing en tu clase
derivada de TextBox, y si has utilizado o no el atributo «DefaultValue» para
especificar el valor por defecto que tomará la propiedad que deseas
redefinir.

Como no has publicado el código fuente que has escrito en la clase derivada,
no te puedo decir el motivo para que no te respete el valor de la propiedad
especificado. No obstante, prueba el siguiente ejemplo de una supuesta clase
que deriva de TextBox y sobrescribe la propiedad «CharacterCasing»:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public class myTextBox : TextBox
{
public myTextBox()
: base()
{
base.CharacterCasing = CharacterCasing.Upper;
}

[System.ComponentModel.DefaultValue(System.Windows.Forms.CharacterCasing.Upper)]
public new CharacterCasing CharacterCasing
{
get { return base.CharacterCasing; }
set { base.CharacterCasing = value; }
}
}
}

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 Carlos
11/01/2009 - 19:55 | Informe spam
Exactamente eso mismo era, te lo agradezco mucho.

Ya me funciona bien para CharacterCasing, aunque traté de hacer lo mismo con
la propiedad Font usando la constante "Tahoma, 8.25p" y no logro hacerlo que
me funcione, a que se deberá?



"SoftJaén" escribió en el mensaje
news:
"Carlos" escribió:

hice una clase de textbox, digamos myTextBox. Alli en tiempo de diseño
le indique a la propiedad CharacterChasing el valor de Upper para que los
datos ingresados se transformen a mayusculas. Funciona bien.

En un form de windows luego pongo un myTextBox y necesito que para ese
form su propiedad CharacterChasing este con valor Normal en vez de Upper.

Pues resulta que aunque la cambio, al ejecutar el form no me respeta el
cambio y el disenador vuelve a ponerlo en Upper.

Como arreglo eso?
parece un bug



Hola, Carlos:

No creo que se trate de ningún tipo de «bug». Más bien se tratará de la
implementación que has efectuado de la propiedad CharacterCasing en tu
clase derivada de TextBox, y si has utilizado o no el atributo
«DefaultValue» para especificar el valor por defecto que tomará la
propiedad que deseas redefinir.

Como no has publicado el código fuente que has escrito en la clase
derivada, no te puedo decir el motivo para que no te respete el valor de
la propiedad especificado. No obstante, prueba el siguiente ejemplo de una
supuesta clase que deriva de TextBox y sobrescribe la propiedad
«CharacterCasing»:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public class myTextBox : TextBox
{
public myTextBox()
: base()
{
base.CharacterCasing = CharacterCasing.Upper;
}


[System.ComponentModel.DefaultValue(System.Windows.Forms.CharacterCasing.Upper)]
public new CharacterCasing CharacterCasing
{
get { return base.CharacterCasing; }
set { base.CharacterCasing = value; }
}
}
}

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#3 Carlos
11/01/2009 - 20:01 | Informe spam
Me refiero asi:

[DefaultValue (typeof(Font),"Tahoma, 8.25pt")]
public new Font Font { get { return base.Font; } set { base.Font
= value; }}

tambien lo probe con override pero nada.

Por cierto, no entiendo por que algunas propiedades de este tipo son
virtuales y otras no lo son.



"Carlos" <carl> escribió en el mensaje
news:
Exactamente eso mismo era, te lo agradezco mucho.

Ya me funciona bien para CharacterCasing, aunque traté de hacer lo mismo
con la propiedad Font usando la constante "Tahoma, 8.25p" y no logro
hacerlo que me funcione, a que se deberá?



"SoftJaén" escribió en el mensaje
news:
"Carlos" escribió:

hice una clase de textbox, digamos myTextBox. Alli en tiempo de diseño
le indique a la propiedad CharacterChasing el valor de Upper para que
los datos ingresados se transformen a mayusculas. Funciona bien.

En un form de windows luego pongo un myTextBox y necesito que para ese
form su propiedad CharacterChasing este con valor Normal en vez de
Upper.

Pues resulta que aunque la cambio, al ejecutar el form no me respeta el
cambio y el disenador vuelve a ponerlo en Upper.

Como arreglo eso?
parece un bug



Hola, Carlos:

No creo que se trate de ningún tipo de «bug». Más bien se tratará de la
implementación que has efectuado de la propiedad CharacterCasing en tu
clase derivada de TextBox, y si has utilizado o no el atributo
«DefaultValue» para especificar el valor por defecto que tomará la
propiedad que deseas redefinir.

Como no has publicado el código fuente que has escrito en la clase
derivada, no te puedo decir el motivo para que no te respete el valor de
la propiedad especificado. No obstante, prueba el siguiente ejemplo de
una supuesta clase que deriva de TextBox y sobrescribe la propiedad
«CharacterCasing»:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public class myTextBox : TextBox
{
public myTextBox()
: base()
{
base.CharacterCasing = CharacterCasing.Upper;
}


[System.ComponentModel.DefaultValue(System.Windows.Forms.CharacterCasing.Upper)]
public new CharacterCasing CharacterCasing
{
get { return base.CharacterCasing; }
set { base.CharacterCasing = value; }
}
}
}

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.




Respuesta Responder a este mensaje
#4 SoftJaén
11/01/2009 - 21:08 | Informe spam
"Carlos" escribió:

Me refiero asi:

[DefaultValue (typeof(Font),"Tahoma, 8.25pt")]
public new Font Font { get { return base.Font; } set {
base.Font = value; }}

tambien lo probe con override pero nada.




Bueno, el atributo «DefaultValue» no es la panacea para establecer los
valores por defecto de todas las propiedades del control, ya que dicho
atributo solamente acepta valores constantes, y el valor de la propiedad
Font, como al igual que sucede con las propiedades BackColor o ForeColor,
por poner unos ejemplos, no son valores constantes.

Tienes que implementar dos procedimientos llamados ResetXXX y
ShouldSerializeXXX donde las XXX se sustitye por el nombre de la propiedad
que vas a redefinir:

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

namespace WindowsFormsApplication1
{
public class myTextBox : TextBox
{

public myTextBox()
: base()
{
base.Font = new Font("Tahoma", 8.25F);
}

public override Font Font
{
get { return base.Font; }
set { base.Font = value; }
}

public override void ResetFont()
{
base.Font = new Font("Tahoma", 8.25F);
}

private bool ShouldSerializeFont()
{
Font fnt = new Font("Tahoma", 8.25F);
return !base.Font.Equals(fnt);
}

}
}

Por cierto, no entiendo por que algunas propiedades de este
tipo son virtuales y otras no lo son.



Ahí ya no sé que decirte, porque el autor de la clase es el que decide qué
métodos o propiedades son virtuales o no. Ten en cuenta que esto son temas
relacionados con la herencia.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#5 Carlos
13/01/2009 - 02:18 | Informe spam
Muchas gracias

"SoftJaén" escribió en el mensaje
news:
"Carlos" escribió:

Me refiero asi:

[DefaultValue (typeof(Font),"Tahoma, 8.25pt")]
public new Font Font { get { return base.Font; } set {
base.Font = value; }}

tambien lo probe con override pero nada.




Bueno, el atributo «DefaultValue» no es la panacea para establecer los
valores por defecto de todas las propiedades del control, ya que dicho
atributo solamente acepta valores constantes, y el valor de la propiedad
Font, como al igual que sucede con las propiedades BackColor o ForeColor,
por poner unos ejemplos, no son valores constantes.

Tienes que implementar dos procedimientos llamados ResetXXX y
ShouldSerializeXXX donde las XXX se sustitye por el nombre de la propiedad
que vas a redefinir:

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

namespace WindowsFormsApplication1
{
public class myTextBox : TextBox
{

public myTextBox()
: base()
{
base.Font = new Font("Tahoma", 8.25F);
}

public override Font Font
{
get { return base.Font; }
set { base.Font = value; }
}

public override void ResetFont()
{
base.Font = new Font("Tahoma", 8.25F);
}

private bool ShouldSerializeFont()
{
Font fnt = new Font("Tahoma", 8.25F);
return !base.Font.Equals(fnt);
}

}
}

Por cierto, no entiendo por que algunas propiedades de este
tipo son virtuales y otras no lo son.



Ahí ya no sé que decirte, porque el autor de la clase es el que decide qué
métodos o propiedades son virtuales o no. Ten en cuenta que esto son temas
relacionados con la herencia.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o sugerido en el presente mensaje.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida