visual que net letra hacer como colorear color cambiar cambia bloquear c# winforms

c# - que - ¿Cómo cambiar el color de la fuente de un TextBox deshabilitado?



como hacer que un textbox cambia de color (9)

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

¿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.


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; }


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; }


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


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 }

Refrence

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.


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


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; }


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;


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 .