web-dev-qa-db-ja.com

keypressイベントでバックスペースキーを受け入れるにはどうすればよいですか?

これは私のコードです:

private void txtAdd_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar)) && !(char.IsWhiteSpace(e.KeyChar)))
    {
        e.Handled = true;
    }
}

文字、数字、スペースを入力できますが、バックスペースを入力することはできません。私を助けてください。

25
Buloy

!Char.IsControl (e.KeyChar)を使用して、バックスペースキーやクリップボードキーボードショートカットなどのすべての「制御」文字が除外されるようにします。

バックスペースをチェックしたいだけなら、おそらくで逃げることができます:

if (e.KeyChar == (char)8 && ...)
33
Matt Hamilton

私は次の2つのセグメントを使用します。

これはテキストボックスを整数のみに制限しますが、コントロールキーを許可します:

if (Char.IsDigit(e.KeyChar)) return;
if (Char.IsControl(e.KeyChar)) return;
e.Handled = true;

これは、テキストボックスを2倍に制限し、1つの「。」を許可するためのものです。制御キーのみを許可:

if (Char.IsDigit(e.KeyChar)) return;
if (Char.IsControl(e.KeyChar)) return;
if ((e.KeyChar == '.') && ((sender as TextBox).Text.Contains('.') == false)) return;
if ((e.KeyChar == '.') && ((sender as TextBox).SelectionLength == (sender as TextBox).TextLength)) return;
e.Handled = true;
18
Wanabrutbeer

文に!(char.IsControl(e.KeyChar))を追加する必要があります。

private void txtNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar)) && !(char.IsControl(e.KeyChar)) && !(char.IsWhiteSpace(e.KeyChar)))
            {
                e.Handled = true;
            }
        }
5
Gaby

BackspaceキーはKeyPressイベントによって発生しません。このため、KeyDownイベントまたはKeyUpイベントでキャッチし、SuppressKeyPressプロパティをtrueに設定して、Backspaceキーでテキストボックスのテキストが変更されないようにする必要があります。

private void txtAdd_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Back)
    {
        e.SuppressKeyPress = true;
    }
}
3
Huy Nguyen

ドキュメントから:

KeyPressイベントは、文字以外のキーによって発生しません。ただし、文字以外のキーはKeyDownイベントとKeyUpイベントを発生させます。

1
Ed S.
private void KeyPressNameSurname(object sender, KeyPressEventArgs e)
 {
     if (char.IsPunctuation(e.KeyChar) || char.IsSymbol(e.KeyChar) || char.IsDigit(e.KeyChar) )
     {
        e.Handled = true;
        myTextBox.Text = "Not Valid";
        myTextBox.Visible = true;
     }
     else
     {
        myTextBox.Visible = false;
     }
  }
0