Windows Forms - настройка MaskedTextBox

Мне нужно использовать базовые функции MaskedTextBox. Я могу использовать 5-значную маску, но есть несколько вещей, которые я хочу изменить. Прямо сейчас коробка выглядит так:

MaskedTextBox

и есть две вещи, которые мне не нравятся. Во-первых, Prompt char, который является нижним _. Я удалил значение поля, чтобы оставить его пустым (как хотелось бы), но это дает ошибку - The property value is invalid. Так есть ли способ избавиться от этих подчеркиваний? Во-вторых, я использую это значение для одного из свойств моей сущности, которое имеет целочисленный тип, поэтому делаю преобразование:

if (txtNumOfAreas.Text != "")
            {
                string temp = txtNumOfAreas.Text;
                bool result = Int32.TryParse(temp, out convertValue);
                if (result)
                {
                    entity.AreasCnt = convertValue;
                }
                else
                {
                    MessageBox.Show(Resources.ERROR_SAVE, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
            else
            {
                entity.AreasCnt = null;
            }

который отлично работает, если кто-то не решит провести эксперименты и вставить что-то вроде _1__5_, тогда преобразование не удастся, но сначала я хотел бы сделать возможным записывать цифры только одну за другой. Так возможно ли это тоже?


person Leron_says_get_back_Monica    schedule 13.03.2013    source источник
comment
Небольшой поиск в Google поможет: SO и MSDN.   -  person bash.d    schedule 13.03.2013


Ответы (2)


Похоже, что ваш MaskedEdit - это больше проблем, чем стоит решать ваш конкретный круг проблем. Лучшим элементом управления может быть NumericUpDown.

Положительные стороны NumericUpDown:

  • Нет подсказок с подчеркиванием, от которых можно избавиться
  • Он принимает только числовой ввод
  • Таким образом, нет необходимости пытаться преобразовать значение. У вас всегда будет целое число
  • Установка свойств минимального и максимального значения обеспечивает автоматическую проверку ввода данных.
  • Provides multiple modes of data entry:
    • Typing
    • Нажатие кнопок вверх / вниз с помощью мыши
    • Вверх / вниз с помощью клавиатуры
  • Если хотите, вы можете полностью скрыть кнопки вверх / вниз: Элемент управления numericUpDown C # WinForms (удаление счетчика)
person Paul Sasik    schedule 13.03.2013
comment
@MichaelPerrenoud: Спасибо, +1 тоже за хороший ответ! - person Paul Sasik; 13.03.2013
comment
Привет, большое спасибо! Намного лучше, когда людей здесь нет, чтобы перерезать друг другу глотки, а просто пытаются помочь. - person Mike Perrenoud; 13.03.2013
comment
Да, вы правы, NumericUpDown гораздо лучше отвечает моим потребностям. Я собираюсь использовать его вместо MaskedTextBox. Спасибо. - person Leron_says_get_back_Monica; 13.03.2013
comment
@MichaelPerrenoud: Да, спешка за репутацией часто приводит к некрасивому поведению, особенно от тех, кто пытается заработать больше. Мне очень понравился ваш ответ, потому что меня часто отвергают, предлагая альтернативное предложение. Но вы не ответили на вопрос! -1 как обычно бывает. Не слишком часто, но ужасно недальновидно. - person Paul Sasik; 13.03.2013

Итак, чтобы _ был пробелом, вам просто нужно установить символ маски на один пробел. И чтобы устранить ошибку преобразования, просто установите для свойства AllowPromptAsInput значение false, чтобы пользователь не мог получить что-то вроде вашего примера.

person Mike Perrenoud    schedule 13.03.2013