2011-09-14 21 views
5

Quiero desactivar la selección de texto y hacer clic en el medio del texto en un cuadro de texto, pero el usuario debe poder ingresar a este cuadro de texto y escribir al final del texto anterior, por lo que no puedo hazlo ReadOnly o Enable = false.Cómo deshabilitar la selección en un cuadro de texto

trato de manejar MouseDown y hacer lo siguiente:

input.Select(input.Text.Length, 0); 

Ayuda con la colocación de un cursor en el centro del texto, pero el usuario puede hacer una selección a partir del final.

También realizo un evento MessageBox() en MouseDown, pero en este caso el usuario no puede hacer clic en textBox y escribir nada.

El último intento fue establecer un focus() en otro control y volver a enfocar, después de un período de tiempo, pero no funcionó en absoluto. El usuario aún puede hacer una selección.

¿Cómo puedo hacerlo?

+2

¿Un segundo cuadro de texto que solo se agrega al primer cuadro de texto? – LarsTech

Respuesta

2

Si se ajusta al modelo de UI/usuario, otro enfoque es usar dos cuadros de texto: uno de solo lectura con el texto anterior que el usuario puede ver y actuar (si eso es algo que tiene que hacer) y una editable para el nuevo texto junto con un botón para enviar el nuevo texto al cuadro de texto de solo lectura (y a la capa de persistencia).

Ese enfoque no sólo es sin duda más fácil de usar — el cuadro editable es completamente editable en lugar de sólo "appendable", que vuelve confuso cuando el usuario pulsa la tecla Retroceso — sino que también requiere menos de lucha con el marco para que las cajas hacen Que necesitas.

5

¿Qué tal esto para Click caso

Editar: También hacer lo mismo para DoubleClick y MouseLeave para cubrir todos los casos. Puede tener un controlador de eventos común.

private void textBox1_Click(object sender, EventArgs e) 
    { 
     ((TextBox) sender).SelectionLength = 0; 
    } 
+0

Casi. Cuando desaparece la selección 'MouseUp', pero el usuario puede comenzar a seleccionar algo (resaltado azul) – Pieniadz

+1

Agregue' MouseMove' a la lista de eventos que borran la selección –

1

No estás lejos con su controlador de eventos MouseDown, pero probablemente mejor para coger MouseUp, ya que este es el caso de que se disparará cuando han terminado de seleccionar.

Alternativamente, podría ver el evento SelectionChanged.

Sólo hay que poner:

input.Select (input.Text.Length, 0);

código en cualquiera de esos controladores de eventos.

+2

No hay 'SelectionChanged' para winforms' TextBox'. –

Cuestiones relacionadas