Member 12667863 Ответов: 2

Как сделать класс textbox, который принимает только числовые данные в приложении WPF?


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

    ///double
    ///
    if (!char.IsDigit(e.Text, e.Text.Length - 1) && e.Text != ".")
    {
        e.Handled = true;
    }

    if ((e.Text == ".") && (txtage.Text.IndexOf('.') > -1))
    {
        e.Handled = true;
    }
}


Что я уже пробовал:

{
///целое число
//if (!char.IsDigit(электронная.Текст, электронная.Текст.Длина - 1))
//{
// e. Handled = true;
//}

///двойной
///
если (! char.IsDigit(электронная.Текст, электронная.Текст.Длина - 1) и усилитель; & электронная.Текст != ".")
{
е.Обработано = истина;
}

если ((например.Текст == "".) усилитель и;&Ампер; (txtage.Текст.Метод indexOf('.') &ГТ; -1))
{
е.Обработано = истина;
}
}

Philippe Mori

Вы повторяете одно и то же дважды.

2 Ответов

Рейтинг:
16

turanian

Вы можете использовать это.

private void textBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
     {
         bool approvedDecimalPoint = false;

         if (e.Text == ".")
         {
             if (!((TextBox)sender).Text.Contains("."))
                 approvedDecimalPoint = true;
         }

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


Member 12667863

но я хочу сделать класс такого типа текстового поля.

turanian

Извините за недоразумение.Я добавляю новое решение.

turanian

Работает ли решение 2 для вас?

Member 12667863

его подчеркивание красным TextCompositionEventArgs (отправитель объекта, * TextCompositionEventArgs* e)
вот так!^

Рейтинг:
1

turanian

Привет,
Я создаю класс Class1 : TextBox и вызываю Class1. PreviewTextInput из MainWindow для вашей ситуации.

using System.Windows;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            textBox.Text = "";
            textBox.PreviewTextInput += new System.Windows.Input.TextCompositionEventHandler(Class1.PreviewTextInput);
        }
    }
}


using System.Windows.Controls;
using System.Windows.Input;

namespace WpfApplication1
{
    public class Class1 : TextBox
    {
        public static void PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            bool approvedDecimalPoint = false;

            if (e.Text == ".")
            {
                if (!((TextBox)sender).Text.Contains("."))
                    approvedDecimalPoint = true;
            }

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


Member 12667863

его дает ошибку на публичный статический пустота *previewtextinput встречает*(объект отправителя, *TextCompositionEventArgs* е)