2008-09-25 8 views
11

Estoy tratando de establecer las características de la fuente deshabilitada para un control de etiqueta. Puedo establecer todas las características de las fuentes (tamaño, negrita, etc.), pero el color es anulado por el comportamiento de ventanas por defecto que parece ser uno de estos dos colores:Windows Forms: cómo se cambia el color de la fuente para una etiqueta deshabilitada

  • Si el color de fondo es transparente entonces ForeColor es lo mismo que TextBox deshabilitado Color.
  • Si el color de fondo está configurado para cualquier otra cosa, ForeColor tiene un color Gris Oscuro.

La imagen siguiente muestra el comportamiento: la columna 1 es Etiquetas, la Columna 2 es Cuadros de texto y la Columna 3 es Cuadros combinados.

alt text http://highplainstech.com/images/testForm.png

Editar - Explicación de la imagen: Las dos primeras filas son estilos por defecto de una etiqueta, cuadro de texto, y el cuadro combinado. En las segundas dos filas, establecí el color de fondo en rojo y primer plano en blanco. El manejo de estilo de fuente deshabilitado por Microsoft es inconsistente.

Respuesta

1

Eche un vistazo al método ControlPaint.DrawStringDisabled; podría ser algo útil. Lo he usado al anular el evento OnPaint para controles personalizados.

ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent, 
       new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic); 
1

¿Ha intentado implementar el evento EnabledChanged? ¿O está buscando más propiedad de "estilos" en el control (hasta donde yo sé, no existen)?

0

¿Por qué es esto un problema?

Yo personalmente dejaría que windows lo maneje. Las personas están acostumbradas a que los artículos deshabilitados se vean de cierta manera, por lo que si comienzas a tratar de cambiar cada aspecto de su apariencia, puedes confundir a los usuarios.

0

Probablemente necesites anular el evento Paint. Todos los kits de herramientas que he usado hasta ahora tienen el mismo problema cuando el control está deshabilitado. Solo supongo que dejan que Windows haga el dibujo del texto. En cuanto a las etiquetas, bueno, no son un control estándar, y es por eso que están funcionando.

2

Para el cuadro de texto, puede establecer la propiedad readonly en verdadero manteniendo el control habilitado. A continuación, puede establecer la propiedad BackColor y ForeColor a su gusto. El usuario aún podrá hacer clic en el control y tener un cursor parpadeante, pero no podrá editar nada.

No estoy seguro de si esto se extrapola a otros tipos de controles como los cuadros combinados o lo que sea, ya que aún no he tenido la oportunidad de experimentar, pero vale la pena intentarlo.

0
+1

-1, el OP preguntó cómo cambiar el color de la fuente (también conocido como forecolor), su enlace proporcionó formas de cambiar el color de fondo. A veces, cambiar el color de fondo no es una solución factible. – MDMoore313

+1

siempre que los enlaces estén muertos. – MarkusEgle

0

Anulé el método OnPaint de mi control con el método OnPaint a continuación. Pegué toda la clase de control para que sea fácil de copiar.

public partial class NewLabel : Label 
{ 
    public NewLabel() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     TextRenderer.DrawText(e.Graphics, this.Text.ToString(), this.Font, ClientRectangle, ForeColor); 
    } 

} 
Cuestiones relacionadas