Как я мог бы предотвратить добавление одного и того же символа в текстовое поле в C #? - PullRequest
1 голос
/ 06 апреля 2011

Хорошо, вот сценарий.Я строю калькулятор и хочу, чтобы пользователь (калькулятора) не мог добавить более одной точки (.), Потому что, очевидно, 1.2.1 не является действительным числом, так как бы я сделал такможно добавить только одну точку в текстовое поле, в которое они вводят?

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

Или вы можете использовать поле MaskedEdit, которое предназначено для этой цели

ссылка

1 голос
/ 06 апреля 2011

Вы можете прослушивать события TextChanged, как указывает Пома, и посмотреть, что находится в поле ввода. Затем у вас есть (в основном) два варианта:

  1. Исправить ввод в реальном времени (т. Е. Сбросить текст, чтобы не было ошибки
  2. Дайте визуальную обратную связь, чтобы указать, что что-то не так

Обычно я использую вариант 2, чтобы указать ошибку I:

  1. Отключить любые параметры ввода (например, кнопки ОК)
  2. Измените цвет фона текстового поля на светло-красный.

Будьте осторожны, если вы выберете вариант 1, потому что изменение текста программным способом также приведет к изменению текста. Одним из решений является установка логического флага, т. Е.

private bool changingText = false;

private void myTextBox_textChanged(...)
{
   if(changingText)
      return;

   fixErrors();
}

private void fixErrors()
{
    // Before changing myTextBox.Text, set the flag
   changingText = true;
   myTextBox.Text = ...
   changingText = false;
}

Есть и другие варианты, это только самые распространенные.

Edit:

Другое, потенциально лучшее, решение заключается в обработке OnKeyDown для текстового поля, если ключ не тот, который вам нужен - просто установите для свойства Handled события значение true. В любом случае будет работать.

- Дан

0 голосов
/ 06 апреля 2011

Вы можете использовать TextChanged событие для проверки ввода пользователя

...