Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197

Как проверить существование динамического обьекта?

05.05.2011, 13:48. Показов 6552. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый,
возникла проблема с проверкой существования динамически созданного объекта. Суть такова: пользователь нажимает на кнопку, динамически создается, к примеру, 10 объектов типа TEdit, если пользователь нажмет на кнопку повторно, вернется ошибка, как быть в такой ситуации?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2011, 13:48
Ответы с готовыми решениями:

Как проверить существование файла?
Здравствуйте, у меня в событие FormCreate записан код, который читает строки из текстовое файла и передает их в ListBox. Если файл...

Как проверить существование файла на удаленном компьютере
Парни, приветствую! Интересует вопрос проверки существования файла на удаленном компе, использую FileExist, но он работает только для...

Проверить существование ключа в реестре
TRegistry *reg=new TRegistry(); reg->RootKey=HKEY_CURRENT_USER; ...

28
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 14:02
Тут надо наверно воспользоваться функцией FindComponent()
0
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 14:10  [ТС]
Sasha,
как ее применить?

Создаю по этому примеру: http://sources.ru/builder/faq/003.html
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
05.05.2011, 14:33
Mr. T, а нельзя запретить пользователю второй раз нажимать на кнопку?
0
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 14:41  [ТС]
NiTan,
нет, по клику на кнопке из базы данных выводятся различные данные и каждый раз динамически создается нужное количество объектов типа TEdit, поэтому лучше при клике на кнопку проверять существование объектов и если они есть, то удалять их и создавать новые.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 14:51
Вот держи

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=0;i<Form1->ComponentCount;i++)
 {
  if(Form1->Components[i]->ClassNameIs("TEdit"))
  {
   return;
  }
 }
 for (int i=0;i<5;i++)
        {
        TEdit *edit = new TEdit(this);
        edit->Parent = this;
        edit->Name = "edit"+AnsiString(i);
        edit->Height = 16;
        edit->Width = 104;
        edit->Left = 0;
        edit->Top = i*edit->Height;
        edit->Text = AnsiString(i);
        }
}
1
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 15:19  [ТС]
Sasha,
сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 1; i <= Form1->ComponentCount; i++) if (Form1->Components[i]->ClassNameIs("TEdit")) return;
for (int i = 1; i <= StringGrid1->ColCount - 1; i++) {
    TEdit *Edit = new TEdit(this);
    Edit->Parent = Panel3;
    Edit->Name = "Edit" + IntToStr(i);
    Edit->Height = 21;
    Edit->Width = StringGrid1->DefaultColWidth - 4;
    Edit->Left = 5 + (i - 1) * (Edit->Width + 5);
    Edit->Top = Button1->Top + Button1->Height + 6;
    Edit->Text = IntToStr(i);
    StringGrid1->Cells[i][0] = i;
}
, но теже грабли.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 15:24
я писал не так
Цитата Сообщение от Mr. T Посмотреть сообщение
for (int i = 1; i <= Form1->ComponentCount; i++)
а вот так
C++
1
(int i = 0; i < Form1->ComponentCount; i++)
И форматируй пожалуйста код перед вставой
1
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 15:28  [ТС]
Sasha,
спасибо, так работает. Назрел еще один вопрос, пользуясь случаем, спрошу. Если мне нужно изменить всем объектам, к примеру, ширину, но я не знаю, сколько их всего, как мне к ним обратиться?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 15:40
Цитата Сообщение от Mr. T Посмотреть сообщение
Если мне нужно изменить всем объектам, к примеру, ширину, но я не знаю, сколько их всего, как мне к ним обратиться?
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  //переменная для элемента формы
  TControl *child;
  for (int i = 0; i < Form1->ControlCount; i++)
  {
   //Берём очередной элемент
    child = Form1->Controls[i];
    child->Width = 80;
   }
 
}
1
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 15:48  [ТС]
Sasha,
протестировал код из сообщения Как проверить существование динамического обьекта? и понял, что подавляется всего лишь ошибка, что объекты уже существуют и соответственно код после создания объектов не выполняется, если объекты уже существуют.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 15:54
А как тебе надо?
0
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 15:57  [ТС]
Sasha,
нужно, чтобы если объекты существуют, то уничтожить их и создать новые.

