|
|
|
новичок
      
участник
Last Login: 23.08.2006 13:53
Сообщ.: 2,
Visits: 19
|
|
Доброе время суток.
Народ, нужна небольшая консультация. Я на С++ Builder только начинаю писать. Суть вопроса
Есть форма. На форме компоненты. Если пишется какой-нибудь обработчик то все просто. Ссылаюсь на компоненты и вызываю их методы - все ок. А вот есть отдельный модуль скажем File1.Cpp. Там есть некая функция, которая ссылается на компоненты вышеуказанной формы. В начале модуля стоит строчка Include, которая подключает модуль формы. И из функции ссылка на компоненты уже идет с указанием имени формы, например FormX->DBGrid2->...
Компилер ошибок не выдает. Однако программа слетает с выдачей сообщения ...Access violation At ... Address... Догадываюсь в чем причина но скоре всего я что-то сделал неправильно. что - не могу понять.
Если есть возможность - подскажите. Такое подозрение что программа обращается к еще не созданному компоненту. Если это так то как можно этого избежать. Функция нужна так как к ней планируется обращение из разных форм
Заранее спасибо.
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 10.11.2008 0:08
Сообщ.: 1 298,
Visits: 12 501
|
|
Так и есть идет попытка вызова метода несуществующего экземпляра класса. Есть несколько способов: 1. Всегда передавать в функцию ссылку на существующий экземпляр формы, тогда функция должна выглядеть примерно следующим образом:
void MyFunction(TFormX* pForm, другие аргументы);
2. Завести глобальную переменную (не самый лучший из способов, но работает) но перед тем как ее использовать проверять что она не равна NULL:
if (m_pFormX != NULL) { m_pFormX->DBGrid2->... }
При создании формы на событие OnCreate или как-то так (не знаю как это в C++Builder) инициализировать глобальную переменную:
m_pFormX = this;
3. Реализовать вспомогательные функции в виде класса а не отдельных ф-ций. В конструктор класса передавать ссылку на инициализированную форму. Можно реализовать класс в виде Singleton'а с его инициализацией по событию формы OnCreate.
Удачи, Владимир
|
|
|
|