2016-06-30 14 views
1

多くのユーザー入力を持つプログラムを作成しています。ほとんどのユーザー入力は、数値入力のみである必要があるテキストボックスになります。TextBoxメソッドで番号を確認する方法#

現在、値を取得するためにTextChangedメソッドを使用していますが、その値に基づいて他のボタンやチェックボックスを表示/非表示にしています。

私は、ボックスに入力されているかどうかをチェックする、ユーザーが誤った入力をしたり、行った変更を修正したり、メッセージボックスを作成したりするのを防ぐ方法を作成したり、彼らの入力が無効であることを彼らに伝えます。

現在私は2つの方法で作業していますが、お互いに機能しません。

私は、入力テキストをDoubleに変換するが、バックスペースボタンを利用して数字を再入力すると、私は問題に遭遇していますが、入力を認識しません。他のテキストボックス/チェックボックスを開く/閉じる)。これは、TextChangedメソッドで動作します。

私は、PreviewTextInputとKeyDownメソッドを使用する正規表現セットを持っています。これは、特定の入力を許可しないとかなりうまく動作しますが、textchangedメソッドでは機能しません(少なくとも、それを指す方法は分かりません)。

私は(別名リアルタイムにチェック)各エントリのためのボタンを押すように私のユーザーを必要としない、テキストボックスへの入力をチェックするために実行可能な方法を作成する方法についてのガイダンスを必要としています。

おかげ

+1

が、これはWinFormsのアプリケーションです:

そして、あなたのtxtAddLable_TextChanged方法は次のようbwのでしょうか?はいの場合、NumericUpDownコントロールを使用しないのはなぜですか? – Steve

+0

これはWPFです。私の謝罪は具体的ではないということです。 – Duck

+0

これはMicrosoftのサンプルです:https://msdn.microsoft.com/en-us/library/ms229644(v=vs.100).aspx MaskedTextBoxを使用することも考えられます –

答えて

0

私は本当に完全に理解できませんでしたが、私によると、無効な入力を取るためにテキストボックスを防ぐためにしようとしていると同時に、あなたはこのように行うことができますので、TextChangedメソッドを使用します:

<TextBox Name="txtAddNumber" TextChanged="txtAddLable_TextChanged" PreviewTextInput="txtAddNumber_PreviewTextInput" /> 

そしてtxtAddNumber_PreviewTextInput方法:

private void txtAddNumber_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    char c = Convert.ToChar(e.Text); 
    if (!Char.IsLetter(c)) 
     e.Handled = false; 
    else 
     e.Handled = true; 
    base.OnPreviewTextInput(e); 
} 

そして、あなたは、あなたがこのように行うことができ、入力のベースに事のいくつかのエラーメッセージの種類を処理したい場合:

private void txtAddNumber_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    char c = Convert.ToChar(e.Text); 
    if (!Char.IsLetter(c)) 
    { 
     // Put your Logic here according to requirement 
     e.Handled = false; 
    } 
    else 
    { 
     // Put your Logic here according to requirement 
     e.Handled = true; 
    } 
    base.OnPreviewTextInput(e); 
} 

そして

e.Handled = falseは、入力が数値で、e.Handled = trueが入力非数値であることを意味することを意味します。

private void txtAddLable_TextChanged(object sender, TextChangedEventArgs e) 
{ 
     // Logics here... 
} 
1

あなたはボタンの使用NumericUpDownまたはそのサブクラスのうちの1つを介して減少/値を大きくできるようにする必要がある場合。

テキストボックスが必要な場合は、PreviewKeyDown()イベントを処理する必要があります。押された有効/無効キーを手動で確認する必要があります。無効なキーを押すと、キーダウンイベントがトンネリングしないように、e.Handled = true;を設定します。

2

私は、これはあなたが探しているものだと思います。
Binding.Validation

Intの場合、Intにバインドするのと同じくらい簡単です。

+0

私はこの機能の実装の周りに私の頭を包んで苦労しています。私は前書きします、私はC#とXAMLで非常に新しいですが、私は自分のベルトの下にいくつかのJavaクラスを持っています。彼らが例を挙げている構造は、私が実際にやっていることに完全には変換されないので、私と一緒に裸ですが、WPFでどのように実装されているのか分かりません。 – Duck

+0

彼らはおそらく適切な構造を使用しているので、私はあなたがコピーすることをお勧めします。 WPFでは、パブリックプロパティを持つクラスのオブジェクトにバインドするのがベストプラクティスです。変更されたイベントでは、ベストプラクティスではありません。 https://msdn.microsoft.com/en-us/vstudio/ms753962(v=vs.92).aspx – Paparazzi

+0

各テキストボックスには本質的に独自のクラスが必要ですか? – Duck

関連する問題