Как заставить текстовое поле принимать только числа в WPF?

По моему смещенному мнению C является лучшей точкой для запуска. Язык является маленьким, это - функции высокого уровня, повсеместны, и низкоуровневые функции позволяют Вам изучить машину.

я нашел Краткая информация C Плюс, 5-й Выпуск очень полезный как начинающий программист почти ни с каким опытом программирования. Это не принимает предшествующего опыта программирования, забава читать и покрывает C подробно (включая последний стандарт C99).

25
задан Anatoliy Nikolaev 16 July 2013 в 04:24
поделиться

8 ответов

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
ответ дан 28 November 2019 в 21:47
поделиться

Вы можете использовать правило проверки ... http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

Или создать собственное текстовое поле для маскировки http://rubenhak.com/?p=8

8
ответ дан 28 November 2019 в 21:47
поделиться

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

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

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

1
ответ дан 28 November 2019 в 21:47
поделиться

В 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
ответ дан 28 November 2019 в 21:47
поделиться
//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
ответ дан 28 November 2019 в 21:47
поделиться

расширенная версия Хасиба Уз Замана

     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
ответ дан 28 November 2019 в 21:47
поделиться
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
ответ дан 28 November 2019 в 21:47
поделиться

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

-1
ответ дан 28 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: