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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2012, 11:42   #1
Oleg0405
Пользователь
 
Регистрация: 14.06.2012
Сообщений: 14
По умолчанию поле Edit записать int

Есть поле Edit1 в котором задается число от 0 до count
программа работает отлично если вводишь число но если ввести букву возникает ошибка
Код:
int port = Edit1->Text.ToInt();
подскажите как сделать проверку чтоб пользователь мог ввести только число в поле Edit1
Oleg0405 вне форума Ответить с цитированием
Старый 07.07.2012, 11:47   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

ToInt в случае ошибки генерирует исключение EConvertError. Перехватывайте его, выводите сообщение об ошибке, и будет у вас все работать.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 07.07.2012, 12:27   #3
Oleg0405
Пользователь
 
Регистрация: 14.06.2012
Сообщений: 14
По умолчанию

как я понимаю в int нельзя записывать буквы поэтому у меня идет ошибка
мне нужно в int записать только число и ничего больше примерно так:
Код:
int port = Edit1->Text.ToInt();
if ( (port >= 0) && (port <= count) ) Edit2->Text=" ок! ";
else // t.d.

Последний раз редактировалось Oleg0405; 08.07.2012 в 11:23. Причина: дополнение к описанию ошибки
Oleg0405 вне форума Ответить с цитированием
Старый 09.07.2012, 10:02   #4
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Можно использовать функцию StrToIntDef
Код:
StrToIntDef(Edit1->Text, 0)
,
где можно задать значение по умолчанию в случае ошибки конвертации, или использовать обработчик KeyPress для ввода только цифр:
Код:
Set<char, '0', '9'> Dig;
Dig <<'0' <<'1'<<'2'<<'3'<<'4'<<'5'<<'6'<<'7'<<'8'<<'9';
if(Dig.Contains(Key))
{
    Key=0; 
    Beep();
}
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 09.07.2012, 14:17   #5
Oleg0405
Пользователь
 
Регистрация: 14.06.2012
Сообщений: 14
По умолчанию

спасибо всем, разобрался сам
Код:
int port =0;
if ( (Edit1->Text >= 0) && (Edit1->Text <= 9) )  port=Edit1->Text.ToInt();
else   {
	MessageBox(this->Handle, "Введите число от 0 до 9!", "Ошибка!",
	  MB_OK | MB_ICONERROR);
	return;
  }

Последний раз редактировалось Oleg0405; 09.07.2012 в 14:23.
Oleg0405 вне форума Ответить с цитированием
Старый 09.07.2012, 14:26   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
разобрался сам
И это работает??
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2012, 15:16   #7
Oleg0405
Пользователь
 
Регистрация: 14.06.2012
Сообщений: 14
По умолчанию

Счастье было недолгим , работает при вводе первой буквы но если ввести 1п или 2с
то есть первым число то функция true;
Oleg0405 вне форума Ответить с цитированием
Старый 09.07.2012, 15:54   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
try
 {
 int i = Edit1 -> Text.ToInt();
 //Если произойдет ошибка преобразования, дальнейший код не выполнится
 //... - здесь работа с полученным значением, если все хорошо
 }
catch (EConvertError& err)
 {
 MessageBox(0, "Ну здрасьте! Попробуйте-ка еще раз!", "Паника-паника!", MB_OK);
 }
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 09.07.2012, 15:56   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
работает при вводе первой буквы
Число и символ имеют разные коды. '9' не равно 9
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2012, 15:57   #10
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Oleg0405

подскажите как сделать проверку чтоб пользователь мог ввести только число в поле Edit1

В нормальном контроле для этого выстявляеся стиль ES_NUMBER
ищи аналог для буилдера
Rififi вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
записать int* в бинарный файл Flame20 Помощь студентам 8 29.04.2012 22:33
Двухзначное число int записать как пару однозначных int (c++) narien Помощь студентам 2 08.01.2012 15:10
Как из простого мемо записать в поле БД Access в поле тоже типа мемо с сохранением всех абзацев пробелов Speeker БД в Delphi 2 28.11.2011 16:22
Как получить текст из Edit в переменную INT nimbler Win Api 4 05.11.2009 22:45
Не могу записать текст в поле Serega_1988 БД в Delphi 1 11.06.2008 16:57