2017-03-01 5 views
0

私はプログラミングにはあまり慣れていませんが、主に趣味としてやっていますが、計算機。テキストボックスコンテンツ文字列ですが、テキストボックスに文字を入力するときに数字だけを入力したい

質問には、フォーカスの前に表示されている内容のテキストボックスがありますが、これを保存したいだけですが、数字だけを入力することもできます。

+0

申し訳ありませんが、フォーカスが文字列の前に内容が追加されているはずです。 –

+1

[WPFの数値入力のみを受け付けるようにするにはどうすればよいですか?](http://stackoverflow.com/questions/1268552/how-do-i-get-a-textbox-to-only-accept -numeric-input-in-wpf) –

+0

TextMode = "Number"をテキストボックスコントロールに入れることができます。これがあなたのために働くかどうか見てください。そうでない場合は、バリデーターを使用する必要があります。 – jmag

答えて

1

あなたTextBoxPreviewTextInputイベントハンドラを追加してみてください。

textBox1.PreviewTextInput += new TextCompositionEventHandler(textBox1_PreviewTextInput); 

入力した文字が数字の場合、イベントハンドラテストでテストします。

private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    if (!char.IsDigit(e.Text, e.Text.Length - 1)) 
     e.Handled = true; 
} 
+0

これは完全に機能しています。私の質問に答える時間を取ってくれてありがとう。 –

+0

それはいいです、@DanLuxford私は緑のチェックマークで私の答えを受け入れるならば幸せになります:-) – Gabriel

0

あなたはコードビハインドを使用しないようにしたい場合は、あなたが(例えばDigitsOnlyBehavior)クラスを作成することにより、行動に上記の解答を変換することができAttachedPropertyが含まれています。添付プロパティが設定されている場合、ビヘイビアクラスで定義され実装されているハンドラを登録します。

一つの短い例:

public static class MyBehavior 
{ 
    public static readonly DependencyProperty AllowOnlyDigitsProperty = DependencyProperty.RegisterAttached(
    "AllowOnlyDigits", typeof(bool), typeof(MyBehavior), new PropertyMetadata(default(bool), OnAllowOnlyDigitsChanged)); 

    private static void OnAllowOnlyDigitsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
    var textBox = d as TextBox; 
    if (textBox == null) return; 
    textBox.PreviewTextInput += PreviewTextBoxInput; 
    } 

    public static void SetAllowOnlyDigits(DependencyObject element, bool value) 
    { 
    element.SetValue(AllowOnlyDigitsProperty, value); 
    } 

    private static void PreviewTextBoxInput(object sender, TextCompositionEventArgs e) 
    { 
    var textbox = sender as TextBox; 

    if (!char.IsDigit(e.Text, e.Text.Length - 1)) 
     e.Handled = true; 
    } 


    public static bool GetAllowOnlyDigits(DependencyObject element) 
    { 
    return (bool) element.GetValue(AllowOnlyDigitsProperty); 
    } 
} 

あなたはPreviewTextBoxInput機能は主に、前のポストが示唆するものである見ることができるように。

あなたは今、このようなあなたのXAMLでその行動を「添付」することができます

<TextBox local:MyBehavior.AllowOnlyDigits="True" />  

それがプロパティの変更をサポートしていませんので、このソリューションは、完全には完了していない(それは毎回プロパティをハンドラをアタッチしますXAML経由で一度しか設定しないと仮定しています)。しかし、実行時にこの動作を変更したくない場合は、問題ありません。

+0

こんにちはマルクス。私は、上記の答えに行ってきました。単純な理由から、私の未熟なレベルの誰かにとってはそれほど難しくないように見えます。 –

+0

それも良いです。私がWPFを使用して会った多くの開発者は、ビューの「コードビハインド」内のコードを最小限に抑えようとします。 –

関連する問題