web-dev-qa-db-ja.com

WPFでテキストボックスに数値のみを強制する方法

ユーザーがTextBoxに数値のみを入力できるようにしたい。

私はこのコードを手に入れました:

private void txtType1_KeyPress(object sender, KeyPressEventArgs e)
{
     int isNumber = 0;
     e.Handled = !int.TryParse(e.KeyChar.ToString(), out isNumber);
}

しかし、私はtextbox_KeyPressイベントとe.KeyChar WPFの使用中。

WPFのソリューションは何ですか?

Edit:

私は解決策を作りました!

private void txtName_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    CheckIsNumeric(e);
}

private void CheckIsNumeric(TextCompositionEventArgs e)
{
    int result;

    if(!(int.TryParse(e.Text, out result) || e.Text == "."))
    {
        e.Handled = true;
    }
}
26
Hasib Uz Zaman
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
    {
        char c = Convert.ToChar(e.Text);
        if (Char.IsNumber(c))
            e.Handled = false;
        else
            e.Handled = true;

        base.OnPreviewTextInput(e);
    }
17
Niki Nikpour

検証ルールを使用できます... http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

または、独自のマスカブルテキストボックスを作成する http://rubenhak.com/?p=8

8
Phil Murray

テキストボックスを依存関係プロパティにバインドし、依存関係プロパティの検証メソッド内で、int.tryparseがtrueを返すかどうかを確認できます。それ以外の場合は、デフォルトを使用するか、値をリセットできます。

または、WPF ValidationRulesを使用して、値がいつ変更されたかを確認できます。変更したら、inout検証のロジックを適用できます。

または、検証にIDataError Infoを使用できます。

1
Haris Hasan

hasib Uz Zamanのビット拡張バージョン

     private void txtExpecedProfit_PreviewTextInput_1(object sender, TextCompositionEventArgs e)
    {
        CheckIsNumeric((TextBox)sender,e);
    }

    private void CheckIsNumeric(TextBox sender,TextCompositionEventArgs e)
    {
        decimal result;
        bool dot = sender.Text.IndexOf(".") < 0 && e.Text.Equals(".") && sender.Text.Length>0;
        if (!(Decimal.TryParse(e.Text, out result ) || dot )  )
        {
            e.Handled = true;
        }
    }

これは重複をチェックします。(小数点)および。(小数点)のみを許可しません。

0
Riyal MHH
//Call this code on KeyDown Event
if((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || (e.Key == Key.Back))
{ e.Handled = false; }
else if((e.Key >= Key.D0 && e.Key <= Key.D9))
{ e.Handled = false; }
else
{ e.Handled = true; }
0
suyog patil
private void shomaretextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
  // xaml.cs code
  if (!char.IsDigit(e.Text, e.Text.Length - 1))
    e.Handled = true;
}

XAMLで

<TextBox x:Name="shomaretextBox" 
         HorizontalAlignment="Left" 
         Height="28" 
         Margin="125,10,0,0" 
         TextWrapping="Wrap" 
         VerticalAlignment="Top" 
         Width="151" 
         Grid.Column="1"        
         TextCompositionManager.PreviewTextInput="shomaretextBox_PreviewTextInput" />
0
amin zare

WPFでは、キーコード値は通常のwinforms e.keychar値とは異なり、

テキストボックスのPreviewKeyDownイベントに、次のコードを追加します。

if ((e.key < 34) | (e.key > 43)) {
if ((e.key < 74) | (e.key > 83)) {
    if ((e.key == 2)) {
        return;
        }
    e.handled = true;
    }
}

これにより、ユーザーはNumpad0-Numpad9セクションとD0-D9およびキーにのみ数値を入力できます。戻る

よろしくお願いいたします。

0
George