c# - verificacion - seleccionar todo el texto textbox asp net
¿Cómo deseleccionar el cuadro de texto si el usuario hace clic en otro lugar del formulario? (4)
Suponiendo que no tiene otros controles en su foro, intente agregar un control de Panel que pueda recibir el foco.
Establezca el TabIndex
en el control del Panel
a un valor inferior a su TextBox
o NumericUpDown
.
Ahora, cuando su formulario principal recibe el foco, el Panel
debe recibir el foco en lugar del área del Panel
de TextBox
.
Actualmente en mi aplicación es imposible anular la selección de un cuadro de texto. La única forma es seleccionar otro cuadro de texto. Mis usuarios y yo estamos de acuerdo en que al hacer clic en cualquier otro lugar del formulario, debe deseleccionar el cuadro de texto actual. Traté de sobreescribir el MouseDown en muchos controles y tener el foco establecido en una etiqueta al azar, pero no funciona para algunos controles como MenuStrip o barras de desplazamiento. ¿Algunas ideas?
Tengo algún tipo de "solución alternativa" para ti. Solo otro control (que puede enfocar) en segundo plano. Probé esto para un GridView (que pintará su control de color gris), pero debería poder hacerlo con un control personalizado en el color que desea o simplemente establecer el color de fondo de la vista de grilla (doh). De esta forma, cada vez que el usuario haga clic en el fondo, este control de fondo se enfocará.
Tuve un problema similar recientemente. Mi interfaz es muy compleja, con muchos paneles y páginas con pestañas, por lo que ninguna de las respuestas más simples que encontré ha funcionado.
Mi solución fue agregar programáticamente un manejador de clic de mouse a cada control no enfocable de mi formulario, que intentaría enfocar cualquier etiqueta en el formulario. Enfocar una etiqueta específica no funcionaría cuando estuviera en una página de pestañas diferente, así que terminé revisando y enfocando todas las etiquetas.
Código para lograr es el siguiente:
private void HookControl(Control controlToHook)
{
// Add any extra "unfocusable" control types as needed
if (controlToHook.GetType() == typeof(Panel)
|| controlToHook.GetType() == typeof(GroupBox)
|| controlToHook.GetType() == typeof(Label)
|| controlToHook.GetType() == typeof(TableLayoutPanel)
|| controlToHook.GetType() == typeof(FlowLayoutPanel)
|| controlToHook.GetType() == typeof(TabControl)
|| controlToHook.GetType() == typeof(TabPage)
|| controlToHook.GetType() == typeof(PictureBox))
{
controlToHook.MouseClick += AllControlsMouseClick;
}
foreach (Control ctl in controlToHook.Controls)
{
HookControl(ctl);
}
}
void AllControlsMouseClick(object sender, MouseEventArgs e)
{
FocusLabels(this);
}
private void FocusLabels(Control control)
{
if (control.GetType() == typeof(Label))
{
control.Focus();
}
foreach (Control ctl in control.Controls)
{
FocusLabels(ctl);
}
}
Y luego agregue esto a su evento Form_Load:
HookControl(this);
Ya que probablemente tenga una etiqueta, o cualquier otro control en su formulario de win, iría con la solución recomendada aquí y solo pondría el foco en una etiqueta cuando haga clic en el formulario.
En el peor de los casos, incluso puede agregar una etiqueta situada en la posición -100, -100, configurarlo como el primero en el orden de tabulación y enfocarlo () en el clic de formulario.