Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
useruser
63 / 63 / 30
Регистрация: 29.06.2015
Сообщений: 666
1

Ошибка при исключении - не переходит к указанной метке?

13.04.2016, 07:09. Просмотров 214. Ответов 8
Метки нет (Все метки)

Проверяю введенное пользователем значение. Это должно быть число.
Использую try - except. Код работает некорректно.
Ввожу в поля числа. Результат - '' - is not a valid integer value.
Почему не срабатывает except?

При запуске программа проходит Проверку на число 1 (Код 1 выполнен).
Но вторую проверку не проходит. И к метке не переходит.


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.button1Click(Sender: TObject);
label
End_of_this; //Метка конца процедуры
var
error:integer; //Переменная (флаг) ошибок
begin
 
//По умолчанию нет ошибок
error:=0;
 
 
 
//Проверка на число 1
try StrToInt(circuit.text); except error:=1; end; //Не получилось преобразовать - значит уже есть ошибка.
//Если есть ошибка - выводим сообщение и идем к метке в конец процедуры.
if (error=1) then 
begin 
MessageDlg('Значение 1 не число',mtWarning,  [mbOk], 0); 
goto End_of_this;
end;
Form1.Memo1.Lines.Add('Код 1 выполнен');
 
//Проверка на число 2
try StrToInt(number_1.text); except error:=1; end;
if (error=1) then 
begin 
MessageDlg('Номер 1 не число',mtWarning,  [mbOk], 0);
goto End_of_this;
end;
 
//Если прошло проверку выше - то проверяем диапазон.
if ((StrToInt(number_1.text)<0) or (StrToInt(number_1_add.text)>360)) then
begin MessageDlg('Первое выпавшее значение должно быть от 0 до 360.',mtWarning,  [mbOk], 0);
goto End_of_this; 
end;
Form1.Memo1.Lines.Add('Код 2 выполнен');
 
 
End_of_this:
Form1.Memo1.Lines.Add('Код 3 выполнен');
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2016, 07:09
Ответы с готовыми решениями:

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

Не переходит по метке Delphi+Assembler
Здравствуйте, прог. не переходит по метке k1, подскажите пожалуйста. Заранее...

Ошибка в исключении
Здраствуйте, посмотрите код, там, где исключение ошибка.Я его туда вставил...

Повтор действия при исключении
Качаю файлы, столкнулся с проблемой. Вот код Do While 'пока в файле есть...

Выводить сообщение при исключении
Здравствуйте, написал код, т.с. методом научного тыка, ну не понимаю я java ,...

8
krapotkin
3418 / 3025 / 1047
Регистрация: 14.04.2014
Сообщений: 14,677
Записей в блоге: 15
13.04.2016, 09:34 2
при использовании try except никакие метки не нужны
программа сама пропустит весь код до except или finally
достаточно
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try
  aOK:=false;
  bOK:=false;
 
  a:=StrToInt(circuit.text);
  aOK := true;
  Memo1.Lines.Add('Код 1 выполнен');
 
  b:=StrToInt(number_1.text);
  bOK := True;
  Memo1.Lines.Add('Код 2 выполнен');
 
  if (a<0) or (b>360) then
    showMessage('значение должно быть от 0 до 360')
  else
    Memo1.Lines.Add('Код 3 выполнен');
except
  if not aOK then
    showMessage('Значение 1 - не число')
  else
    showMessage('Значение 2 - не число');
end;
0
useruser
63 / 63 / 30
Регистрация: 29.06.2015
Сообщений: 666
13.04.2016, 09:54  [ТС] 3
Цитата Сообщение от krapotkin Посмотреть сообщение
при использовании try except никакие метки не нужны
У меня есть 10 текстовых полей. Я хочу, чтобы в них вводились числа.
Я проверяю каждое из полей конструкцией try except на число.
Если в первом поле не число - я вывожу сообщение и далее ничего не проверяю. Так для всех полей.
Для этого нужны метки.

У меня конструкция try except не позволяет begin end
Delphi
1
2
3
4
5
6
//Так не выйдет
try StrToInt(circuit.text); except
begin 
MessageDlg('Значение 1 не число',mtWarning,  [mbOk], 0); 
goto End_of_this;
end;
Ваш код ловит исключения всего кода. А мне надо конкретного блока кода.
Как то так
--
Значение в поле Edit число?
Если да - то выполняем код дальше.
Если нет - то выводим сообщение, выполняем какие-то действия и останавливаем программу.
0
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
13.04.2016, 09:58 4
Цитата Сообщение от useruser Посмотреть сообщение
Я хочу, чтобы в них вводились числа.
а что могут вводить?
0
useruser
63 / 63 / 30
Регистрация: 29.06.2015
Сообщений: 666
13.04.2016, 10:18  [ТС] 5
Цитата Сообщение от qwertehok Посмотреть сообщение
а что могут вводить?
В текстовое поле Edit вводят текст. Тип string. Этот текст может быть "числом", например 01 или 1.
Также этот текст может быть текстом, например - превед.

Моя задача преобразовать то, что ввел пользователь в поле Edit в число. Что он ввел - мне всё равно. Даже если какое либо слово будет преобразовано в число. Использую функцию strtoint.
Если я смог преобразовать это в число, значит выполняю код дальше.
Если не смог - вывожу сообщение, выполняю что-то ещё и останавливаю программу.
0
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
13.04.2016, 10:23 6
но ведь можно запретить пользователю вводить буквы
1
useruser
63 / 63 / 30
Регистрация: 29.06.2015
Сообщений: 666
13.04.2016, 10:54  [ТС] 7
Цитата Сообщение от qwertehok Посмотреть сообщение
но ведь можно запретить пользователю вводить буквы
Спасибо, разобрался.
0
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
13.04.2016, 10:57 8
Цитата Сообщение от useruser Посмотреть сообщение
MaskEdit не подходит.
конечно

Цитата Сообщение от useruser Посмотреть сообщение
ну можно, но как то не красиво.
кто бы говорил о красоте

Цитата Сообщение от useruser Посмотреть сообщение
Тут 2 строки кода
неправильного кода

Цитата Сообщение от useruser Посмотреть сообщение
Может есть решение?
есть
выбираете все эдиты через шифт и назначаете им одинаковый обработчик
0
krapotkin
3418 / 3025 / 1047
Регистрация: 14.04.2014
Сообщений: 14,677
Записей в блоге: 15
13.04.2016, 11:38 9
Цитата Сообщение от useruser Посмотреть сообщение
У меня есть 10 текстовых полей. Я хочу, чтобы в них вводились числа.
Я проверяю каждое из полей конструкцией try except на число.
Если в первом поле не число - я вывожу сообщение и далее ничего не проверяю. Так для всех полей.
текст который я привел, делает именно это
действия полностью идентичны с вашим исходным кодом, только без goto
0
13.04.2016, 11:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2016, 11:38

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

продолжить работу, при не обрабатываемом исключении
Моё приложение использует объект сборки к исходникам которой доступа нет....

Вывод в TextBox: вызов MessageBox при исключении
Доброго времени суток, форумчане, возникла проблема с CLR проектом. У меня есть...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru