29

Sorry for the long title, but I couldn't think of another way to put it.

I have this:

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

... in order to make pressing enter in the text box trigger the "submit" button. However, this also prevents shortcuts from going through. (not quite sure what it has to do with that, maybe only multi-key combos?)

ShortcutsEnabled is set to true.

Thanks in advance!

Md. Suman Kabir
  • 5,243
  • 5
  • 25
  • 43
Jonathan Chan
  • 2,355
  • 3
  • 25
  • 38

5 Answers5

41

Can you not use AcceptButton in for the Forms Properties Window? This sets the default behaviour for the Enter key press, but you are still able to use other shortcuts.

L Y E S - C H I O U K H
  • 4,765
  • 8
  • 40
  • 57
Rob Cooper
  • 28,567
  • 26
  • 103
  • 142
  • I see! Thanks for clarifying this. I'm obviously new to C#, so simple things like this confuse me. Thanks! – Jonathan Chan Feb 06 '10 at 22:51
  • what if you want multiple controls to each accept enter, though, and not necessarily with a button for each? – Nyerguds Aug 09 '15 at 07:58
  • Nyerguds, read the answer below. Basically, setup triggers when each control gets focus to set the correct AcceptButton. I have all my "Leave" functions set the AcceptButton back to the OKbtn, not the null as the answer below suggests, but same same. – Owen Ivory Jul 19 '16 at 21:53
16

If you want the return to trigger an action only when the user is in the textbox, you can assign the desired button the AcceptButton control, like this.

    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
    }
Hadron
  • 161
  • 1
  • 3
14

You can Use KeyPress instead of KeyUp or KeyDown its more efficient and here's how to handle

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

hope it works

Mawardy
  • 3,618
  • 2
  • 33
  • 37
  • Can that be expanded for the event listeners of other controls than buttons? I can't seem to find any ListBox.PerformDoubleClick() to trigger its double-click action. – Nyerguds Aug 09 '15 at 08:03
  • Ah, nevermind. Easier to just call the underlying listener function. By the way... this code doesn't seem to work if the form has an AcceptButton set. – Nyerguds Aug 09 '15 at 08:11
1

You do not need any client side code if doing this is ASP.NET. The example below is a boostrap input box with a search button with an fontawesome icon.

You will see that in place of using a regular < div > tag with a class of "input-group" I have used a asp:Panel. The DefaultButton property set to the id of my button, does the trick.

In example below, after typing something in the input textbox, you just hit enter and that will result in a submit.

<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>
Guss Davey
  • 11
  • 1
  • 1
0

https://stackoverflow.com/a/16350929/11860907

If you add e.SuppressKeyPress = true; as shown in the answer in this link you will suppress the annoying ding sound that occurs.

Jay Brown
  • 139
  • 2
  • 13