www.minetki.net.
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Изменить label->caption одной формы из другой., почему-то не происходит обновление :((
Paranoik
  Отправлено: 14.06.2003, 11:03


Не зарегистрирован







Программа содержит несколько форм.
Жму на главной форме кнопку. В результате открывается новая форма в которой производятся некоторые манипуляции. В результате определенных действий у элемента этой второй формы срабатывает событие (напр, OnClick кнопки какой-нить).
В этом событии пишу, например, Form1->Label1->Caption = "123".
Всё срабатывает, но я не вижу никаких изменений на Form1. В пошаговом режиме всё гладко: видно как присваивается значение, видно что оно обновилось...
Точно так же и с некоторыми другими элементами (например, Edit1->Text, lookup'ы всякие... )

Почему??? Что не так делаю?

Обе формы друг друга видят (добавлены друг к другу через Include Unit Hdr).
Admin
Отправлено: 14.06.2003, 17:15


Владимир

Группа: Администратор
Сообщений: 1190



Приведите код или приложите проект.
Paranoik
  Отправлено: 14.06.2003, 22:38


Не зарегистрирован







Выложить-то выложил бы, но все это весит уже предостаточно.
А код приводить в пример незнаю какой....
Вот есть две формы: "DBForm" и "ProductsForm". Вторая форма открывается из первой при нажатии кнопки (TButton):

void __fastcall TDBForm::ProductsFormButtonClick(TObject *Sender)
{
ProductsForm->Show();
}


На второй форме висит кнопка (TButton); к ней событие:

void __fastcall TProductsForm::Button1Click(TObject *Sender)
{
DBForm->Label1->Caption = "321";
}

Значение записывается и его потом можно считать и оно правильное. Но визуально надпись не изменяется никак.
Создал новый примитивный проект из двух форм — ВСЁ РАБОТАЕТ! А в моей программе — ничерта.
Вообще в программе несколько форм и все формы друг с другом нормально общаются кроме главной DBForm.
Иными словами: из главной я могу именять все остальные; а из всех остальных я могу так же изменять все КРОМЕ главной. И сдается мне что появился этот партак не с проста. В какой-то момент, но в какой — никак не могу понять.
В общем, руки опускаются, дурацкая какая-то проблема...
Paranoik
Отправлено: 15.06.2003, 09:59


Ученик-кочегар

Группа: Участник
Сообщений: 12



Выяснил еще такие тонкости:
И так: на главной форме — Label1 и две кнопки. В Label->Caption изначально зашито "bla-bla-bla" На второй форме так же Label1 и кнопка.
По нажатии кнопки главной формы происходит Label1->Caption = "1". Всё ок и в пошаговом видно и результат в программе виден. Жму на вторую кнопку — выскакивает вторая форма и на ней жму на её кнопку и в пошаговом собираюсь шагнуть на DBForm->Label1->Caption = "2". И что я вижу? Смотрю значение DBForm->Label1->Caption и оно равно старому "bla-bla-bla"! Жму F8, вижу как оно затирается значением "2", но на главной форме всё без изменений. Элемент Label1 второй формы никак не затронулся, т.е. ничего никуда ошибочно не писалось.

Так вот получается что "Label1" из главной формы DBForm и обращение "DBForm->Label1" из второстепенной — две большие разницы. Кроме того "DBForm->Label1" существует со старыми значениями и ведёт свой латентный образ жизни, наплевав на реальный объект главной формы...

Отредактировано Paranoik — 15 Jun 2003, 09:59
Admin
Отправлено: 15.06.2003, 11:58


Владимир

Группа: Администратор
Сообщений: 1190



1/ В таком случае у меня смутное подозрение, что какая-то проблема
с именами (форм) и скорее всего DBForm

или

2/ Проверьте что на что ссылается, и все ли формы проекты лежат в одной папке, (скорее всего файл, где лежит ProductsForm или DBForm)
ссылается на другую директорию:
возможно, какую-то из форм вы сохраняли File->SaveAs и
указали другую директорию, то есть у вас их два,
в одном вы вносите изменения, а другой цепляете к проекту
и компилите.(а лежат они естественно в разных директориях),
проверить легко — бросьте на форму CaptionForm какую-нибудь
кнопку и откомпилите — появится эта кнопка или нет, если нет -
значит изменяете один файл, а компилите другой.


Paranoik
  Отправлено: 15.06.2003, 13:11


Ученик-кочегар

Группа: Участник
Сообщений: 12



2.Нет, тут оказалось всё в порядке, всё было сохранено должным образом.

1.Переименовал проблемную форму в типичный вариант — "Form1".
Всё заработало smile.gif
Благодарю за наводку!
Но почему так могло произойти? Вроде бы везде поменял имя, когда переименовывал и никто не ругался на имена... Где могло остаться старое имя и вызвать проблемы?
Paranoik
Отправлено: 15.06.2003, 15:08


Ученик-кочегар

Группа: Участник
Сообщений: 12



Позже выяснилось, что билдёр в файле проекта создавал две копии записи "Application->CreateForm(__classid(TForm1), &Form1);". Отсюда видимо и появлялась вторая, невидимая форма, создававшая проблемы.
После удаления лишней записи всё приходит в норму. Лишняя почему-то создаётся когда начинаешь химичить в настройках проекта с опциями "Autocreate Forms" и "Main Form".

Отредактировано Paranoik — 15 Jun 2003, 15:09

Вернуться в Вопросы программирования в C++Builder