2010-07-16 13 views
9

estoy cambiando varios cuadros de texto hacia fuera para RichTextBoxes para obtener algunas de las características interesantes.RichTextBox equivalente de TextBox.AcceptsReturn

que tenía mis cuadros de texto configurados para AcceptReturn por lo que la clave va a crear una nueva línea, en lugar de dejar el control de entrar. RichTextBox no parece tener esta característica.

¿Hay una manera simple de hacer esto, o tengo que capturar todas las pulsaciones de teclas y manejarlas individualmente?

Respuesta

16

Nota: Este problema solo ocurre cuando configura la propiedad "AcceptButton" del formulario.

Ajuste el RichTextBox.AcceptsTab true. Por algún motivo, esto funciona tanto para las pestañas como para la tecla Intro. Si solo quiere las teclas Intro, tendrá que escribir un código personalizado.

+0

Gracias. Resulta que tuve ese set. Olvidé que estoy manejando teclas presionadas en el nivel del formulario para pasar de un control a otro. Tendré que enganchar todas las teclas presionadas y verificar si ingreso cada vez para anular mis propios comportamientos. Gracias. – captncraig

1

la solución es anular IsInputKey:

protected override bool IsInputKey(Keys keyData) 
{ 
    if (
     (keyData & ~Keys.Modifiers) == Keys.Tab && 
     (keyData & (Keys.Control | Keys.Alt)) == 0 
    ) 
     return false; 

    return base.IsInputKey(keyData); 
} 

Después de ajustar AcceptsTab true, se asegura de que los procesos RichTextBox tanto la pestaña y tecla de retorno. Con la implementación anterior de IsInputKey, nos aseguramos de que las teclas Tab y Mayús + Tab no lleguen nunca al RichTextBox, por lo que se utilizan para la navegación.

La anulación anteriormente se debe pegar en una clase derivada de RichTextBox.

1

Desde Carter señaló que esto sólo se aplica si AcceptButton se establece, y la otra solución sugiere que deriva la clase RichTextBox, he encontrado otra solución sencilla. Simplemente desactivó AcceptButton por el tiempo que el/a RichTextBox tiene el foco. He aquí un ejemplo de código:

private void RichText_Enter(object sender, EventArgs e) 
{ 
    AcceptButton = null; 
} 

private void RichText_Leave(object sender, EventArgs e) 
{ 
    AcceptButton = OKActionButton; 
} 

Esto supone que sólo tiene un único AcceptButton y que es poco probable que cambie. De lo contrario, debería copiar aquí la lógica de búsqueda de AcceptButton o simplemente hacer una copia de seguridad del valor de AcceptButton anterior antes de establecerlo como nulo.

Esta solución también tiene el efecto secundario de la eliminación de la frontera por defecto del botón de aceptar real, lo que indica al usuario que pulsar la tecla Intro ahora no activará dicho botón.

0

Simplemente cambie la opción Aceptar en Richtextbox Propiedad cambie a "verdadero" funcionará como una magia