“窗口”;"丁",;使用ctrl+时播放声音;文本框中的A(C#)

“窗口”;"丁",;使用ctrl+时播放声音;文本框中的A(C#),c#,textbox,keydown,C#,Textbox,Keydown,创建一个支持“ctrl+a”(全选)的文本框非常简单,方法是在Control设置为True时,在文本框的KeyDown事件中监听“a”键。当满足此条件时,文本框执行如下调用: textBox1.Select(0, textBox1.Text.Length); textBox1.ScrollToCaret(); “全选”功能运行得很好,只是在使用应用程序时,当我在文本框中实际键入ctrl+A时,我听到了windows的“叮当”声。我不知道为什么。叮当声表示发生了错误,所以我猜这行代码就是导致问题

创建一个支持“ctrl+a”(全选)的文本框非常简单,方法是在Control设置为True时,在文本框的KeyDown事件中监听“a”键。当满足此条件时,文本框执行如下调用:

textBox1.Select(0, textBox1.Text.Length);
textBox1.ScrollToCaret();
“全选”功能运行得很好,只是在使用应用程序时,当我在文本框中实际键入ctrl+A时,我听到了windows的“叮当”声。我不知道为什么。

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

textBox1.Select(0, textBox1.Text.Length);
因为它是0计数,所以您确实希望滚动到
textBox1.Text.Length-1
。(不过我有点猜测。正如Daniel所说,这个功能已经内置了……不需要实现!)


编辑-文本框处于多行模式时会出现问题(如上所述)。请按照链接找到问题的修复方法。

至少在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;
    }
}

文本框支持此功能。你不需要实施它@丹尼尔:不确定你的系统,但在我的系统上,CTRL+A不能使用
TextBox
。可能重复的
Select()
方法会在内部调整无效的选择长度,因此没有错误。@Jaroslav-已更新。我发现答案是这样的。修复了我在计算机上的测试项目中遇到的问题。即使使用
multiline=false
,这种情况也会发生。我知道至少有20个人经历过同样的行为。。。不过,这可能是个bug。您正在处理哪个事件
KeyDown
KeyPress
KeyUp