Как я могу использовать int.TryParse в инструкции сравнения C# WPF?
У меня есть два элемента управления IntegerUpDown, и мне нужно сравнить в
MouseLeave_Event
, Я использовал
int.Parse
но когда я попробовал этот код, у меня возникло исключение:
if (int.Parse(minUpdown.Text.ToString()) <
int.Parse(maxUpdown.Text.ToString()))
{
// do something
}
Исключение:
Input string was not in a correct format
Я искал в Stackoverflow решение, чтобы избежать этого исключения, я увидел, что лучшее решение - использовать
int.TryParse
, но я не знаю, как использовать его в инструкции сравнения, которая возвращает логическое значение.
Сценарий, который следует применить, выглядит следующим образом:
- У меня уже есть
IntegerUpdown_MouseLeave_Event
и код, который я опубликовал, упоминается в мероприятии, поэтомуintegerUpdown
элементы управления могут быть пустыми или иметь значение, поэтому, если пользователь пытается ввести символ (не число), напримерa
в и это старое значение, например3
, поэтому, когда он перемещает мышь за пределы элемента управления,IntegerUpDown
должен принимать 3 вместо символа, введенного пользователем, без отображения каких-либо сообщений или исключений.
Примечание : по какой-то причине я не хотел бы использовать minUpdown.Value в этом случае, потому что значение, которое я получил при срабатывании события, является старым значением, а не значением в реальном времени.
1 ответ
Ответ на первый вопрос «Как использовать TryParse и сравнивать значения» выглядит так:
int.TryParse(minUpdown.Text?.ToString(), out var min);
int.TryParse(maxUpdown.Text?.ToString(), out var max);
if (min < max)
{
// do something
}
TryParse возвращает логическое значение, которое сообщает, была ли попытка успешной или нет.
Теперь, если вы хотите, чтобы ваше представление заменило неправильное значение последним правильным значением, вам необходимо сохранить его в каком-либо поле и обновить при необходимости, например:
private int lastMinValue;
private int lastMaxValue;
private void IntegerUpdown_MouseLeave_Event(object source, EventArgs args)
{
// use last value as a default for min and max
int min = lastMinValue;
int max = lastMaxValue;
// try to update min and max
if (int.TryParse(minUpdown.Text?.ToString(), out min))
{
lastMinValue = min;
}
if (int.TryParse(maxUpdown.Text?.ToString(), out max))
{
lastMaxValue = max;
}
if (min < max)
{
// do something
}
}