![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
harakiri |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 17.1.2011 Репутация: нет Всего: нет |
Здравствуйте. Интересует такой вопрос: есть две формы которые создаются динамически.
На форме f1 есть label1. Как из формы f2 изменить f1.label1.Caption? Заранее спасибо. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
На строке f1.ShowModal выполнение кода остановится до тех пор, пока не будет закрыта эта форма, поэтому f2 даже не создастся. После того, как f1 будет закрыта, создастся f2, но нет смысла уже что-то менять на f1 т.к. она уже ведь закрыта. Не совсем ясно что конкретно должно получиться, но пока очевидна ошибка в архитектуре программы.
Это сообщение отредактировал(а) Poseidon - 28.11.2013, 11:02 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
harakiri |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 17.1.2011 Репутация: нет Всего: нет |
Poseidon, извините, я неправильно выразился. Есть форма f1 созданная динамически из главной формы. На форме f1 есть кнопка, которая создает и отображает форму f2. Нужно из формы f2(например, при закрытии) изменить label1.Caption который находиться на форме f1.
|
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
В таком случае f1.label1.Caption. Что не получается? Приведите "боевой" код, а то не понятно что не так.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
harakiri |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 17.1.2011 Репутация: нет Всего: нет |
Главная форма:
Форма на которой расположен Label, Caption которого нужно изменить:
Форма из которой нужно изменить Caption:
При нажатии на TForm2.Button1 ошибка - Access violationat adress... Это сообщение отредактировал(а) harakiri - 28.11.2013, 16:27 |
||||||
|
|||||||
БелАмор |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 10.6.2010 Где: Россия Репутация: 7 Всего: 17 |
Логично. Если вам из form2 в form1 кроме Label1 ничего не надо, то можно в form2 сделать поле типа TLabel, и при создании form2 сразу присваивать ему ссылку на соответствующий label, и обращаться к нему потом через это поле, вообще не интересуясь, где он находится. |
||||||
|
|||||||
harakiri |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 17.1.2011 Репутация: нет Всего: нет |
Если Вам не трудно, можете немножко подробнее объяснить. |
|||
|
||||
БелАмор |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 10.6.2010 Где: Россия Репутация: 7 Всего: 17 |
Есть важный принцип, которого следует придерживаться, и не отходить от него без очень веских на то оснований. Принцип следующий: 1. Вызывающий должен знать вызываемого. 2. Вызываемый не должен знать вызывающего. 3. Все необходимые исходные данные вызываемому передаются либо через параметры, либо заранее сообщаются через его свойства. 4. Если нужно вернуть результат, то вызываемый это делает через возвращаемое значение, либо самостоятельно кладёт его туда, куда ему указали через параметры или свойства. В соответствии с этим принципом, Form2 ничего не должна знать о Form1, в том числе то, что там есть Label1. Однако, если Form2 должна что-то писать в Form1.Label1, то ей нужен некий минимум информации. Этот минимум - ссылка на этот самый TLabel. Знать, что он расположен на форме Form1 совершенно не обязательно, более того, при необходимости можно будет выводить в любой нужный TLabel на любой нужной форме, не привязываясь ни к чему конкретному заранее. Поэтому достаточно каким-либо образом сообщить Form2, куда она должна будет выводить своё сообщение. Это можно сделать примерно так:
|
||||||
|
|||||||
Агрох |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 176 Регистрация: 6.4.2013 Где: Москва Репутация: 1 Всего: 6 |
Так у вас же форма, у которой надо Label1.Caption поменять, называется не form1 а f1. Т.е. и вызвать надо не
Я не удивлюсь если вы form1 вообще не создавали, т.к. она, судя по всему, вам не нужна. Т.е. вам нужно создавать её только динамически. Кстати, Poseidon это сразу написал, ещё не видя вашего кода. Это сообщение отредактировал(а) Агрох - 2.12.2013, 09:41 --------------------
Putin here, Putin there, Putin almost everywhere! |
||||
|
|||||
harakiri |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 17.1.2011 Репутация: нет Всего: нет |
БелАмор, огромное спасибо. Все получилось, не все еще пока понятно, но будем читать. Еще раз спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |