Pytanie w sprawie keyboard, winforms, button, focus – Jak stworzyć winform z przyciskami, które nigdy nie przyciągną uwagi klawiatury

3

Mam kilka pól tekstowych na mojej winformie. Mam też kilka przycisków. Teraz, gdy piszę na jednym z takich pól tekstowych i klikam przycisk, fokus wejściowy jest tracony z pola tekstowego, a przycisk pobiera fokus klawiatury wejściowej. Oznacza to, że kursor jest tracony z pola tekstowego w momencie kliknięcia przycisku. Nie chcę tego zachowania. Chcę, aby moje pole tekstowe zachowywało kursor nawet po kliknięciu przycisku. Prawdziwa sytuacja polega na tym, że mam pole tekstowe i przyciski numeryczne, które mają być używane tylko z ekranu dotykowego.

Twoja odpowiedź

4   odpowiedź
0

Utwórz niestandardoweButton klasa zFocusable własność, zestawFocusable dofalse

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

aźnie ustawić fokusjakaś inna kontrola. Wybierz dowolną kontrolę, którą uważasz za sensowną, aby uzyskać ostrość po naciśnięciu przycisku. Na przykład ustaw fokus na TextBox, używając kodu takiego jak ten:

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

Zapobiegnie to skupieniu się przycisku po kliknięciu przycisku.

Ponadto ustaw swój przyciskTabStop właściwość na false.

Inne odpowiedzi sugerujące ustawienieCanFocus właściwość na false nie będzie działać, ponieważ ta właściwość jest tylko do odczytu dla przycisków.

co jeśli było więcej niż dwa pola tekstowe? r.hamd
Dobrze wiedzieć. Czy istnieją sposoby, aby zapobiec migotaniu i sprawić, że rozwiązanie będzie działać z więcej niż jednym TextBoxem? Alexandre
@ r.hamd - źle zrozumiałeś odpowiedź. W każdymprzycisk kliknij handler, ustaw ostrośćjakaś inna kontrola. Użyj jakiejkolwiek kontroli, aby sens był następny. Logicznym wyborem jest ustawienie ostrościjakieś pole tekstowe to jestpo przycisk. Wizualnie wyglądałoby to tak samo, gdyby ktoś „włożył” do tego pola tekstowego, aby uczynić go aktywnym wejściem. Inną dobrą alternatywą jest ustawienie ostrości napierwsze pole tekstowe Na formularzu. [Edycja odpowiedzi w celu wyjaśnienia tego.] ToolmakerSteve
Zauważ, że właściwość [TabStop] przycisku ustawień jest ustawiona nafalse, gdy pasuje do żądania OP, aby przycisk „nigdy nie przyciągał fokusa klawiatury”, tworzyłby formularzbezużyteczne dla użytkowników korzystających tylko z klawiatury. Nie jest to potrzebne na ekranie dotykowym, a jeśli klawiatura może być podłączona, nie należy tego robić, ponieważ narusza tostandardy dostępności. polecamnie robiąc tak. ToolmakerSteve
0

darzenia w ten sposób:

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

private void FocusTextBox()
{
    textBox.Focus();
}
</code>
co jeśli było więcej niż dwa pola tekstowe? r.hamd
9

który dziedziczy po standardowym, ale wyłączaSelectable styl:

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

Powiązane pytania