2010-09-16 24 views
15

¿Hay alguna manera de deshabilitar el cursor en el cuadro de texto sin establecer la propiedad Enable en false? Estaba intentando utilizar la propiedad ReadOnly, pero a pesar de que no puedo escribir en el cuadro de texto, el cursor aparece si hago clic en el cuadro de texto. Entonces, ¿hay alguna manera de deshacerse de este cursor permanentemente?Cómo deshabilitar el cursor en el cuadro de texto?

Respuesta

12

En su lugar, podría usar un Label. Cuando está en el diseñador, establece BorderStyle = Fixed3D, BackColor = Window y AutoSize = False, se parece mucho a un TextBox.

Sin embargo, el cursor en un cuadro de texto se proporciona para que el usuario pueda desplazarse por el texto cuando es más largo que el cuadro. Perderá esa funcionalidad con una etiqueta, a menos que esté seguro de que siempre le quedará. Aparte de eso, no es posible eliminar el cursor de un TextBox.

+0

Un cuadro de texto ReadOnly también es útil para mostrar información que el usuario puede querer copiar y pegar en otro lugar. Al usar una Etiqueta (o deshabilitar el cursor) esa habilidad se pierde o se reduce. Pero si realmente desea mostrar información sin la posibilidad de seleccionarla, entonces una etiqueta es la herramienta adecuada para el trabajo. –

+0

@JeffreyLWhitledge Sé que esta es una vieja pregunta, pero para aumentar el peso, ¿qué sucede si el usuario requiere barras de desplazamiento en una etiqueta? –

+0

@KyleT: si tiene una cantidad de texto suficiente como para requerir barras de desplazamiento, le sugiero que siga utilizando un 'TextBox' en su lugar, y establezca su propiedad' ReadOnly' en 'true'. El cursor es realmente agradable de tener, ya que permite al usuario seleccionar partes del texto sin editarlo. – Virtlink

17

En C#, se puede usar la siguiente sólo lectura de texto:

public class ReadOnlyTextBox : TextBox 
{ 
    [DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    public ReadOnlyTextBox() 
    { 
     this.ReadOnly = true; 
     this.BackColor = Color.White; 
     this.GotFocus += TextBoxGotFocus; 
     this.Cursor = Cursors.Arrow; // mouse cursor like in other controls 
    } 

    private void TextBoxGotFocus(object sender, EventArgs args) 
    { 
     HideCaret(this.Handle); 
    } 
} 
+0

¿Por qué configurar el 'BackColor'? Windows ya se ocupa de esto para que coincida con el tema del sistema del usuario. –

+0

@Mikhail Semenov Soy nuevo en C#, cómo invocar este evento 'TextBoxGotFocus', no está presente también en eventos. pls help .. –

+0

Esto funcionó perfectamente para un RichTextBox donde estaba teniendo un problema similar. El código en ReadOnlyTextBox() es superfluo. – OfficeAddinDev

-3

puede utilizar RightToLeft Propiedad de Cuadro de texto, ponerlo en verdad, no se librará del cursor, pero se arreglará en la esquina derecha y no aparecerá automáticamente después de cada texto que escriba en su cuadro de texto. Lo he usado para desarrollar una aplicación como Windows Calculator.

+3

Solo empeora las cosas. También cambia la alineación, el cursor aún aparece donde haces clic y seleccionar texto es ... extraño. –

8

En C#, puede deshabilitar el cursor en un cuadro de texto desactivando temporalmente y luego volviendo a habilitar el cuadro de texto siempre que reciba el foco. Tenga en cuenta que no es necesario hacer que el cuadro de texto solo sea leído si usa este método. Por ejemplo:

private void TextBox_Enter(object sender, EventArgs e) 
{ 
    TextBox.Enabled = false; 
    TextBox.Enabled = true; 
} 
4

si coloca la función hideCaret dentro del evento Textchange, esto solucionará el problema.

[DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     HideCaret(textBox1.Handle); 
    } 
0

Puede establecerlo programáticamente.

textBox1.Cursor = Cursors.Arrow; 
0

La solución más sencilla para mí fue simplemente anular el evento de enfoque y enfocar de nuevo al elemento principal. Esto evita el cursor y cualquier edición del cuadro de texto por parte del usuario y, básicamente, deshabilita el cuadro de texto sin tener que establecer la propiedad Enabled = false.

private void Form1_load(object sender, EventArgs e) { 
    textBox1.ReadOnly = true; 
    textBox1.Cursor = Cursors.Arrow; 
    textBox1.GotFocus += textBox1_GotFocus; 
} 


private void textBox1_GotFocus(object sender, EventArgs e) { 
    ((TextBox)sender).Parent.Focus(); 
} 
Cuestiones relacionadas