按下按钮

时间:2017-09-11 03:43:37

标签: c# winforms textbox

每当我尝试清除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);
    }

3 个答案:

答案 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建议只使用调试器。