Pergunta sobre winforms, button, focus, keyboard – Como criar um winform com botões que nunca atraem o foco do teclado

3

Eu tenho algumas caixas de texto na minha winform. Eu tenho alguns botões também. Agora, quando estou digitando em uma dessas caixas de texto e clico em um botão, o foco de entrada é perdido na caixa de texto e o botão recebe o foco do teclado de entrada. Ou seja, o cursor é perdido da caixa de texto no momento em que clicamos no botão. Eu não quero esse comportamento. Quero que minha caixa de texto retenha o cursor mesmo quando clico no botão. A situação real é que estou tendo botões de caixa de texto e numéricos para serem usados ​​apenas a partir da tela sensível ao toque.

Sua resposta

4   a resposta
0

clique em manipulador de eventos como este:

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

private void FocusTextBox()
{
    textBox.Focus();
}
</code>
E se houvesse mais de duas caixas de texto? r.hamd
4

clique em manipuladores de eventos, defina explicitamente o foco paraalgum outro controle. Escolha qualquer controle que você acredite que seja sensato para obter foco depois que o botão for pressionado. Por exemplo, defina o foco para um TextBox, usando código como este:

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

Isso impedirá que seu botão ganhe foco quando um botão for clicado.

Além disso, defina o botão do seuTabStop propriedade para false.

As outras respostas sugerindo que você definaCanFocus propriedade para false não funcionará porque essa propriedade é somente leitura para botões.

Isso é bom saber. Existe uma maneira de evitar o flicker e fazer a solução funcionar com mais de 1 TextBox? Alexandre
@ r.hamd - você entendeu mal a resposta. Em cadabotão clique manipulador, você define o foco paraalgum outro controle. Use qualquer controle que faça sentido ter foco em seguida. Uma escolha lógica é definir o foco paraalguma caixa de texto isso édepois de o botão. Visualmente, isso pareceria o mesmo se alguém "tabular" nessa caixa de texto, para torná-lo a entrada ativa. Outra boa alternativa é definir o foco para oprimeira caixa de texto No formulário. [Editando a resposta para esclarecer isso.] ToolmakerSteve
Observe que a propriedade [TabStop] do botão de configuraçãofalse, embora corresponda ao pedido do OP de ter o botão "nunca atraia o foco do teclado", faria a formainutilizável por usuários somente de teclado. Isso não é necessário em uma tela sensível ao toque, e se um teclado pode ser anexado, isso não deve ser feito, uma vez que violapadrões de acessibilidade. Eu recomendonão fazendo isso. ToolmakerSteve
E se houvesse mais de duas caixas de texto? r.hamd
0

Crie personalizadoButton classe comFocusable propriedade, conjuntoFocusable parafalse

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

mas desliga o controleSelectable estilo:

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

Perguntas relacionadas