防止其他方法在以前的方法中满足的条件下运行

本文关键字:方法 满足 条件下 运行 其他 | 更新日期: 2023-09-27 18:21:53

我的问题是,当用户单击myButton时,程序运行得非常好。但是,如果用户在第一个文本框中输入小于3的值,则用户将看到一个消息框,说明该值必须大于3米。如果单击"确定",myButton中的下一个方法仍将运行,结果消息框也将显示。

我试着四处寻找,使用Nested For Loops来解决我的这个问题,但没能让它们发挥作用(很可能是我的错误)。我也不喜欢使用Goto,因为它并不是很好的编程实践。当然,如果你愿意,你可以告诉我其他的:)。

// Button
private void myButton_Click(object sender, EventArgs e)
        {
            checkIfNumericalValue();
            testIfTextBoxOnesMinimumIsMet();
            testIfTextBoxTwosMinimumIsMet();
            displayResultToUser();
            resetOrClose();
        }
// Textbox One
public void testIfTextBoxOnesMinimumIsMet() 
        {
            if (length < 3) 
            {
                MessageBox.Show("length must be greater than 3 metres");
            }
        }

如果您能提供帮助,我们将不胜感激。这也是我在Visual Studio 2012上第二次尝试使用C#。别担心,这与我10年级的学校教育无关,因为我的学校没有编程科目。这个问题也发生在testIfTextBoxOnesMinimumIsMet()和testIftextBoxOnesMminimumIsmet()中,但如果有人能帮助我使用这一方法,我应该能够修复其余的问题:)

防止其他方法在以前的方法中满足的条件下运行

您可以从内部函数中throwexception,并从按钮的函数中捕获它,类似于以下内容:

// Button
private void myButton_Click(object sender, EventArgs e)
{
    try
    {
        checkIfNumericalValue();
        testIfTextBoxOnesMinimumIsMet();
        testIfTextBoxTwosMinimumIsMet();
        displayResultToUser();
        resetOrClose();
    }
    catch (ArgumentException ex)
    {
        // The error message we defined at the exception we threw
        MessageBox.Show(ex.Message);
    }
}
// Textbox One
public void testIfTextBoxOnesMinimumIsMet() 
{
    if (length < 3) 
    {
        throw new ArgumentException("Length must be greater than 3 meters.");
    }
}

另一种选择是在你的按钮内处理验证,如下所示:

// Button
private void myButton_Click(object sender, EventArgs e)
{
    checkIfNumericalValue();
    if (length < 3) 
    {
        MessageBox.Show("Length must be greater than 3 meters.");
        return;
    }
    testIfTextBoxTwosMinimumIsMet();
    displayResultToUser();
    resetOrClose();
}

上面发生的情况是return将离开该函数,而不进一步处理任何其他内容。

因此,如果我正确理解这一点,如果文本框包含数值,文本框1满足最小值,文本框2符合最小值,则需要显示ResultToUser(),然后重新设置OrClose()。

如果是这样的话,你可以让3个方法checkIfNumericalValue()、testIfTextBoxOnesMinimumIsMet()和testIfTextBoxTwosMinimumIsMet()根据最小条件返回一个bool,然后写这样的东西:

private void myButton_Click(object sender, EventArgs e)
{
    if (checkIfNumericalValue() && testIfTextBoxOnesMinimumIsMet(Convert.ToInt32(txtBoxOne.Text)) && testIfTextBoxTwosMinimumIsMet(Convert.ToInt32(txtBoxTwo.Text)))
    {
        displayResultToUser();
        resetOrClose();
    }
}
public bool testIfTextBoxOnesMinimumIsMet(int length)
{
    if (length < 3)
    {
        MessageBox.Show("length must be greater than 3 metres");
        return false;
    }
    return true;
}

您似乎需要一些其他变量来跟踪是否遇到错误。要做到这一点,可以定义一个bool noErrors变量,如果没有错误,则应该从错误检查方法返回一个布尔值True,否则为False。这样你就知道自己是否遇到了任何问题。

最后,在运行任何其他方法之前,您应该检查errrorsFound的状态。

例如:

// Button
private void myButton_Click(object sender, EventArgs e)
{
    bool noErrors = 
        isNumericalValue() &&
        textBoxOnesMinimumIsMet() &&
        textBoxTwosMinimumIsMet();
    if (noErrors)
    {
        displayResultToUser();
        resetOrClose();  // I'm not sure if this should happen regardless of errors?
    }        
}
// Textbox One
public bool textBoxOnesMinimumIsMet() 
{
    if (length < 3) 
    {
        MessageBox.Show("length must be greater than 3 metres");
        return false;
    }
    return true;
}