Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Грамотно "убить" компоненты / 9 сообщений из 9, страница 1 из 1
14.10.2003, 11:48
    #32292439
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
Сделал тестовую программу в которой форма с двумя кнопками. Одной кнопкой
создаю новые компоненты (в цикле):
Код: plaintext
1.
2.
3.
4.
5.
Im = new TImage(FMain);
    Im->Visible = false;
    Im->Parent = Panel1;
    Im->Name =  "ObjectImage" +IntToStr(i);
    ....//на них в Bitmap при помощи Canvas рисуются линии.
    Im->Visible = true;


Другой кнопкой удаляю эти компоненты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for (int i =  0 ;i < FMain->ComponentCount;i++)
  {
     if (((FMain->Components[i])->GetParentComponent() == Panel1)
        && ((AnsiString)(FMain->Components[i]->ClassName()) ==  "TImage" ))
     {
        delete FMain->Components[i];
     }
  }


Так вот если сначала кликнуть на кнопку создания, потом на кнопку удаления, а потом опять создания, то возникает ошибка:
A component named ObjectImage1 already exist.

Странно что на ObjectImage0 не ругается, а на ObjectImage1 ругается.

Что я не так делаю при удалении компонентов?
...
Рейтинг: 0 / 0
14.10.2003, 11:49
    #32292443
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
Сделал тестовую программу в которой форма с двумя кнопками. Одной кнопкой
создаю новые компоненты (в цикле):
Код: plaintext
1.
2.
3.
4.
5.
Im = new TImage(FMain);
    Im->Visible = false;
    Im->Parent = Panel1;
    Im->Name =  "ObjectImage" +IntToStr(i);
    ....//на них в Bitmap при помощи Canvas рисуются линии.
    Im->Visible = true;


Другой кнопкой удаляю эти компоненты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for (int i =  0 ;i < FMain->ComponentCount;i++)
  {
     if (((FMain->Components[i])->GetParentComponent() == Panel1)
        && ((AnsiString)(FMain->Components[i]->ClassName()) ==  "TImage" ))
     {
        delete FMain->Components[i];
     }
  }


Так вот если сначала кликнуть на кнопку создания, потом на кнопку удаления, а потом опять создания, то возникает ошибка:
A component named ObjectImage1 already exist.

Странно что на ObjectImage0 не ругается, а на ObjectImage1 ругается.

Что я не так делаю при удалении компонентов?
...
Рейтинг: 0 / 0
14.10.2003, 11:59
    #32292454
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
Извините за спам (два топика получилось) - что-то сглючило...

Выяснил что ругается на компоненты с нечетными индексами:
ObjectImage1,ObjectImage3,ObjectImage5,ObjectImage7,ObjectImage9

Ерунда какая-то получается...
<<C++Builder 6
...
Рейтинг: 0 / 0
14.10.2003, 12:08
    #32292470
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
А если еще раз удалить, а потом создать, то ругается на четные!
Ничего не понимаю...
...
Рейтинг: 0 / 0
14.10.2003, 13:00
    #32292561
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
Оказывается дело было в
for (int i = 0;i < FMain->ComponentCount;i++)
перебор надо было начинать с конца
for (int i = FMain->ComponentCount-1;i >= 0 ;i--)
потому что при удалении i-того компонента на его место встает i+1-ый, а я его пропускаю.
...
Рейтинг: 0 / 0
14.10.2003, 13:49
    #32292646
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
Естественно ... !
Рад что ты догодался сам !
...
Рейтинг: 0 / 0
15.10.2003, 17:06
    #32294389
DarkCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
throw Exception("всё заибало пиздец нахуй блять");

сорри, оффтопик.

...
Рейтинг: 0 / 0
15.10.2003, 17:15
    #32294406
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
Что это на тебя нашло ??


или пользуешся что форум не модерируется ??
вот если бы я им был
...
Рейтинг: 0 / 0
16.10.2003, 10:17
    #32294940
DarkCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грамотно "убить" компоненты
Джип, уже всё нормально.
Отпустило.

Спасибо за поддержку :))

...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Грамотно "убить" компоненты / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]