每当我尝试清除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 :(得分:1)
错误将生成,因为您没有将任何值转换为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="";
}
答案 1 :(得分: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);
}
答案 2 :(得分:0)
可能发生的事情是clear事件正确触发,然后你的onChange事件也会触发,向你的代码发送一个空字符串,这是异常的来源。
我建议使用Try ... Catch块来代替你的代码,因为异常的来源更清晰,或者@cody grey建议只使用调试器。