2017-04-24 94 views
1

我有一個Windows窗體應用程序與3個文本框,如果第一個文本框中的文本是0,其他兩個文本框設置爲只讀,如果1,只有最後一個文本框是隻讀的,如果是2,所有文本框都是可編輯的。C#文本框只讀依賴於其他文本

我的代碼工作,但如果我輸入一個值,然後改變它的程序崩潰,我該如何解決這個問題?

這裏是我的第一個文本框(NumberOfTusks)的代碼,它根據值更改(Tusk1Length)和(Tusk2Length)的只讀屬性。

private void NumberOfTuskstxt_TextChanged(object sender, EventArgs e) 
    {    
      if (int.Parse(NumberOfTuskstxt.Text) == 0) 
      { 
       Tusk1Lengthtxt.Text = "N/A"; 
       Tusk1Lengthtxt.ReadOnly = true; 
       Tusk2Lengthtxt.Text = "N/A"; 
       Tusk2Lengthtxt.ReadOnly = true; 
      } 
      else if (int.Parse(NumberOfTuskstxt.Text) == 1) 
      { 
       Tusk1Lengthtxt.Text = ""; 
       Tusk1Lengthtxt.ReadOnly = false; 
       Tusk2Lengthtxt.Text = "N/A"; 
       Tusk2Lengthtxt.ReadOnly = true; 
      } 
      else 
      { 
       Tusk1Lengthtxt.Text = ""; 
       Tusk1Lengthtxt.ReadOnly = false; 
       Tusk2Lengthtxt.Text = ""; 
       Tusk2Lengthtxt.ReadOnly = false; 
      } 
    } 

如果我輸入1到NumberOfTusks然後將值更改爲2,代碼崩潰,並給了我這個「」類型的未處理的異常「System.FormatException」出現在mscorlib.dll「」 崩潰發生在我打退格後。我該如何解決這個問題,如果我改變它的值不會崩潰?

+1

您是否將其更改爲數字以外的內容?這肯定會導致你的問題。你至少應該使用'int.TryParse'而不是假設你的輸入每次都是一個整數。 –

+0

輸入保持爲int。它會崩潰,如果我從1更改爲2. –

+0

不,您的評論是錯誤的。輸入不保留int。您正在刪除過程中的某個角色,因此在將輸入設置爲2之前,它已成爲'「」'。 –

回答

1

這聽起來像當你打退格鍵,並切實做好

if (int.Parse("") == 0) 

那會是怎樣的投擲格式異常的錯誤發生。我建議你檢查像

if (!string.IsNullOrEmpty(NumberOfTuskstxt.Text)) 
{ 
    //Your existing code goes here 
} 
else 
{ 
    //Handle the blank textbox 
} 

能借助你可能還需要使用的TryParse,而不是解析,以防止非數字用戶輸入DangerZone's評論。

+0

謝謝,效果很好 –