¿Cómo cambiar el color de la fuente de un TextBox deshabilitado?

¿Alguien sabe qué propiedad establece el color del texto para el control desactivado? Tengo que mostrar un texto en un TextBox deshabilitado y quiero establecer su color en negro.

NOTA: consulte la respuesta de Cheetah a continuación, ya que identifica un requisito previo para que esta solución funcione. Configurando BackColor del TextBox .


Creo que lo que realmente quieres hacer es habilitar el TextBox y establecer la propiedad ReadOnly en true .

Es un poco complicado cambiar el color del texto en un TextBox desactivado. Creo que probablemente deba subclasificar y anular el evento OnPaint .

ReadOnly embargo, ReadOnly debería darle el mismo resultado que !Enabled y le permite mantener el control del color y el formato del TextBox . Creo que también seguirá siendo compatible con la selección y copia de texto del TextBox que no es posible con un TextBox desactivado.

Otra alternativa simple es usar una Label lugar de un TextBox de TextBox .

Además, para que ForeColor se obedezca en un TextBox marcado ReadOnly, debe establecer explícitamente BackColor. Si desea que siga usando el BackColor predeterminado, debe hacer que el conjunto sea explícito, ya que el diseñador es demasiado inteligente para su propio beneficio aquí. Es suficiente para establecer BackColor a su valor actual. Hago esto en el evento Load para el formulario, así:

 private void FormFoo_Load(...) { txtFoo.BackColor = txtFoo.BackColor; } 

hola establece el atributo de solo lectura en verdadero desde el lado del código o el tiempo de ejecución no desde el tiempo de diseño

 txtFingerPrints.BackColor = System.Drawing.SystemColors.Info; txtFingerPrints.ReadOnly = true; 

Acabo de encontrar una buena manera de hacerlo. En mi ejemplo, estoy usando un RichTextBox, pero debería funcionar con cualquier control:

 public class DisabledRichTextBox : System.Windows.Forms.RichTextBox { // See: http://wiki.winehq.org/List_Of_Windows_Messages private const int WM_SETFOCUS = 0x07; private const int WM_ENABLE = 0x0A; private const int WM_SETCURSOR = 0x20; protected override void WndProc(ref System.Windows.Forms.Message m) { if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR)) base.WndProc(ref m); } } 

Puede establecer de manera segura Enabled = true y ReadOnly = false, y actuará como una etiqueta, evitando el enfoque, la entrada del usuario, el cambio de cursor, sin estar realmente deshabilitado.

Mira si te funciona. Saludos

Puedes probar esto. Reemplazar el evento OnPaint del TextBox.

  protected override void OnPaint(PaintEventArgs e) { SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property // Draw string to screen. e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property } 

establecer los ControlStyles en “UserPaint”

 public MyTextBox()//constructor { // This call is required by the Windows.Forms Form Designer. this.SetStyle(ControlStyles.UserPaint,true); InitializeComponent(); // TODO: Add any initialization after the InitForm call } 

Refrencia

O puedes probar este truco

En el evento Enter configure el foco

 int index=this.Controls.IndexOf(this.textBox1); this.Controls[index-1].Focus(); 

Por lo tanto, su control no se enfocará y se comportará como deshabilitado.

Simplemente maneje Enable changed y configúrelo en el color que necesita

 private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e) { ((TextBox)sender).ForeColor = Color.Black; } 

Si desea mostrar texto que no se puede editar o seleccionar, simplemente puede usar una etiqueta

Además de la respuesta de @ spoon16 y @Cheetah, siempre configuro la propiedad tabstop en False en el cuadro de texto para evitar que el texto se seleccione de forma predeterminada.

Alternativamente, también puedes hacer algo como esto:

 private void FormFoo_Load(...) { txtFoo.Select(0, 0); } 

o

 private void FormFoo_Load(...) { txtFoo.SelectionLength = 0; } 

Establecer el ‘Solo lectura’ como ‘Verdadero’ es el método más fácil.