Pregunta sobre winforms, focus, button, keyboard – Cómo crear una forma de victoria con botones que nunca atraerán el enfoque del teclado

3

Tengo algunos cuadros de texto en mi formulario de ganancias. Tengo algunos botones en él también. Ahora, cuando estoy escribiendo en uno de esos cuadros de texto y hago clic en un botón, el foco de entrada se pierde del cuadro de texto y el botón obtiene el foco del teclado de entrada. Es decir, el cursor se pierde del cuadro de texto en el momento en que hacemos clic en el botón. No quiero este comportamiento. Quiero que mi cuadro de texto retenga el cursor incluso cuando hago clic en el botón. La situación real es que tengo un cuadro de texto y botones numéricos que solo se usan desde la pantalla táctil.

Tu respuesta

4   la respuesta
0

haga clic en el controlador de eventos de esta manera:

<code>private void Button_Click(...)
{
    FocusTextBox();
    // Do things...
}

private void FocusTextBox()
{
    textBox.Focus();
}
</code>
¿Y si hubiera más de dos cuadros de texto? r.hamd
0

Crear personalizadoButton clase conFocusable propiedad, conjuntoFocusable afalse

<code>public class ButtonEx : Button
{
    [DefaultValue(true)]
    public bool Focusable
    {
        get { return GetStyle(ControlStyles.Selectable); }
        set { SetStyle(ControlStyles.Selectable, value); }
    }
}
</code>
9

ro desactiva elSelectable estilo:

<code>public class ButtonEx : Button {
  public ButtonEx() {
    this.SetStyle(ControlStyles.Selectable, false);
  }
}
</code>
4

haga clic en el (los) controlador (es) de eventos, establezca explícitamente el foco enalgun otro control. Elija cualquier control que crea que sería sensato para enfocar después de presionar el botón. Por ejemplo, establezca el foco en un TextBox, usando un código como este:

<code>textBox1.Focus();
</code>

Esto evitará que su botón gane enfoque cuando se hace clic en un botón.

Además, configura tu botónTabStop propiedad a falso.

Las otras respuestas que sugieren que establezca laCanFocus la propiedad a falso no funcionará porque esa propiedad es de solo lectura para los botones.

¿Y si hubiera más de dos cuadros de texto? r.hamd
Es bueno saberlo. ¿Hay alguna forma de evitar el parpadeo y hacer que la solución funcione con más de 1 TextBox? Alexandre
Tenga en cuenta que la propiedad [TabStop] del botón de configuración parafalse, si bien coincide con la solicitud de OP de que el botón "nunca atraiga el enfoque del teclado", haría que el formularioinutilizable por usuarios de teclado solamente. Esto no es necesario en una pantalla táctil, y si se puede conectar un teclado, no se debe hacer, ya que violaestándares de accesibilidad. yo recomiendono haciéndolo. ToolmakerSteve
@ r.hamd - malinterpretas la respuesta. En cadabotón haga clic en el controlador, se establece el foco enalgun otro control. Use cualquier control que tenga sentido para enfocar a continuación. Una opción lógica es poner el foco enalgún cuadro de texto es decirdespués el botón. Visualmente, esto se vería igual si alguien "tabulado" a ese cuadro de texto, para que sea la entrada activa. Otra buena alternativa es centrarse en elprimer cuadro de texto en forma. [Editar respuesta para aclarar esto.] ToolmakerSteve

Preguntas relacionadas