有没有办法在测试失败的OR条件语句中隔离条件并将其传递给另一个方法?

时间:2019-04-30 14:55:46

标签: c# textbox conditional

我对大家有一个有趣的询问。

我正在研究C#项目,并且认为如果用户提交非数字值,文本框可以更改颜色,这将是一件很不错的事情。我已经设置了扩展的或条件语句来检查非数字,例如:

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 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是为要验证的控件创建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;
        }
    }          
}

答案 1 :(得分:0)

如果绑定到数字,则默认情况下WPF中的文本框将获得此文本框。您将获得数据拒绝以及UI样式。

否则,您当然可以使用Func委派查询。 Func接受任意数量的泛型作为输入,并将提供所需的输出(在这种情况下为布尔值)。

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


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