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”等快捷键通过?的主要内容,如果未能解决你的问题,请参考以下文章