C++ Builder
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



C++ Builder Expand / Collapse
Автор
Сообщение
17.07.2006 19:10
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 23.08.2006 13:53
Сообщ.: 2, Visits: 19
Доброе время суток.
Народ, нужна небольшая консультация. Я на С++ Builder только начинаю писать. Суть вопроса
Есть форма. На форме компоненты. Если пишется какой-нибудь обработчик то все просто. Ссылаюсь на компоненты и вызываю их методы - все ок. А вот есть отдельный модуль скажем File1.Cpp. Там есть некая функция, которая ссылается на компоненты вышеуказанной формы. В начале модуля стоит строчка Include, которая подключает модуль формы. И из функции ссылка на компоненты уже идет с указанием имени формы, например FormX->DBGrid2->...
Компилер ошибок не выдает. Однако программа слетает с выдачей сообщения ...Access violation At ... Address... Догадываюсь в чем причина но скоре всего я что-то сделал неправильно. что - не могу понять.
Если есть возможность - подскажите. Такое подозрение что программа обращается к еще не созданному компоненту. Если это так то как можно этого избежать. Функция нужна так как к ней планируется обращение из разных форм
Заранее спасибо.
Сообщ. #900891
17.07.2006 23:07
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme 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.

Удачи,
Владимир
Сообщ. #900903
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 5:21