2017-02-28 40 views
0

我有一个简单的Windows窗体应用程序使用具有两个文本框找到邮编/郊区名称的形式:无法提交与空的文本框形式(反向验证,并让它提交)

  1. 输入郊区名称
  2. 输入邮政编码

如果邮政编码(文本框)没有输入值的形式挂了,它不会屈从/返回值。尝试了一些东西,但仍然失败(FormatException是未处理的)。添加任何int值,它工作正常。

private void btnFind_Click(object sender, EventArgs e) 
{ 
    //DECLARE ARRAY 
    string[] arrSuburbName = new string[5]; 
    int[] arrSuburbPC = new int[5]; 

    //POPULATESUBURB NAME ARRAY 
    arrSuburbName[0] = "DEE WHY"; 
    arrSuburbName[1] = "SYDNEY"; 
    arrSuburbName[2] = "HURSTVILLE"; 
    arrSuburbName[3] = "BALMAIN"; 
    arrSuburbName[4] = "NORTH SYDNEY"; 

    //POPULATE POSTCODE ID ARRAY 
    arrSuburbPC[0] = 2099; 
    arrSuburbPC[1] = 2000; 
    arrSuburbPC[2] = 2220; 
    arrSuburbPC[3] = 2041; 
    arrSuburbPC[4] = 2060; 

    //VARIABLES 
    string inputSuburb = ""; 
    int inputPostCode = 0; 
    string msg = ""; 

    //INPUT 
    inputSuburb = txtInputSuburb.Text.Trim(); 
    inputPostCode = int.Parse(txtInputPostCode.Text); 


    //PROCESS 
    for (int i = 0; i < arrSuburbPC.Length; i++) 
    { 
     if (inputSuburb.ToUpper() == arrSuburbName[i]) 
     { 
      msg = "Postcode for " + arrSuburbName[i] + " is: " + arrSuburbPC[i]; 
      inputPostCode = 0; 
      break; //EXIT THE LOOP 
     } 
     else if (inputPostCode == arrSuburbPC[i]) 
     { 
      msg = "Postcode for " + arrSuburbName[i] + " is: " + arrSuburbPC[i]; 
      break; //EXIT THE LOOP 
     } 
     else 
     { 
      msg = "Postcode Not Found"; 
     } 
    } 

    //OUTPUT 
    lblResult.Text = msg; 
} 

enter image description here

+1

由于'txtInputPostCode.Text'中没有值,并且您正试图解析它,请在解析'textBox'是否具有任何值之前进行检查,然后解析它是否具有某些值。 –

+0

如果它是空的,你希望成为默认值'inputPostCode'?在这种情况下,您需要使用任何条件语句,如@ J.SMTBCJ15回答,并且您不能分析空对象。 –

回答

0

你为什么不使用Int.TryParse(...),而不是Int.Parse(...)?

Parse v. TryParse

0

你有

inputSuburb = txtInputSuburb.Text.Trim(); 
inputPostCode = int.Parse(txtInputPostCode.Text); 

但在你连接的UI画面你给OR,因此它可以发生,邮政编码是空的。

你需要改变你的代码逻辑。需要考虑的事项:

  1. 如果邮政编码为空,该怎么办? - >您是这种情况,现在
  2. 如果用户输入非数字,如“ABCD”

你的逻辑应该有一些验证。例如使用尝试捕获构造。

也许你还应该考虑用户NumericUpDown控制?

+0

在评论/建议之后,我将不得不更多地考虑这一点。 简单片段添加一些验证的任何链接将不胜感激?如果C#有类似“必需”的东西,那就酷吧。 1.工作出逻辑 2.测试如果任一文本框具有值(使用一个或另一个) 3.如果邮政编码是空的解析值 - 验证+ =值 4.如果邮编具有字母字符返回messagebox/alert - validate 5.如果郊区有数字字符返回messagebox/alert - 验证 – Kerry7777

+0

Q.试试catch - 像这样? (e。 catch(InvalidCastException e) { if(e。数据== null) { throw; } else { //采取一些行动。 } } – Kerry7777

+0

是的,例如。问题在于,如果邮政编码存在或不存在,您会错过系统应该如何工作的逻辑。 –