2017-09-11 13 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

このコードを試してみてください あなたはINT32に何も値を変換するためgenereateとなります。これらの関数呼び出しのいずれにも「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イベントがトリガされ、例外が発生しているコードに空の文字列を送ります。

try ...でコードを囲むことをお勧めします。例外の発生源がより明確になるように、または@codyグレーでデバッガを使用することを推奨します。

+1

Try/Catchブロックは、例外の発生元を明確にしません。何かがあれば、彼らはそれを難読化する。デバッガを使用すると、例外の原因を簡単に見つけることができます。 –

1

エラーは、このコードはあなたの問題を再現していること方法はありません

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=""; 
} 
関連する問題