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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2008, 20:05   #1
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
Восклицание При переключении между чекбоксами - ошибка Stack overflow. Как исправить эту ошибку?

Добрый вечер!

Тестировано на Delphi 2007 win32 и Windows Vista Home Basic.
Проблемы с компонентом TCheckBox.
Вот два варианта кода:

procedure TForm1.CheckBox1Click(Sender: TObject);
// var i : Integer;
begin
{ for i := 0 to GroupBox1.ControlCount-1 do
begin
if TComponent(Sender).Tag = i then
(GroupBox1.Controls[i] as TCheckBox).Checked := True
else
(GroupBox1.Controls[i] as TCheckBox).Checked := False;
end; }

if Sender = CheckBox1 then
begin
CheckBox1.Checked := True;
CheckBox2.Checked := False;
CheckBox3.Checked := False;
CheckBox4.Checked := False;
end
else
if Sender = CheckBox2 then
begin
CheckBox1.Checked := False;
CheckBox2.Checked := True;
CheckBox3.Checked := False;
CheckBox4.Checked := False;
end
else
if Sender = CheckBox3 then
begin
CheckBox1.Checked := False;
CheckBox2.Checked := False;
CheckBox3.Checked := True;
CheckBox4.Checked := False;
end
else
if Sender = CheckBox4 then
begin
CheckBox1.Checked := False;
CheckBox2.Checked := False;
CheckBox3.Checked := False;
CheckBox4.Checked := True;
end;
end;

Финал один при переключении между чекбоксами выдает компиллятор следующую ошибку:

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EStackOverflow with message 'Stack overflow'.
---------------------------
Break Continue Help
---------------------------

В чем проблема?

Спасибо.
SkAndrew вне форума Ответить с цитированием
Старый 26.08.2008, 20:43   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

проблема в рекурсивном вызове OnCheckBoxClick.

Checkbox1.checked:=чтото
внутри себя имеет вызов OncheckboxClick
там опять checked:= и все по новой

если должен быть отмечен только один пункт то лучше использовать RadioButton или даже RadioGroupBox
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.08.2008 в 20:47.
evg_m вне форума Ответить с цитированием
Старый 26.08.2008, 20:50   #3
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
Восклицание

Не совсем понятно, тогда почему же в делфи 7 подобный код работал нормально? если не затруднительно можно объяснить более подробно. Спасибо.
SkAndrew вне форума Ответить с цитированием
Старый 26.08.2008, 20:51   #4
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Может это имеет отношении специфически для делфи 2007? Кто-нибудь сталкивался с такой проблемой? Спасибо.
SkAndrew вне форума Ответить с цитированием
Старый 26.08.2008, 21:13   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Цитата:
Сообщение от SkAndrew Посмотреть сообщение
Не совсем понятно, тогда почему же в делфи 7 подобный код работал нормально? если не затруднительно можно объяснить более подробно. Спасибо.
Неверно!! Рекурсивный вызов самого себя приводит к переполнению буфера, в данном примере. У меня Delphi 7, смотрите:
Alter вне форума Ответить с цитированием
Старый 26.08.2008, 21:32   #6
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Спасибо. Хотя у меня работало. Не могу понять почему, может каие другие процессы что-то перекрывали, но работало. Спасибо еще раз. Я думал, что может это связано с дефектом делфи 2007 или может каких-то компонентов, которые я установил. Потому и обратился за разъснением.ю. Спасибо.
SkAndrew вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить ошибку LLIypLLIyH Помощь студентам 5 16.06.2008 16:50
Помогите исправить ошибку Булат Общие вопросы Delphi 3 25.04.2008 10:01
Stack Overflow??? Рустам Общие вопросы Delphi 7 01.04.2008 17:24
помогите исправить ошибку. alen666 Паскаль, Turbo Pascal, PascalABC.NET 11 08.03.2008 16:43
MySQL как исправить ошибку Dengar PHP 8 03.03.2008 03:29