2017-08-02 10 views
2

TextBoxに数字(0〜9)のみを書きたいと思っています。 次のコードを使用して、数字以外の文字やその他の文字を書くのを防ぐのですが、TextBoxのスペースを使用することはできません。WPF TextBox no space allowed

private void CheckIsNumeric(TextCompositionEventArgs e) 
{ 
    int result; 

    if (!(int.TryParse(e.Text, out result))) 
    { 
     e.Handled = true; 
     MessageBox.Show("!!!no content!!!", "Error", 
         MessageBoxButton.OK, MessageBoxImage.Exclamation); 
    } 
} 

私は出回っ

if (Keyboard.IsKeyDown(Key.Space)) 
{ //...} 

のようなものを使用してみましたが、成功しませんでした。

ありがとうございました。

+0

私もそれを試しましたが、それはまたスペースを許しています。 – Morris

+0

重複した質問のアドレスで受け入れられた回答にコメントし、その問題をサポートしています: "[スペース]はPreviewTextInputイベントを発生させません"。どのイベントから 'CheckIsNumeric'メソッドを呼び出しますか? – dlatikay

+1

申し訳ありませんが、私はそれを見逃しているに違いありません。 問題になるのは、PreviewTextInputイベントを使用しています。 私はtextbox.Text.Replace( ""、 "")で私の問題をバイパスしました。だから今はすべてのスペースが削除され、私のために十分なものです。 – Morris

答えて

0

チェックの前にスペースを入れてください。スペースを入れてください。したがって、ユーザーは必要なだけスペースを取ることができ、何も変更しません。

private void CheckIsNumeric(TextCompositionEventArgs e) 
{ 
    int result; 
    string removedSpaces = e.Text.Replace(" ",""); 
    if (!(int.TryParse(removedSpaces, out result))) 
    { 
     e.Handled = true; 
     MessageBox.Show("!!!no content!!!", "Error", 
         MessageBoxButton.OK, MessageBoxImage.Exclamation); 
    } 
} 
+0

あなたの答えをありがとうが、これは何も変更されません。 PreviewTextInputイベントはスペースに反応しないと言われているので、私は全く異なるアプローチが必要です。 – Morris

0

あなたのテキストボックスのKeyPressイベント このコードを追加してください。

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) 
    { 
     e.Handled = true; 
    } 

    // If you want to allow decimal numeric value in you textBox then add this too 
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
    { 
     e.Handled = true; 
    } 
}