c# - tecla - Permitir a los usuarios insertar una TAB en un TextBox pero no nuevas líneas
presionar enter en un textbox y ejecutar el evento de un boton c# (2)
Sel multilíneas a verdadero y establezca el tamaño de línea en 1. obtendrá el resultado deseado.
Quiero tener un TextBox que acepte la tecla TAB (y coloca una TAB, ASCII 0x09, / t en consecuencia en el cuadro de texto) en lugar de pasar al siguiente control. El TextBox tiene una propiedad AcceptsTab, que he establecido en verdadero, pero esto no da el resultado deseado. Resulta que la propiedad AcceptsTab solo funciona, y Multiline también está configurada en true. Sin embargo, quiero tener un TextBox de una línea que no acepte nuevas líneas.
Esto es lo que haces. Crea tu propia clase que hereda de TextBox. En el constructor, configure multiline en true y AcceptsTab en true. Luego, anule WndProc y use este código:
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)0x102 && m.WParam.ToInt32() == 13)
{
return;
}
base.WndProc(ref m);
}
Esto bloqueará la aceptación de la clave enter y, por lo tanto, no se creará una nueva línea. Hacky? sí, pero funcionará ...
EDITAR: Explicaré lo que hace este código. Cada formulario y control de Windows recibe un mensaje de Windows cuando ocurre algo, como pintar, teclear, etc., etc. En este caso, estoy buscando un mensaje WM_CHAR (que es 0x102) que es el mensaje que le dice al TextBox que la tecla fue presionada Si ese es el mensaje, y el WParam == 13, entonces eso significa que se presionó Enter, en cuyo caso, regresar, no hacer nada. De lo contrario, reanudar como se esperaba. ¿Tiene sentido?