Как я могу использовать int.Попробуйте проанализировать в инструкции сравнения C # WPF?

#c# #wpf #tryparse #integerupdown

#c# #wpf #попробуйте проанализировать #integerupdown

Вопрос:

У меня есть два элемента управления 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 , в IntegerUpDown и это IntegerUpDown имеет старое значение, например 3 , поэтому, когда он перемещаетмышь вне элемента управления IntegerUpDown должна принимать 3 вместо символа, введенного пользователем, без отображения какого-либо сообщения или какого-либо исключения.

Примечание: я бы не хотел использовать minUpdown.Value в этом случае по какой-то причине, потому что значение, которое я получаю при запуске события, является старым значением, а не значением в режиме реального времени.

Комментарии:

1. Итак, вы сравниваете resultmin < resultmax , но что, если один из них не сможет выполнить синтаксический анализ? Вы хотите, чтобы сравнение возвращало true или false или делало что-то совершенно другое?

2. Да, я хотел бы сравнить resultmin , и resultmax , если один из них не удался, он должен вернуть значение по умолчанию (предыдущее значение) и удалить символ, введенный пользователем, это то, что мне нужно

3. Почему вы не используете Value свойство, которое возвращает an int? ? И вам не нужно сбрасывать предыдущее значение в вашем обработчике событий. Элемент управления делает это за вас, не так ли?

Ответ №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
    }
}
 

Комментарии:

1. Спасибо, первый работает, уже был ответ, и он был удален (но не для пустой строки, он по-прежнему выдает то же исключение), для второго ответа получить его невозможно lastMinValue , я расскажу вам почему. Потому что пользователь может ввести значение в первый раз и изменить другое значение, а затем ввести символ, поэтому в этом случае я могу получить только первое значение, а не предыдущее, и это проблема для меня

2. Я не понимаю. Я предполагаю, что ваш IntegerUpDown инициализирован определенным значением, например ‘0’. Затем пользователь вручную вводит «100», затем вводит «a». Когда пользователь выводит свою мышь из-под контроля, «a» следует заменить на «100». В чем здесь проблема?

3. А для нулевого значения (обратите внимание на разницу между пустой строкой и нулевым значением) вам нужно использовать оператор с нулевым условным значением ( ? символ), который возвращается null раньше, чтобы метод цепочки не вызывался для нулевого объекта. Смотрите обновленный ответ.

4. Я приму ваш ответ, но я увидел проблему с этим событием, поэтому я изменил всю работу на кнопку подтверждения, MouseLeave_Event это нехорошо, потому что это непрактично и может работать, только если мышь находится внутри элемента IntegerUpDown управления, что, если она снаружи ?? => событиене будет запущено, поэтому в этом случае это вызовет большую проблему для пользователя.

5. вы также можете прочитать о focus lost событии, обычно это событие широко используется для подтверждения введенных значений во многих технологиях пользовательского интерфейса.