通过文本框TextChanged事件填充带前导零的数字

时间:2014-10-29 16:08:19

标签: c# .net

我有Net个简单text box的应用程序,用户需要添加最多15位的数字。 如果数字长度小于15,我想在输入数字前面加零之前添加。 例如,如果用户插入号码1002我希望text box自动添加000000000001002,那么我会尝试通过我的text box TextChanged event

private void radTextBoxNum_TextChanged(object sender, EventArgs e)
{
    string str = "";
    if (radTextBoxNum.Text.Length < 15)
    {
        int currentlength = radTextBoxNum.Text.Length;
        int addZeroes = 15 - radTextBoxNum.Text.Length;
        for (int i = 0; i < addZeroes; i++)
        {
            str += "0";
        }
    }

    string val = radTextBoxNum.Text;
    radTextBoxNum.Text = "";
    radTextBoxNum.Text = str + val;
}

所以我的问题是插入一个数字后我得到了这个错误:

  

类型'System.StackOverflowException'的未处理异常   发生在System.Windows.Forms.dll

2 个答案:

答案 0 :(得分:0)

那是因为你的文字长度不断变化,因此int addZeroes = 15 - radTextBoxNum.Text.Length不断增加。

如果您使用TextChanged事件,则会继续遇到问题。请尝试使用Validated事件(退出字段时):

private void radTextBoxNum_Validated(object sender, EventArgs e)
{
    radTextBoxNum.Text = radTextBoxNum.Text.PadLeft(15, '0');
}

答案 1 :(得分:0)

可以在TextChanged事件中执行此操作,只要您阻止事件内发生的更改再次调用事件,这就是导致StackOverflowException的原因。

private void radTextBoxNum_TextChanged(object sender, EventArgs e) {
  radTextBoxNum.TextChanged -= radTextBoxNum_TextChanged;
  string text = radTextBoxNum.Text.TrimStart('0');
  radTextBoxNum.Text = text.PadLeft(15, '0');
  radTextBoxNum.Select(radTextBoxNum.TextLength, 0);
  radTextBoxNum.TextChanged += radTextBoxNum_TextChanged;
}

您可以使用简单的表单级变量来完成此操作,而不是删除和添加处理程序。此外,最好将代码放在Try ... Catch中......最后,您可以在Finally块中添加处理程序,以防止出现问题。