Подтвердить что ты не робот

Как заставить текстовое поле принимать только числа в 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;
    }
}
4b9b3361

Ответ 1

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);
    }

Ответ 3

Вы можете привязать свое текстовое поле к свойству зависимости и внутреннему методу проверки свойства зависимостей, вы можете проверить, возвращает ли int.tryparse значение true, но в противном случае вы можете пойти по умолчанию или вы можете reset значение.

Или вы можете использовать WPF ValidationRules, чтобы узнать, когда значение изменено. После изменения вы можете применить логику для inout validaiton.

Или вы можете использовать IDataError Info для проверки.

Ответ 4

В WPF значения кода ключа отличаются от обычных значений e.keychar winforms,

В событии 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, а также клавишу .Back

Надеюсь, что это помогает, радует!

Ответ 5

бит расширенной версии 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;
        }
    }

это будет проверять дублирование. (десятичная метка) и не допускает только. (десятичная метка)

Ответ 6

//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; }

Ответ 7

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" />

Ответ 8

Я считаю, что вы ищете PreviewTextInput событие.