2016-08-25 18 views
0

私はTextBoxですが、数字のみにしたいと考えています。したがって、私はグーグルで見つかったthis私はすでに多くの助けstackoverflowのポスト。しかし、私は数字の唯一のテキストボックスに20の下に何かを入力すると警告を表示します。最初に、私はイベントOnTextInputを試しましたが、成功しなかったので、数値のものと同じイベントで処理しようとしましたOnPreviewTextInput。私は両方に同じコードを使用しました。数値のテキストボックスの数値を制御する

if (!char.IsDigit(e.Text, e.Text.Length - 1)) 
{ 
    var text = e.Text; 
    int num; 

    var success = int.TryParse(text, out num); 
    if (!success) 
     return; 

    if (num <= 20) 
    { 
     if (MessageBox.Show("Are you sure you want to go underneath 20?", 
          "... You sure?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == 
         MessageBoxResult.Yes) 
          e.Handled = true; 

     else 
     { 
      num++; 
      textBox.Text = num.ToString(); 
     } 
    } 

       e.Handled = true; 
} 
+0

あなたは数字が20を下回ってはならないと言っていますが、次に比較します:num <= 20これには20が含まれます。テキストボックスが "20"を保持しても大丈夫ならば、その比較の=記号。 (このコメントはあなたのタイトルとあなたのコードが完全に一致していないためです) – Tyler

+0

はい私は20をまだokにしたい – John

+0

この投稿はあなたにも役立つと思います:http://stackoverflow.com/questions/2587602/textbox- value-changed TextBoxのTextChangedイベントについて説明していますので、おそらく次のようなことができます。 - TextChangedでTextBox値を取得し、数値であることを確認します。それが20以上であることを確認してください(または、20より小さい場合) – Tyler

答えて

1

使用TextChanged Handler は、それが変化したときに、その後、フィルタを作るキャッチします。あなたの代わりにKeyDownイベントを処理しないのはなぜ

private void yourTextBox_TextChanged(object sender, EventArgs e) 
{ 
    if (!char.IsDigit(e.Text, e.Text.Length - 1)) 
     { 
      var text = e.Text; 
      int num; 

      var success = int.TryParse(text, out num); 
      if (!success) 
       return; 

      if (num <= 20) 
      { 
       if (
        MessageBox.Show("Are you sure you want to go underneath 20?", 
         "... You sure?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == 
        MessageBoxResult.Yes) 
        e.Handled = true; 
       else 
       { 
        num++; 
        textBox.Text = num.ToString(); 
       } 
      } 

      e.Handled = true; 
     } 
    } 
+0

私が全く忘れてしまったことは、誰かが今75%を書く度に7も処理されるという事実でした。したがって、予告なく数字を入力することはできません。 :-O – John

+0

@ジョンあなたが 'yourTextBox.Text.Length> 1' – Pikoh

+0

@Pikohの場合、入力が3であれば処理できません。これは禁止されています。 – John

1

:実装後

ことができ、このようになりますか?

private void txtNumeric_KeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = !char.IsDigit(e.KeyChar); 
    if (Int32.Parse(sender.Text) <= 20) 
     { 
      if (
       MessageBox.Show("Are you sure you want to go underneath 20?", 
        "... You sure?", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == 
       MessageBoxResult.Yes) 
       e.Handled = true; 
      else 
      { 
       num++; 
       textBox.Text = num.ToString(); 
      } 

} 
+0

明らかに存在しないので – John

+1

残念ですが、WPFタグが表示されませんでした。 'KeyDown'を使用するように更新されました。 – DNKROZ

関連する問題