2010-11-02 116 views
2

我正在使用C#并在Winform程序上工作,当用户在文本框中单击并按下退格按钮时我想清除文本框而不是删除一个角色在一次。我怎样才能做到这一点?C#当按下退格按钮时,如何清除文本框

非常感谢 史蒂夫

+6

这听起来不像一个从可用性的角度来看,这是一个好主意。我可能会导致用户混淆,因为通常的行为是只删除一个字符。 – 2010-11-02 10:47:04

+3

您可能会考虑让文本框中的所有文本在获得输入焦点时都会显示为选中状态,以便只需按一下退格键(或任何键,如果他们刚开始键入)都将清除文本框。这与大多数Web浏览器的地址栏一样,因此用户会发现它很熟悉。它仍然可以完成你想要的任务,同时仍然保留了在必要时一次删除一个字符的能力。 – 2010-11-02 10:59:46

回答

9

你可以订阅KeyPress事件并清除发送的文本:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 8) 
    { 
     ((TextBox)sender).Clear(); 
    } 
} 
1

订阅KeyDown事件和按键等于退格键,你就必须清除文本框。

2

如果是外地用户将进入文本,请考虑到一些用户(比如我)有天然倾向于在打字错误时击退Backspace。我会觉得很烦人,如果这样做会清除我刚输入的所有内容。

作为替代方案,如果他们执行Shift-Backspace,则可以添加此行为。下面的代码将在按住Shift键Backspace键插入符之前删除一切,但也将离开仅删除选择的预期行为,如果用户选择的文本:

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    // if shift-backspace is pressed and nothing is selected, 
    // delete everything before the caret 
    if (e.Shift && e.KeyCode == Keys.Back && textBox1.SelectionLength == 0) 
    { 
     textBox1.Text = textBox1.Text.Substring(textBox1.SelectionStart); 
     e.Handled = true; 
    } 
} 
1
private void button1_Click(object sender, EventArgs e) 
{ 
    int textlength = textBox1.Text.Length; 
    if (textlength > 0) 
    { 
     textBox1.Text = textBox1.Text.Substring(0, textlength - 1); 
    } 
    textBox1.Focus(); 
    textBox1.SelectionStart = textBox1.Text.Length; 
    textBox1.SelectionLength = 0; 
}