Если пишу так:
C++
1
2
3
4
5
TControl *Edit;
for (int i = 0; i < Form1->ControlCount; i++) {
    Edit = Form1->Controls[i];
    Edit->Width = 100;
}
То ширина всех компонентов на форме страдает. Вероятно, я не понял что-то.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 16:01
Цитата Сообщение от Mr. T Посмотреть сообщение
Вероятно, я не понял что-то
Конечно непонял. Я аообщн не могу понять зачем ты коверкаешь мои коды.

Ты же написал мне что тебе изменить ширину всех компонентов надо, а сам только эдит меняешь. Если конкрентный объект класса нужен, то там подругому нужно делать
1
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 16:04  [ТС]
Sasha,
сорри, перечитал свое сообщение, я не прав, нужно изменить ширину только для конкретных объектов, которые были созданы динамически.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 16:14
На вот для эдитов
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for(int i=0;i<Form1->ComponentCount;i++)
 {
   if(Form1->Components[i]->ClassNameIs("TEdit"))
  {
    ((TEdit*)Form1->Components[i])->Width = 180;
  }
 }
1
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 16:59  [ТС]
Sasha,
спасибо, работает. Если я правильно понимаю, то точно также можно и уничтожить объекты, но вопрос: какой функцией?

Пробовал писать так:
C++
1
2
3
4
5
for (int i = 0; i < Form1->ComponentCount; i++) {
    if (Form1->Components[i]->ClassNameIs("TEdit")) {
        ((TEdit *)Form1->Components[i])->Destroying();
    }
}
, но фонарь, не катит.
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
05.05.2011, 17:01
объекты, созданные new, уничтожаются delete
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2011, 17:06
Цитата Сообщение от Mr. T Посмотреть сообщение
Sasha,
спасибо, работает. Если я правильно понимаю, то точно также можно и уничтожить объекты, но вопрос: какой функцией?

Пробовал писать так:
C++
1
2
3
4
5
for (int i = 0; i < Form1->ComponentCount; i++) {
    if (Form1->Components[i]->ClassNameIs("TEdit")) {
        ((TEdit *)Form1->Components[i])->Destroying();
    }
}
, но фонарь, не катит.
Удаление динамически созданных объектов
1
10 / 10 / 4
Регистрация: 10.09.2010
Сообщений: 197
05.05.2011, 17:08  [ТС]
mimicria,
спасибо, попробовал так:
C++
1
2
3
4
5
for (int i = 0; i < Form1->ComponentCount; i++) {
    if (Form1->Components[i]->ClassNameIs("TEdit")) {
        delete ((TEdit *)Form1->Components[i]);
    }
}
, но удалился лишь первый объект.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2011, 17:08
Помогаю со студенческими работами здесь

Проверить существование папки и выполнить команду
if(DirectoryExists(&quot;C:\\FOLDER&quot;)) { N1-&gt;Enabled=false; } Если папка не существует,заблокировать пункт меню Если папка есть то...

Проверить существование обьекта по указателю
Всем доброго времени суток. У меня есть такой Класс Enemy. И соответственно есть указатель Enemy* computerEnemy; Позже - мне необходимо...

Существование обьекта и получение ссылки
Доброго времени суток. Есть приложение, в котором вызываются dll(№1). В приложении подключена dll(№2) с определённым классом реализованным...

Как проверить класс обьекта
Добрый день(вечер, ночь или утро - возможно у нас разный часовой пояс:p) Есть обьект какого нибудь класса, ну например String obj =...

Как проверить существование каталога
Надо создать текстовой файл, который называется: минуты и годы системных переменных TIME и DATE и записать в него путь к временным...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru