Dan*_*nny 2 c# string unhandled input formatexception
我已经创建了一个程序,并对它进行了大量测试,我收到一条错误消息"FormatException未处理,输入字符串格式不正确".当我将任一文本框留空并按下"完成"按钮但如果我输入低于0或高于59的任何值 - 这是我想要允许的数字范围,它会正常工作.我怎么办?当盒子空白时,我没有收到这个错误?这是'btnFinished'背后的代码:
private void btnFinished_Click(object sender, EventArgs e)
{
if (lstCyclists.SelectedIndex >= 0)
{
Cyclists currentCyc = (Cyclists)lstCyclists.SelectedItem;
//Decalre the minsEntered and secsEntered variables for txtMins and textSecs
int minsEntered = int.Parse(txtMins.Text);
int secsEntered = int.Parse(txtSecs.Text);
try
{
//If the status of a cyclist is already set to Finished, show an error
if (currentCyc.Finished.ToString() == "Finished")
{
MessageBox.Show("A time has already been entered for this cyclist");
}
else
{
//if a minute lower than 0 or greater than 59 has been entered, show an error
if (minsEntered < 0 || minsEntered > 59)
{
MessageBox.Show("You can only enter a minute up to 59");
}
//if a second lower than 0 or greater than 59 has been entered, show an error
else if (secsEntered < 0 || secsEntered > 59)
{
MessageBox.Show("You can only enter a second up to 59");
}
else
{
//otherwise, set the status to finished and update the time
currentCyc.Finished = "Finished";
currentCyc.FinishedHours(Convert.ToInt32(txtHours.Text));
currentCyc.FinishedMins(Convert.ToInt32(txtMins.Text));
currentCyc.FinishedSecs(Convert.ToInt32(txtSecs.Text));
//pass the parameter to the scoreboard class to display it in lblCyclistsFinished
lblCyclistsFinished.Text += "\n" + finishLine.Scoreboard(currentCyc);
//add to the number of cyclists finished
Cyclists.NumFinished++;
lblnumFinished.Text = Cyclists.NumFinished.ToString();
//update the details box
DisplayDetails(currentCyc);
txtHours.Clear();
}
}
}
catch
//make sure all the time fields have been entered, otherwise show an error message
{
MessageBox.Show("Please ensure all time fields have been entered");
}
}
else
//make sure a cyclist has been selected when pressing "Finished", otherwise show an error message
{
MessageBox.Show("You must select a cyclist");
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,看看这些行:
int minsEntered = int.Parse(txtMins.Text);
int secsEntered = int.Parse(txtSecs.Text);
Run Code Online (Sandbox Code Playgroud)
当文本框为空白时,您希望那些人返回什么?
只是不要求int.Parse空文本框.例如:
int minsEntered = txtMins.Text == "" ? 0 : int.Parse(txtMins.Text);
// Ditto for seconds
Run Code Online (Sandbox Code Playgroud)
当然,如果你输入非数字的东西,这仍然会爆炸.您可能应该使用int.TryParse:
int minsEntered;
int.TryParse(txtMins.Text, out minsEntered);
Run Code Online (Sandbox Code Playgroud)
在这里我忽略了结果TryParse,并且它将保留minsEntered为0 - 但如果你想要一个不同的默认值,你会使用类似的东西:
int minsEntered;
if (!int.TryParse(txtMins.Text, out minsEntered))
{
minsEntered = 5; // Default on parsing failure
}
Run Code Online (Sandbox Code Playgroud)
(或者你可以在这种情况下显示错误信息...)