C#:如何在文本框中按下回车键触发按钮,但仍然允许“Ctrl+A”等快捷键通过?

Posted

技术标签:

【中文标题】C#:如何在文本框中按下回车键触发按钮,但仍然允许“Ctrl+A”等快捷键通过?【英文标题】:C#: How to make pressing enter in a text box trigger a button, yet still allow shortcuts such as "Ctrl+A" to get through? 【发布时间】:2011-01-13 19:26:57 【问题描述】:

对不起,标题太长了,但我想不出另一种说法。

我有这个:

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

...为了使在文本框中按回车触发“提交”按钮。但是,这也会阻止快捷方式通过。 (不太清楚这与它有什么关系,也许只有多键组合?)

ShortcutsEnabled 设置为 true。

提前致谢!

【问题讨论】:

没有复制,我没想到会有。你需要 e.SuppressKey = true 来停止哔哔声。 至于标题:您可以将尚未完成的部分放在问题正文的第一句中。无论如何,第一句话现在是题外话了。 【参考方案1】:

您不能在表单属性窗口中使用AcceptButton 吗?这会设置 Enter 按键的默认行为,但您仍然可以使用其他快捷键。

【讨论】:

我明白了!感谢您澄清这一点。我显然是 C# 的新手,所以像这样简单的事情让我感到困惑。谢谢! 没问题 - 乐于助人:) 如果您希望多个控件每个都接受输入,但不一定每个都有一个按钮? Nyerguds,阅读下面的答案。基本上,当每个控件获得焦点以设置正确的 AcceptButton 时,设置就会触发。我的所有“离开”功能都将 AcceptButton 设置回 OKbtn,而不是下面的答案建议的 null,但相同。【参考方案2】:

如果您希望仅当用户在文本框中时返回触发操作,您可以将所需的按钮分配给 AcceptButton 控件,如下所示。

    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
    

【讨论】:

如果是用户控件,您可以使用ParentForm.AcceptButton【参考方案3】:

您可以使用 KeyPress 而不是 KeyUp 或 KeyDown 更有效 以下是处理方法

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

希望有效果

【讨论】:

可以为按钮以外的其他控件的事件侦听器扩展吗?我似乎找不到任何 ListBox.PerformDoubleClick() 来触发其双击操作。 啊,没关系。更容易调用底层的监听器函数。顺便说一句...如果表单设置了 AcceptButton,则此代码似乎不起作用。【参考方案4】:

如果使用 ASP.NET,则不需要任何客户端代码。 下面的示例是一个带有搜索按钮的 boostrap 输入框,该按钮带有一个很棒的字体。

您会看到,我使用了一个 asp:Panel,而不是使用带有“input-group”类的常规

标签。 DefaultButton 属性设置为我的按钮的 id,就可以了。

在下面的示例中,在输入文本框中输入内容后,您只需按 Enter 即可提交。

<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>

【讨论】:

【参考方案5】:

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

如果您添加e.SuppressKeyPress = true;,如此链接中的答案所示,您将抑制出现的烦人的叮当声。

【讨论】:

以上是关于C#:如何在文本框中按下回车键触发按钮,但仍然允许“Ctrl+A”等快捷键通过?的主要内容,如果未能解决你的问题,请参考以下文章

用户在文本框中按下回车的 JQuery 事件?

当用户在文本框中按下回车键时如何不关闭表单

在文本框中按 Enter 时如何触发 HTML 按钮?

在位置访问权限中按下允许按钮后如何执行操作?

javascript 文本框中,判断回车键触发事件 兼容IE&FireFox

如何在 C# 中按下停止按钮来停止耗时过长的 UI 线程 [关闭]