web-dev-qa-db-fra.com

C #: Comment faire en appuyant sur Entrée dans une zone de texte déclenche un bouton, tout en permettant aux raccourcis tels que "Ctrl + A" de passer?

Désolé pour le long titre, mais je ne pouvais pas penser à une autre façon de le dire.

J'ai ceci:

    private void textBoxToSubmit_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            buttonSubmit_Click((object)sender, (EventArgs)e);
        }
    }

... afin de faire appuyer sur enter dans la zone de texte, déclencher le bouton "soumettre". Cependant, cela empêche également les raccourcis de passer. (vous ne savez pas exactement ce que cela a à voir avec cela, peut-être seulement des combos multi-touches?)

ShortcutsEnabled est défini sur true.

Merci d'avance!

27
Jonathan Chan

Ne pouvez-vous pas utiliser AcceptButton dans la fenêtre Propriétés des formulaires? Cela définit le comportement par défaut pour le Enter appuyez sur la touche, mais vous pouvez toujours utiliser d'autres raccourcis.

39
Rob Cooper

Si vous souhaitez que le retour déclenche une action uniquement lorsque l'utilisateur est dans la zone de texte, vous pouvez affecter le bouton souhaité au contrôle AcceptButton, comme ceci.

    private void textBox_Enter(object sender, EventArgs e)
    {
        ActiveForm.AcceptButton = Button1; // Button1 will be 'clicked' when user presses return
    }

    private void textBox_Leave(object sender, EventArgs e)
    {
        ActiveForm.AcceptButton = null; // remove "return" button behavior
    }
15
Hadron

Vous pouvez utiliser KeyPress au lieu de KeyUp ou KeyDown, c'est plus efficace et voici comment gérer

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            e.Handled = true;
            button1.PerformClick();
        }
    }

esperons que ça marche

12
Mawardy

Vous n'avez pas besoin de code côté client si cela est ASP.NET. L'exemple ci-dessous est une zone de saisie boostrap avec un bouton de recherche avec une icône de police impressionnante.

Vous verrez qu'au lieu d'utiliser une balise <div> régulière avec une classe de "input-group", j'ai utilisé un asp: Panel. La propriété DefaultButton définie sur l'id de mon bouton, fait l'affaire.

Dans l'exemple ci-dessous, après avoir tapé quelque chose dans la zone de texte d'entrée, vous appuyez simplement sur Entrée et cela entraînera une soumission.

<asp:Panel DefaultButton="btnblogsearch" runat="server" CssClass="input-group blogsearch">
<asp:TextBox ID="txtSearchWords" CssClass="form-control" runat="server" Width="100%" Placeholder="Search for..."></asp:TextBox>
<span class="input-group-btn">
    <asp:LinkButton ID="btnblogsearch" runat="server" CssClass="btn btn-default"><i class="fa fa-search"></i></asp:LinkButton>
</span></asp:Panel>
1
Guss Davey