防止其他方法在以前的方法中满足的条件下运行
本文关键字:方法 满足 条件下 运行 其他 | 更新日期: 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()中,但如果有人能帮助我使用这一方法,我应该能够修复其余的问题:)
您可以从内部函数中throw
和exception
,并从按钮的函数中捕获它,类似于以下内容:
// 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;
}