当textfield为空时用户按退格按钮时防止出现错误消息

时间:2014-01-11 14:25:17

标签: c#

每当用户按下空文本字段上的退格按钮时,将显示以下错误消息:

  

类型'System.ArgumentOutOfRangeException'的未处理异常   发生在mscorlib.dll中。附加信息:StartIndex不能   小于零。

如果文本字段为空,我怎样才能忽略退格按钮。

   private void btnback_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.Text = remainTxt.Text.Remove(remainTxt.Text.Length - 1, 1);
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.Text = totalTxt.Text.Remove(totalTxt.Text.Length - 1, 1);
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.Text = paidTxt.Text.Remove(paidTxt.Text.Length - 1, 1);
        }
    }

3 个答案:

答案 0 :(得分:1)

您必须检查文本长度是否不为0. Text.Remove函数在处理程序中的第一个参数获得-1作为第一个参数。这会导致抛出异常,因为这不是有效的索引。您应该将整个方法体包装在if ( remainTxt.Text.Length > 0 )

答案 1 :(得分:1)

听起来你正试图以错误的方式解决问题。您遇到的问题是您的代码在上运行某些逻辑之前没有检查文本框是否为空

在尝试从!string.IsNullOrEmpty(remainTxt.Text)属性中减去1之前,更改代码以检查是否Length(和其他人)。由于文本框为空,Length - 1为-1,确实超出范围。

答案 2 :(得分:1)

我会将删除最后一个字符操作抽象为一个防范空文本字段的函数

private void RemoveLast(TextBox tb) {
  if (tb.Text.Length > 0) { 
    tb.Text = tb.Text.Remove(tb.Text.Length - 1, 1);
  }
}

然后切换事件处理程序以使用该函数

private void btnback_Click(object sender, EventArgs e)
{
    if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        RemoveLast(remainTxt);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        RemoveLast(totalTxt);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        RemoveLast(paidTxt);
    }
}