Форматирование текстового поля (номера телефонов, номера мобильных телефонов, электронные письма)

#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" .

Вот документация:

https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.mask (v = против 110).aspx

Есть много других свойств, 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. Почему вы должны сказать, что это не работает? приведите мне пример ввода, который вы вводите, и желаемый результат.