我的问题是当用户点击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()和testIfTextBoxOnesMinimumIsMet()中也会出现此问题,但如果有人可以帮我解决这个方法,我应该能够解决其余问题:)
答案 0 :(得分:1)
您似乎需要一些其他变量来跟踪您是否遇到过错误。为此,您可以定义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;
}
答案 1 :(得分:1)
所以,如果我正确理解这一点,如果文本框包含数值,文本框1符合最小值,文本框2符合最小值,则需要displayResultToUser()然后resetOrClose()。
如果是这种情况,你可以使用3种方法checkIfNumericalIalmerical(),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;
}
答案 2 :(得分:1)
您可以从内部函数中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
会离开该功能而无需进一步处理其他内容。