在文本框 (C#) 中使用 ctrl+A 时播放 Windows“叮”声

Posted

技术标签:

【中文标题】在文本框 (C#) 中使用 ctrl+A 时播放 Windows“叮”声【英文标题】:Windows "ding" sound plays when using ctrl+A in a textbox (C#) 【发布时间】:2011-03-10 21:56:31 【问题描述】:

创建一个支持“ctrl+A”(全选)的文本框非常简单,方法是在 Control 设置为 True 时侦听文本框的 KeyDown 事件以获取“A”键按下。当满足这个条件时,文本框会这样调用:

textBox1.Select(0, textBox1.Text.Length);
textBox1.ScrollToCaret();

“全选”功能运行良好,但在使用应用程序时,我在文本框中实际键入 ctrl+A 时会听到窗口“叮”的声音。我不知道为什么。

【问题讨论】:

TextBox 开箱即用地支持此功能。不需要你去实现! @Daniel:不确定您的系统,但在我的系统上,CTRL+A 不适用于TextBox Stop the Bell on CTRL-A (WinForms)的可能重复 【参考方案1】:

至少在 Windows XP SP3Windows 窗体 上,我也会遇到同样的情况(真的很烦人)。

即使没有任何事件处理程序,也会播放“叮”的声音。多行和其他设置(预览、输入键等)也不起作用。

我使用这个事件处理程序来摆脱它:

public static void TextBoxSelectAll(object sender, KeyEventArgs e)

    if (e.KeyData == (Keys.Control | Keys.A))
    
        ((TextBox)sender).SelectAll();

        e.SuppressKeyPress = true;
        e.Handled = true;
    

【讨论】:

您正在处理哪个事件? KeyDownKeyPressKeyUp?【参考方案2】:

叮的一声表示发生了错误,所以我猜测是这行代码导致了问题:

textBox1.Select(0, textBox1.Text.Length);

因为它是 0 计数,所以您真的想滚动到 textBox1.Text.Length - 1。 (不过,我有点猜测。而且,正如 Daniel 所说,这个功能已经内置......无需实现它!)

编辑 - 当文本框处于多行模式时,会出现问题(如 here 所述)。点击链接以解决问题。

【讨论】:

Select() 方法在内部调整了无效的选择长度,因此没有错误。 @Jaroslav - 已更新。在 SO 上找到了答案。在我的机器上的一个测试项目中为我解决了这个问题。 即使在使用 multiline=false 时也会发生这种情况。我知道至少有 20 个人有同样的行为……不过,这可能是一个错误。

以上是关于在文本框 (C#) 中使用 ctrl+A 时播放 Windows“叮”声的主要内容,如果未能解决你的问题,请参考以下文章

C#无法处理文本框的Ctrl+K事件

如何在C#中,文本框不能粘贴功能

C#文本框TextBox使用问题

C#限制文本框输入

C#窗体及控件的快捷键 设置

向chrome发送Ctrl+C时,不能获取选定的文本(C#)