Foros del Web » Programación para mayores de 30 ;) » .NET »

Es posible con herencia?

Estas en el tema de Es posible con herencia? en el foro de .NET en Foros del Web. Hola, Tengo unos formularios donde cuando ocurre un evento de focus en un textbox, éste cambia de color, y cuando lo pierde vuelve al color ...
  #1 (permalink)  
Antiguo 06/05/2012, 05:53
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Es posible con herencia?

Hola,

Tengo unos formularios donde cuando ocurre un evento de focus en un textbox, éste cambia de color, y cuando lo pierde vuelve al color original.

Como tengo muchos formularios y muchos textos pense en usar herencia, pero no sé como programar esto, osea entiendo como heredar y crear clases derivadas, pero no se como hacer para que este cambio de color sea propiedad del objeto.
  #2 (permalink)  
Antiguo 06/05/2012, 14:44
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Es posible con herencia?

Puedes hacer algo así, creas una clase que herede de TextBox y defines los eventos de GotFocus y LostFocus, además de una propiedad ColorOnFocus (el color cuando se enfoca) y un atributo saveColor (se guarda el color cuando no está el foco).

Código C#:
Ver original
  1. public partial class FocusTextBox : TextBox
  2.     {
  3.         public FocusTextBox()
  4.         {
  5.             InitializeComponent();
  6.             GotFocus += (s, e) =>
  7.             {
  8.                 Color colorToSave = BackColor;              
  9.                 this.BackColor = ColorOnFocus;
  10.                 saveColor = colorToSave;
  11.             };
  12.  
  13.             LostFocus += (s, e) =>
  14.             {
  15.                 if (BackColor == ColorOnFocus && saveColor.HasValue)
  16.                 {
  17.                     BackColor = saveColor.Value;
  18.                     saveColor = null;
  19.                 }
  20.             };
  21.         }
  22.  
  23.         private Color? saveColor;
  24.  
  25.         private Color _colorOnFocus = Color.Aqua;
  26.  
  27.         public Color ColorOnFocus
  28.         {
  29.             get { return _colorOnFocus; }
  30.             set { _colorOnFocus = value; }
  31.         }      
  32.     }
  33. }
  #3 (permalink)  
Antiguo 06/05/2012, 15:20
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Es posible con herencia?

Te paso el mismo control con una pequeña mejora.

Ahora, cuando cambias el BackColor mediante código, si el usuario tiene enfocado el textbox, no se cambia el color hasta que no quitas el foco.

Supongo que se podría hacer de mejor forma, pero...

Código C#:
Ver original
  1. public partial class FocusTextBox : TextBox
  2.     {
  3.         public FocusTextBox()
  4.         {
  5.             InitializeComponent();
  6.             ColorNotFocus = BackColor;
  7.             GotFocus += (s, e) =>
  8.             {
  9.                 this.BackColor = ColorOnFocus;
  10.                 goingToFocus = true;
  11.             };
  12.  
  13.             LostFocus += (s, e) =>
  14.             {
  15.                 goingToFocus = false;
  16.                 BackColor = ColorNotFocus;
  17.             };
  18.         }
  19.  
  20.         private bool goingToFocus = false;
  21.  
  22.         private Color _colorNotFocus;
  23.  
  24.         public Color ColorNotFocus
  25.         {
  26.             get { return _colorNotFocus; }
  27.             set { _colorNotFocus = value; }
  28.         }
  29.  
  30.         private Color _colorOnFocus = Color.Aqua;
  31.  
  32.         public Color ColorOnFocus
  33.         {
  34.             get { return _colorOnFocus; }
  35.             set { _colorOnFocus = value; }
  36.         }
  37.  
  38.         public override Color BackColor
  39.         {
  40.             get
  41.             {
  42.                 return base.BackColor;
  43.             }
  44.             set
  45.             {
  46.                 if (!goingToFocus)
  47.                 {
  48.                     base.BackColor = value;
  49.                     if (!Focused)
  50.                         ColorNotFocus = value;
  51.                 }
  52.                 else
  53.                 {
  54.                     ColorNotFocus = value;
  55.                 }
  56.             }
  57.         }
  58.        
  59.      }

Etiquetas: vbnet
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:39.