Gruja82 Ответов: 1

Текстовое поле Wpf должно содержать только цифры 0-9, входные данные должны быть ровно 9 символов длиной и не должны начинаться с нуля (0). Вот что я попробовал сделать.


private void textBoxPibPretraga_TextChanged(object sender, TextChangedEventArgs e)
        {
            var numbers = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; // array of allowed chars
            string unos = textBoxPibPretraga.Text;
            if (unos=="") // if input is empty string
            {
                var results = myContext.Dobavljaci.ToList(); // load all records
            }
            else
            {
                foreach (char slovo in unos)
                {
                    if (numbers.Contains(slovo)) // if array of allowed chars contains char in input
                    {
                        int myIndex = unos.IndexOf(slovo);
                        if (slovo=='0' & myIndex==0)    // if first character in tekst is 0
                        {
                            MessageBox.Show("PIB broj ne može početi sa 0!");
                            textBoxPibPretraga.Text = unos.Remove(myIndex, 1);
                            textBoxPibPretraga.CaretIndex = textBoxPibPretraga.Text.Length;
                        }
                        else
                        {
                            long mojPib = long.Parse(unos); // at this line when i type correct characters and then incorect character i get format exception
                            var results1 = (from c in myContext.Dobavljaci
                                            where c.PIB == mojPib
                                            select c).ToList();
                            grdDobavljaci.ItemsSource = results1;
                        }
                        if (unos.Length==9) // if input is exactly 9 characters long
                        {
                            long mojPib = long.Parse(unos);
                            var results1 = (from c in myContext.Dobavljaci
                                            where c.PIB == mojPib
                                            select c).ToList();
                            grdDobavljaci.ItemsSource = results1;
                        }
                        else
                        {
                            var results2 = myContext.Dobavljaci.ToList();
                            grdDobavljaci.ItemsSource = results2;
                        }
                    }
                    else
                    {
                        int myIndex = unos.IndexOf(slovo);
                        string message = "PIB broj ne može sadržati karakter " + "'" + slovo.ToString() + "'";
                        MessageBox.Show(message);
                        textBoxPibPretraga.Text = unos.Remove(myIndex, 1);
                        textBoxPibPretraga.CaretIndex = textBoxPibPretraga.Text.Length; 
                    }
                }
            }
            
        }


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

private void textBoxPibPretraga_TextChanged(object sender, TextChangedEventArgs e)
        {
            var numbers = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; // array of allowed chars
            string unos = textBoxPibPretraga.Text;
            if (unos=="") // if input is empty string
            {
                var results = myContext.Dobavljaci.ToList(); // load all records
            }
            else
            {
                foreach (char slovo in unos)
                {
                    if (numbers.Contains(slovo)) // if array of allowed chars contains char in input
                    {
                        int myIndex = unos.IndexOf(slovo);
                        if (slovo=='0' & myIndex==0)    // if first character in tekst is 0
                        {
                            MessageBox.Show("PIB broj ne može početi sa 0!");
                            textBoxPibPretraga.Text = unos.Remove(myIndex, 1);
                            textBoxPibPretraga.CaretIndex = textBoxPibPretraga.Text.Length;
                        }
                        else
                        {
                            long mojPib = long.Parse(unos); // at this line when i type correct characters and then incorect character i get format exception
                            var results1 = (from c in myContext.Dobavljaci
                                            where c.PIB == mojPib
                                            select c).ToList();
                            grdDobavljaci.ItemsSource = results1;
                        }
                        if (unos.Length==9) // if input is exactly 9 characters long
                        {
                            long mojPib = long.Parse(unos);
                            var results1 = (from c in myContext.Dobavljaci
                                            where c.PIB == mojPib
                                            select c).ToList();
                            grdDobavljaci.ItemsSource = results1;
                        }
                        else
                        {
                            var results2 = myContext.Dobavljaci.ToList();
                            grdDobavljaci.ItemsSource = results2;
                        }
                    }
                    else
                    {
                        int myIndex = unos.IndexOf(slovo);
                        string message = "PIB broj ne može sadržati karakter " + "'" + slovo.ToString() + "'";
                        MessageBox.Show(message);
                        textBoxPibPretraga.Text = unos.Remove(myIndex, 1);
                        textBoxPibPretraga.CaretIndex = textBoxPibPretraga.Text.Length; 
                    }
                }
            }
            
        }

ZurdoDev

В чем заключается ваш вопрос? Почему это не работает?

Gruja82

Смотрите комментарии в коде

ZurdoDev

Если вы получаете исключение формата, это означает, что все, что вы пытались отформатировать, не было в допустимом формате. Например, попытка отформатировать значение "слон" как дату не сработает. Но мы не можем запустить ваш код, чтобы увидеть, что не так, вы должны отладить его.

Gruja82

Я знаю. Например, если я попытаюсь преобразовать '25g' в int, он выдаст исключение формата. Моя проблема заключается в том, что если я сначала ввожу допустимые символы, например 25, а после этого " g " он выдает исключение. В кодексе не рассматривается предложение else типа 'if(numbers.Contains(slovo)), даже если я ввел символ, который не содержится в массиве.

1 Ответов

Рейтинг:
1

OriginalGriff

Используйте регулярное выражение:

^[1-9]\d{8}$

Сделаем это в одной строке кода...
if (Regex.Match(myTextBox.Text, @"^[1-9]\d{8}$", RegexOptions.None))
   {
   ...
   }