2017-09-11 42 views
0

每當我嘗試清除textBox2時,都會收到一條錯誤消息。我該如何解決這個問題?無法使用按鈕清除文本框

private void textBox2_TextChanged(object sender, EventArgs e) 
    { 
     string HexKey = this.textBox2.Text; 
     if(textBox2.Focused) 
     int key = Convert.ToInt32(HexKey, 16); 
    } 

private void button2_Click_1(object sender, EventArgs e) 
    { 
     textBox2.Clear(); 
    } 

[錯誤]: System.ArgumentOutOfRangeException:「索引超出範圍。必須是非負數且小於集合的大小。 參數名:的startIndex」

[解決方法]:

private void textBox2_TextChanged(object sender, EventArgs e) 
    { 
     string HexKey = this.textBox2.Text; 
     if(textBox2.Focused) //add this line in 
     int key = Convert.ToInt32(HexKey, 16); 
    } 
+0

嘗試沒有辦法,這個代碼重現您的問題。這兩個函數調用都沒有'startIndex'參數。 –

回答

0

Firzanah, 當清除TextBox2中,TextChanged事件將觸發。由於此時文本框中不會有任何內容,因此當您嘗試將任何內容轉換爲int32時都會發生錯誤。爲了解決這個問題,添加一個if(textBox2.Focused)條件的變化事件,或者更好的,只是檢查你所得到的是開始與一個int:

private void textBox2_TextChanged(object sender, EventArgs e) 
     { 
      int n; 
      bool isNumeric = int.TryParse(textBox2.Text, out n); 
      if (!isNumeric) return; 
      string HexKey = textBox2.Text; 
      int key = Convert.ToInt32(HexKey, 16); 
     } 
0

什麼是有可能發生的是,明確事件被觸發正確的,然後你的onChange事件也觸發,發送一個空字符串給你的代碼,這是異常來自哪裏。

我建議圍繞你的代碼嘗試......捕捉塊的方式,異常的來源更清晰或作爲@cody灰色建議只需使用調試器。

+1

Try/Catch塊不會使例外的來源更加清晰。如果有的話,他們混淆它。調試器很容易讓你找到異常的來源。 –

1

錯誤會genereate因爲你沒有什麼值轉換爲Int32和 請使用此代碼

private void textBox2_TextChanged(object sender, EventArgs e) 
{ 
    int n,key; 
    if (!int.TryParse(txtBox2.Text, out n)) 
     return; 
    else 
     key = Convert.ToInt32(txtBox2.Text, 16); 
} 

private void button2_Click_1(object sender, EventArgs e) 
{ 
    textBox2.Text=""; 
}