#c# #textbox #format #string-formatting
#c# #текстовое поле #форматирование #форматирование строки
Вопрос:
Я хотел бы знать, как преобразовать ввод текстового поля в разные форматы. Я попытался использовать формат.String() поскольку это «решение», которое я нашел в Интернете после проведения некоторых исследований, но для меня это не закончилось хорошо.
private void RegHomePhoneTBox_TextChanged(object sender, EventArgs e)
{
string s = RegHomePhoneTBox.Text;
double sAsD = double.Parse(s);
RegHomePhoneTBox.Text = string.Format("{0:###-####}", sAsD).ToString();
}
Это был блок кода, который я использовал, и он просто продолжал выдавать ошибку.
Необработанное исключение типа ‘System.FormatException’ произошло в mscorlib.dll Дополнительная информация: Входная строка была в неправильном формате.
Комментарии:
1. Каким будет ваше значение sAsD? что-то вроде этого 2222222
2. Я думал об использовании sAsD для ввода текста моего текстового поля. Например, 3443434, затем отформатируйте его как 344-3434.
3. Вместо события TextChanged попробуйте свой код в событии Leave или попробуйте использовать элемент управления MaskedTextBox
4. Я проверю событие. Причина, по которой я это делаю, заключается в том, что я избегаю MaskedTextBox .
5. Событие leave работает для меня, но это не так, как я хотел, чтобы это сработало. Я хочу отформатировать его во время процесса ввода, а не после.
Ответ №1:
Я бы посоветовал вам использовать MaskedTextBox
. Это работает так же, как обычное текстовое поле, но пользователь вынужден вводить текст в определенном формате.
В вашем конкретном случае просто установите Mask
для свойства значение "000-0000"
.
Вот документация:
Есть много других свойств, MaskedTextBox
которые очень полезны, например MaskCompleted
.
Ответ №2:
Попробуйте это:
private void RegHomePhoneTBox_TextChanged(object sender, EventArgs e)
{
string s = RegHomePhoneTBox.Text;
if (s.Length == 7)
{
double sAsD = double.Parse(s);
RegHomePhoneTBox.Text = string.Format("{0:###-####}", sAsD).ToString();
}
if (RegHomePhoneTBox.Text.Length > 1)
RegHomePhoneTBox.SelectionStart = RegHomePhoneTBox.Text.Length;
RegHomePhoneTBox.SelectionLength = 0;
}
Комментарии:
1. Проверьте это еще раз.
2. Я попробую еще раз, сэр. Спасибо за терпение.
3. Просто попробуйте ввести «111111111111» и посмотреть, что получилось
4. Попробовал, спасибо за помощь. Я мог бы немного придерживаться этого, пока искал желаемое решение. : D
5. Почему вы должны сказать, что это не работает? приведите мне пример ввода, который вы вводите, и желаемый результат.