2017-02-28 47 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

是的,例如。問題在於,如果郵政編碼存在或不存在,您會錯過系統應該如何工作的邏輯。 –