Поиск:

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


Новичок



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

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



Здравствуйте!
Возник такой вопрос:
- есть Form1(Unit1.h и Unit1.cpp - соответственно) на ней лежит Lalel1;
- есть подключенный к проекту Functions.h - соответственно Functions.h прописан в Unit1.h и наоборот.
Все прекрасно работает если из Form1 вызываем функции прописанные в классе расположенном в Functions.h
Следующая ситуация:
- На Form1 тыкаем кнопку -> Она вызывает функцию из класса в Functions.h в которой прописано Form1->Label1->Caption = "HELLO";
Возникает ошибка чтения памяти. Как быть?
Почему я не могу из прикрепленного класса обратиться к компонентам формы?

Это сообщение отредактировал(а) Iskin - 15.10.2012, 01:11
PM MAIL   Вверх
586
Дата 15.10.2012, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вероятно, у тебя где-то в коде повреждается память (например, из-за выхода за пределы массива), из-за чего форма перестаёт работать. Ищи ошибку в другом месте.
Если есть сомнения по поводу строки «Form1->Label1->Caption = "HELLO"», то создай новый проект, кинь на форму лейбл и кнопку. В обработчик нажатия кнопки вставь эту строчку. И запусти программу. Ошибок быть не должно.
PM   Вверх
Dem_max
Дата 15.10.2012, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ошибка точно не в этом, а где то в другом месте твоего кода. 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
petlyura
Дата 15.10.2012, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Iskin @ 15.10.2012,  01:09)
Здравствуйте!
Возник такой вопрос:
- есть Form1(Unit1.h и Unit1.cpp - соответственно) на ней лежит Lalel1;
- есть подключенный к проекту Functions.h - соответственно Functions.h прописан в Unit1.h и наоборот.
Все прекрасно работает если из Form1 вызываем функции прописанные в классе расположенном в Functions.h
Следующая ситуация:
- На Form1 тыкаем кнопку -> Она вызывает функцию из класса в Functions.h в которой прописано Form1->Label1->Caption = "HELLO";
Возникает ошибка чтения памяти. Как быть?
Почему я не могу из прикрепленного класса обратиться к компонентам формы?

привет! а откуда класс, прописанный в functions.h знает о Form1? ты передавал на него указатель в класс, прописанный в functions.h? в этом и причина.
Или передай туда указатель, или в обработчике баттона пиши Label1->Caption = FunctionFromFunctions();
PM MAIL   Вверх
artsb
Дата 15.10.2012, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Есть подозрение, что топикстартер создаёт форму динамически.

Добавлено через 1 минуту и 21 секунду
Цитата(petlyura @  15.10.2012,  08:47 Найти цитируемый пост)
ты передавал на него указатель в класс, прописанный в functions.h?

Это не обязательно, если форма создаётся автоматически при старте программы.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
petlyura
Дата 15.10.2012, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(artsb @ 15.10.2012,  09:06)
Есть подозрение, что топикстартер создаёт форму динамически.

Добавлено @ 09:07
Цитата(petlyura @  15.10.2012,  08:47 Найти цитируемый пост)
ты передавал на него указатель в класс, прописанный в functions.h?

Это не обязательно, если форма создаётся автоматически при старте программы.

ок. тогда для лучшего понимания должна помочь пошаговая отладка. 
PM MAIL   Вверх
artsb
Дата 15.10.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(petlyura @  15.10.2012,  09:11 Найти цитируемый пост)
тогда для лучшего понимания должна помочь пошаговая отладка.  

С этого нужно было начинать )


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Iskin
Дата 23.10.2012, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблему решил. Ниже код.

Unit1.cpp
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Func.MyShow(Label1);
}


Functions.h
Код

class MyFunc
{
    public:
    void MyShow (TLabel *lb);
}Func;

void MyFunc::MyShow(TLabel *lb)
{
    lb -> Caption = "Hello";
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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