我有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
中
答案 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块中添加处理程序,以防止出现问题。