2009-07-28 45 views
19

これは私のコードです: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; 
    } 
} 

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

答えて

29

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

あなただけのバックスペースをチェックしたい場合は、おそらくで逃げることができます:ドキュメントから

if (e.KeyChar == (char)8 && ...) 
+0

ちょうどそれをテストしました。(char)8との比較が実際に機能します。 –

+11

'(b)'( 'char 8) 'より' '\ b''を使う方が良いかもしれません。 –

+5

@AlexHumphrey私はさらに良いと思う '(char)Keys.Back' – Antonio

1

KeyPressイベントが非文字キーによって提起されていません。ただし、非文字キーはKeyDownおよびKeyUpイベントを発生させます。

この1整数のみにTextBoxを制限するが、コントロールキー可能にする:ダブルスにテキストボックスをrestricingため

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

これを、可能にする私はたくさん次の二つのセグメントを使用

+4

場合は、ドキュメントが間違っています。私はKeyPressイベントから8をテストしましたが、それは間違いなく発生しました。 –

+0

+1「キーアップ」イベントと「キーダウン」イベントがあるときに、なぜ型キャストを使うのか、私はEd S.に完全に満足しています。通常の場合、 '型変換 'を避けるべきです。他の選択肢がないときは '型変換 'を使うべきです。 –

17

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; 
4

バックスペースキーは、KeyPressイベントで発生しません。だから、KeyDownイベントやkeyUpイベントイベントでそれをキャッチし、SuppressKeyPressプロパティを設定する必要があり、バックスペースキーテキストボックスにテキストを変更防ぐために本当です!

あなたが追加する必要が
private void txtAdd_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Back) 
    { 
     e.SuppressKeyPress = true; 
    } 
} 
+0

Keysを使用するための+1 –

+1

バックスペースでキー押しイベントが発生する – Antonio

-1
private void Keypressusername(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = !(char.IsLetter(e.KeyChar)); 
    if (char.IsControl(e.KeyChar)) 
    { 
     e.Handled = !(char.IsControl(e.KeyChar)); 
    } 
    if (char.IsWhiteSpace(e.KeyChar)) 
    { 
     e.Handled = !(char.IsWhiteSpace(e.KeyChar)); 
    } 
} 
+0

このコードサンプルは質問に答える可能性がありますが、回答に必要な説明を含めることをお勧めします。現時点では、この回答は将来の読者にとって価値がほとんどないものです。 –

0
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; 
    } 
    } 
4

を(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; 
      } 
     } 
関連する問題