34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
1

Как сделать проверку Edit по окончании ввода числа?

31.01.2014, 18:52. Показов 2620. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код
C++
1
2
3
4
5
6
7
void __fastcall TForm2::Edit1Change(TObject *Sender)
{
if(Edit1->Text>Edit7->Text)
Application->MessageBox("Ввод данного числа запрещен", "ERROR", MB_OK | MB_ICONERROR);
}
 
//в Edit7 записано число "25632"
если я ввожу 3 он пишет (Ввод данного числа запрещен) как сделать полную проверку после окончания ввода?
*т.е. он 3 сравнивает с разрядом десятков тысяч
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2014, 18:52
Ответы с готовыми решениями:

Как сделать проверку правильности ввода числа
У меня есть программа, которая переводит из восьмеричной системы счисления в двоичную: using...

Как сделать проверку на правильность ввода двоичного числа
перевод из 2 СС в 10 СС,а затем в 8 СС как сделать проверку на правильность ввода двоичного...

Как сделать проверку Edit?
Доброго времени суток. Подскажите, как можно сделать проверку Edit, если не введено число? double...

Как сделать проверку нескольких edit по циклу?
всем доброго времени суток собственно нужно проверить несколько edit на присутствие чисел если да...

17
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
31.01.2014, 21:55 2
можно пойти двумя способами.можно проверять по нажатии ентер, а можно, если у тебя колличество 25632 неизменно, то можно ещё наложить условие, что
C++
1
if (edit1->Text.length()>5){остальной код}
1
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
31.01.2014, 23:19  [ТС] 3
Цитата Сообщение от mish_k98 Посмотреть сообщение
можно пойти двумя способами.можно проверять по нажатии ентер, а можно, если у тебя колличество 25632 неизменно, то можно ещё наложить условие, что
C++
1
if (edit1->Text.length()>5){остальной код}
не работает
пишу
C++
1
2
3
if(Edit1->Text.length>5)
Application->MessageBox("Ошибка",\
"ERROR", MB_OK | MB_ICONERROR);
0
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 636
31.01.2014, 23:31 4
C++
1
2
3
4
5
6
7
void __fastcall TForm2::Edit1Change(TObject *Sender)
{
if (edit1->Text.length()>5){
if(Edit1->Text>Edit7->Text)
Application->MessageBox("Ввод данного числа запрещен", "ERROR", MB_OK | MB_ICONERROR);
 
}}
0
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
31.01.2014, 23:33 5
а это не правильно... . Мало того, что синтаксис безбожно игнорирован (это в Паскале регистр символа не важен, а Билдер к этому весьма чувствителен!), так и по смыслу "не того...", - длина может и быть в 5 символов, но символы эти - не цифры. Я бы сравнивал так: Edit1->Text.ToIntDef(32767) > Edit7->Text.ToIntDef(0) .
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
31.01.2014, 23:44 6
Это все изначально неверно воспринято.
Цитата Сообщение от Within_t Посмотреть сообщение
как сделать полную проверку после окончания ввода?
Что происходит по окончании ввода? Юзер жмет какую-то кнопку или энтер, верно? Вот тут и нужно делать "проверку", в чем бы она не заключалась.
1
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
01.02.2014, 04:43 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{
 if (Key == '\r') VerifyValue();   // Enter
 if (((Key < '0') || (Key > '9')) & (Key!=8)) Key=0;   // только цифры или BackSpace
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
VerifyValue();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::VerifyValue()
{
if(Edit1->Text > Edit7->Text)
    {
    Application->MessageBox("Ввод данного числа запрещён", "ERROR", MB_OK | MB_ICONERROR);
    //Edit1->Text = "";
    }
}
1
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
01.02.2014, 07:27  [ТС] 8
+1, мне надо чтобы при выходе из Edit1 проверялось if (Edit1->text>200'000'000) то выдавалось сообщение об ошибке, а если введено число 99'999'999, то ни чего не выводилось
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
01.02.2014, 07:35 9
А, ну да, я сюда вообще не посмотрел )
Так надо:
C++
1
 if (StrToInt(Edit1->Text)>200000000)
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
01.02.2014, 07:41  [ТС] 10
Просто такая фигня тут. значение типа INT=2147483645, если пользователь ввел такое число 2147483655, то вылетает фатальная ошибка (вот в чем тут подвох).

Добавлено через 2 минуты
Вот знаете есть такие люди, которые решат проверить прогу на уникальность))) закроют глаза и нажмут "9999999999999999999999" и тут им вылетает сис/ошибка
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
01.02.2014, 08:08 11
Ну сделай StrToFloat
и ограничь длину ввода
C++
1
2
if (Edit1->Text.Length()>5)
        Key=0;
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
01.02.2014, 08:10 12
Within_t, ошибка не фатальная, а обычный эксепшн, говорящий, что введённое число слишком многовато для целого. Поэтому, один добрый человек уже посоветовал сравнивать числа, используя ToIntDef. Читай внимательнее.
0
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
01.02.2014, 09:00  [ТС] 13
я разобрался, сделал маленько по другому
C++
1
2
3
4
void __fastcall TForm2::FormShow(TObject *Sender)
{
     Edit1->MaxLength=9;
}
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
01.02.2014, 09:12 14
Нелишним будет
C++
1
Edit1->NumbersOnly=true;
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
01.02.2014, 11:22 15
Можно ещё пользователю предварительно клавиатуру подсунуть с выдранными буковками, чтоб даже и не думал вводить не цифры!

Потом, когда-нибудь, потребуется вводить не цифры, а буквы, и не менее 20 штук, и уйдут часы и нервы на поиск где-то установленных в коде модификаторов ввода. Я про MaxLength и NumbersOnly.
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
01.02.2014, 11:26 16
c0rvax, по-вашему получается, "защита от дурака" — пустая трата времени? Пусть в программе лучше ошибки выбивает?
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
01.02.2014, 15:53 17
+1, по-моему, надо получить строку, которую пользователь ввёл, проанализировать её содержимое и вывести пользователю внятное сообщение об ошибке, а не заниматься непонятными ограничениями ввода, которые могут напрочь развалить алгоритм, если что-то потребуется изменить.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.02.2014, 16:21 18
Просто надо разносить сам фильтр и его применение. Таким образом можно применять один и тот же фильтр в различных местах без лишнего кода, а при необходимости изменить фильтр, нужно будет его изменить только в одном месте.

Это можно сделать проще всего с помощью регулярок - regex, например.
0
01.02.2014, 16:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2014, 16:21
Помогаю со студенческими работами здесь

Как считать массив строк из стандартного ввода, если нет никакого сигнала об окончании ввода
Добрый день, сейчас изучаю язык C и попалась такая задача: Задача об отображении темы письма...

Как сделать проверку корректности ввода логина?
Скрипт должен проверять минимум символов(6) и чтобы логин не начинался с цифры?

Как сделать проверку ввода текста в обратной связи?
Имеется обратная связь: &lt;?php /* Здесь проверяется существование переменных */ if...

Как сделать проверку формы на пустое значение в поле ввода
Ку, если ты знаешь как так седлать помоги пж. Как проверить на пустоту, я то знаю, а как седлать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru