У меня есть. Net
приложение с простым text box
которое пользователю необходимо добавить с номером до 15 цифр. Если число Length меньше 15, я хочу добавить перед номером ввода Leading Zeros. Например, если пользователь вставляет номер 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
Вы можете сделать это в событии 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, точно так же, как предосторожность против чего-то не так.
Это потому, что ваша длина текста постоянно изменяется, и, таким образом, int addZeroes = 15 - radTextBoxNum.Text.Length
постоянно увеличивается.
Вы будете сталкиваться с проблемами, если используете событие TextChanged
. Попробуйте вместо этого использовать Validated
событие (когда поле выходит):
private void radTextBoxNum_Validated(object sender, EventArgs e)
{
radTextBoxNum.Text = radTextBoxNum.Text.PadLeft(15, '0');
}
radTextBoxNum.Text = newValue.PadLeft(15, '0');