在文本框 (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 SP3 和 Windows 窗体 上,我也会遇到同样的情况(真的很烦人)。
即使没有任何事件处理程序,也会播放“叮”的声音。多行和其他设置(预览、输入键等)也不起作用。
我使用这个事件处理程序来摆脱它:
public static void TextBoxSelectAll(object sender, KeyEventArgs e)
if (e.KeyData == (Keys.Control | Keys.A))
((TextBox)sender).SelectAll();
e.SuppressKeyPress = true;
e.Handled = true;
【讨论】:
您正在处理哪个事件?KeyDown
、KeyPress
或 KeyUp
?【参考方案2】:
叮的一声表示发生了错误,所以我猜测是这行代码导致了问题:
textBox1.Select(0, textBox1.Text.Length);
因为它是 0 计数,所以您真的想滚动到 textBox1.Text.Length - 1
。 (不过,我有点猜测。而且,正如 Daniel 所说,这个功能已经内置......无需实现它!)
编辑 - 当文本框处于多行模式时,会出现问题(如 here 所述)。点击链接以解决问题。
【讨论】:
Select()
方法在内部调整了无效的选择长度,因此没有错误。
@Jaroslav - 已更新。在 SO 上找到了答案。在我的机器上的一个测试项目中为我解决了这个问题。
即使在使用 multiline=false
时也会发生这种情况。我知道至少有 20 个人有同样的行为……不过,这可能是一个错误。以上是关于在文本框 (C#) 中使用 ctrl+A 时播放 Windows“叮”声的主要内容,如果未能解决你的问题,请参考以下文章