Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 13:30   #1
Lyubimov
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 53
По умолчанию Фильтрация ввода с Edit

Здравствуйте!

Необходимо сделать так, что бы пользователь мог вводить только числа. Другие последовательности символов надо игнорировать

Я сделал так

Код:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
    if (Key == VK_BACK) {
        return;
    }

    if (Key == ' ') {
        Key = 0;
        return;
    }

    TEdit *Edit1 = dynamic_cast<TEdit*>(Sender);

    if (Edit1 == NULL) {
        return;
    }

    try {
        StrToFloat(Edit1->Text.Insert(AnsiString(Key), Edit1->SelStart + 1));
    }
    catch (...) {
        Key = 0;
    }
}
Но есть проблемы

1. Нельзя сразу ввести отрицательное число
решается заменой строки
Код:
StrToFloat(Edit1->Text.Insert(AnsiString(Key), Edit1->SelStart + 1));
на
Код:
StrToFloat(Edit1->Text.Insert(AnsiString(Key), Edit1->SelStart + 1) + "0");
2. Пользователь может ввести много нулей

Или можно проверять значение на выходе

Код:
void __fastcall TForm1::Edit2Exit(TObject *Sender)
{
    TEdit *Edit1 = dynamic_cast<TEdit*>(Sender);

    if (Edit1 == NULL) {
        return;
    }

    try {
        if (StrToFloat(Edit1->Text) == 0) {
            Edit1->Text = "0";
        }
    }
    catch (...) {
        MessageBox(NULL, "Числовой параметр задан неверно!", "Ошибка ввода!", MB_OK | MB_ICONSTOP | MB_TASKMODAL | MB_TOPMOST);
        Edit1->Text = "0"; // Или другое значение по умолчанию
        Edit1->SetFocus();
    }
}
Может быть есть альтернативные варианты?

Последний раз редактировалось Lyubimov; 20.04.2011 в 13:34.
Lyubimov вне форума Ответить с цитированием
Старый 20.04.2011, 18:38   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Конечно есть.

Код:
#define DigitalKeys "-0123456789,"

void __fastcall TMainForm::FunctionKeyPress(TObject *Sender, char &Key)
{
AnsiString a = DigitalKeys";
if(a.Pos(Key) || Key == 0x08 || Key == 0x0D){My function();return;}
Key = 0;
}
Вводит знак минус числа и запятую.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на правильность ввода в Edit Claster Помощь студентам 1 05.04.2011 13:27
запрет ввода одинаковых чисел в edit epic6 Общие вопросы Delphi 6 15.06.2009 08:31
Ограничение ввода в Edit xxxsas Общие вопросы C/C++ 4 22.01.2009 12:36
Ограничение ввода в Edit Макс84 Компоненты Delphi 7 23.07.2007 09:38