Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие формы 
:(
    Опции темы
Martin_8
Дата 27.10.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Здравствуйте.
Помогите, пожалуйста, разобраться с такой ситуацией.
Есть у меня скажем формы Form1 и Form2. 
Form2 вызываю как модальную с формы 1. 
Код

Form2->ShowModal();

В Form2 выполняются некоторые действия, и пользователь её закрывает. Если после этого вновь открыть Form2, то видна вся информация, которую пользователь вводил в Edit-ах, чекбоксах и т.п.
Как сделать, чтобы при закрытии Form2 вся информация из компонентов уничтожалась как и форма ?
Пробовал Form3->Action->Free(), не помогло.
PM   Вверх
Alexeis
Дата 27.10.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Martin_8
Дата 27.10.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Alexeis, Состояние не особенное  smile 
С вариантом очистки компонентов вручную при закрытии формы тут всё понятно.
Но неужели нету способа обойтись без ручной очистки ?
И почему не работает 
Код

Form3->Action->Free()
 ведь должен как мне кажется ?
PM   Вверх
Alexeis
Дата 27.10.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Martin_8 @  27.10.2007,  21:43 Найти цитируемый пост)
Но неужели нету способа обойтись без ручной очистки ?

  А кто сказал что нужна совсем ручная? 
Код

   for (int i = 0; i < ComponentCount; i++)
   {
      AnsiString s = Components[i]->ClassName();
      if (s == "TCheckBox")
         ((TCheckBox*)(Components[i]))->Checked = false;
      else if (s == "TEdit")
         ((TEdit*)(Components[i]))->Text = "";
   }



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Martin_8
Дата 27.10.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 16.10.2006
Где: Минск

Репутация: нет
Всего: нет



Alexeis, спасибо за код  smile 
Видимо так и сделаю если кто-нибудь ещё не подбросит идеи.
Ещё бы разобраться почему не получается это сделать через
Код

 Form3->Action->Free() 
 который вызываю в OnClose.
Толи что-то не что-то не так, с этим Free(), толи вызов не там ?
PM   Вверх
ksili
Дата 28.10.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Цитата(Martin_8 @ 28.10.2007,  04:52)
Alexeis, спасибо за код  smile 
Видимо так и сделаю если кто-нибудь ещё не подбросит идеи.
Ещё бы разобраться почему не получается это сделать через
Код

 Form3->Action->Free() 
 который вызываю в OnClose.
Толи что-то не что-то не так, с этим Free(), толи вызов не там ?

Возможно потому, что освобождение памяти не означает её зануление. Например, после 
delete ptr;

ptr не станет NULL или 0. Его надо явно занулять


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Alexeis
Дата 28.10.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(ksili @  28.10.2007,  12:00 Найти цитируемый пост)
Возможно потому, что освобождение памяти не означает её зануление. Например, после 
delete ptr;

  А кто ее вообще освобождал? Я например не в курсе что это за объект такой Action и почему его удаление должно влиять на состояние контролов формы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ksili
Дата 29.10.2007, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Цитата(Alexeis @  28.10.2007,  19:02 Найти цитируемый пост)
Я например не в курсе что это за объект такой Action

 smile  smile  smile Я если честно, тоже не знаю и никогда не пользовался Form3->Action->Free()


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Mpak
Дата 29.10.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 12.11.2006

Репутация: 4
Всего: 7



Вопрос по теме:
Цитата(Alexeis @  27.10.2007,  22:48 Найти цитируемый пост)
Если начальное состояние какое-то особенное, то его можно сохранить в поток, а затем загрузить оттуда, если нет просто очищать все.


Можно узнать по конкретнее, что вы имели ввиду?


--------------------
В любой откомпилированной программе есть, по крайней мере, одна ошибка...
P.S. А у меня их минимум две...
PM MAIL ICQ   Вверх
Alexeis
Дата 29.10.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Mpak @  29.10.2007,  23:25 Найти цитируемый пост)
Можно узнать по конкретнее, что вы имели ввиду? 

  Например в некоторых чекбоксах должны стоять галочки, в некоторых едитах должен находиться заданный текст и т.д.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ksili
Дата 30.10.2007, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Alexeis, наверно имелось в виду, что значит
Цитата(Alexeis @  28.10.2007,  00:48 Найти цитируемый пост)
сохранить в поток, а затем загрузить оттуда
?



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Lazin
Дата 30.10.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



Цитата(Martin_8 @  27.10.2007,  17:31 Найти цитируемый пост)
Как сделать, чтобы при закрытии Form2 вся информация из компонентов уничтожалась как и форма ?

Сначала зайди в опции проекта, в раздел Forms, из списка Auto created forms убери Form2. В коде у тебя должно быть объявление указателя на  Form2, скорее всего в *.cpp файле:
Код

TForm2* Form2 = NULL;

далее каждый раз, когда нужно показать форму, нужно ее создавать заново:
Код

Form2 = new TForm2(this);
Form2->Parent = this;
Form2->ShowModal();
//получаем результат работы модальной формы
delete Form2;
Form2 = NULL;

и после этого удалять

Это сообщение отредактировал(а) Lazin - 30.10.2007, 09:08
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.