Разбор текста из замаскированного текстового поля

У меня есть приложение WinForms, написанное на C#

До недавнего времени в моих формах было много текстовых полей, в которых пользователь вводил финансовые суммы. Первоначально я не включал никакую форму маски, и всякий раз, когда мне нужно работать со значениями, введенными пользователями, я разбираю текст из каждого поля в десятичные значения с помощью Decimal.Parse;

Однако меня попросили сделать текстовые поля похожими на финансовые суммы, т. Е. 1050,75 фунтов стерлингов, а не 1050,75. Поэтому я начал менять текстовые поля на MaskedTextBox и выдавал им маску £#,##0,00. Однако теперь каждая попытка разобрать текст из MaskedTextBoxes выдает ошибку "Входная строка не в правильном формате".

Как получить входные данные пользователя из MaskedTextBox и проанализировать в десятичном формате для работы?

Должен ли я вообще использовать MaskedTextBox или есть другой способ показать форматирование финансового типа на форме, не затрагивая метод Decimal.Parse?

3 ответа

Решение

Когда вы получаете значение из Maskedtextbox, оно принимает значение как £#,##0,00 . поэтому символ не будет преобразован в десятичную. Попробуйте удалить символ и преобразовать значение в десятичное. лайк

        string val= maskedTextBox1.Text.Replace("£","");
        Decimal.Parse(val);

Вы можете использовать параметр формата с AllowCurrencySymbol. Он должен соответствовать символу валюты культуры. Этот код я конвертировал из VB, поэтому я надеюсь, что он правильный.

Application.CurrentCulture = New Globalization.CultureInfo("en-GB");
Decimal.Parse("£12,345.67", Globalization.NumberStyles.AllowThousands | Globalization.NumberStyles.AllowDecimalPoint | Globalization.NumberStyles.AllowCurrencySymbol);

Также, посмотрите этот вопрос, если вы не хотите менять культуру: Проблема с анализом текста валюты в десятичный тип

Ты можешь проверить MaskFull чтобы увидеть, правильно ли введен текст, а затем применить антимаску (удалив то, что добавляет ваша маска).

К сожалению, я не знаю об автоматическом разоблачении. Но вы можете сделать что-то вроде:

if(maskedTextBox1.Mask)
{
    var enteredText = maskedTextBox1.SubString(1).Replace(",", null); // remove pound symbol and commas
    // ... parse as with normal TextBox
}
Другие вопросы по тегам