Есть ли способ изолировать условие в условном операторе ИЛИ, который не прошел тест, и передать его другому методу? - PullRequest
0 голосов
/ 30 апреля 2019

У меня интересный вопрос для всех вас.

Я работаю над проектом на C # и подумал, что было бы неплохо добавить текстовые поля, чтобы изменить цвет, если пользователь отправит нечисловое значение.У меня уже есть расширенный условный оператор Or, настроенный на проверку нечисловых значений, как таковой:

public void catchNonNumeric()
{
   int parsedValue;
   if (!int.TryParse(txtBxStudentInput.Text, out parsedValue) || 
       !int.TryParse(txtBxPCInput.Text, out parsedValue) || 
       !int.TryParse(txtBxStuTourInput.Text, out parsedValue) || 
       !int.TryParse(txtBx203A.Text, out parsedValue) || 
       !int.TryParse(txtBx203F.Text, out parsedValue))
   {
     checker = false;
   }
   else
   {
     checker = true;
   }
}

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

Это не острая необходимость, просто что-то, что я думаю, было бы здорово!Спасибо всем за помощь!

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Один из способов сделать это - создать List<TextBox> элементов управления, которые вы хотите проверить, а затем зациклить их, чтобы проверить условие.Если один из них выходит из строя, установите checker на false и ForeColor этого на Red:

public void CatchNonNumeric()
{
    // Start our checker flag variable to true
    checker = true;

    // Create a list of TextBox controls that we want to validate
    var textBoxes = new List<TextBox> 
        {txtBxStudentInput, txtBxPCInput, txtBxStuTourInput, txtBx203A, txtBx203F};

    // Validate each TextBox
    foreach (var textBox in textBoxes)
    {
        int parsedValue;

        if (int.TryParse(textBox.Text, out parsedValue))
        {
            // Reset the color to black (or whatever the default is) if it passes
            textBox.ForeColor = Color.FromKnownColor(KnownColor.WindowText);
        }
        else
        {
            // Otherwise set the color to red and our checker flag to false
            checker = false;
            textBox.ForeColor = Color.Red;
        }
    }          
}
0 голосов
/ 30 апреля 2019

Текстовое поле в WPF получит это по умолчанию, если вы свяжетесь с числом.Вы получите отклонение данных вместе со стилем пользовательского интерфейса.

В противном случае вы, безусловно, можете использовать Func для делегирования запроса.В качестве входных данных Func принимает любое число универсальных выражений и предоставит желаемый вывод (в данном случае логический).

var functionDelegate = new Func<string, bool>(text =>
{
    int parsedValue;
    return int.TryParse(text, out parsedValue);
}


//Usage
var isStudentInputNumercic = functionDelegate(txtBxStudentInput.Text);
...