Текстовое поле 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)), даже если я ввел символ, который не содержится в массиве.