| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Обращение к дочерней форме MDI из модальной. |
| Автор: AlexV1 26.2.2003, 15:47 |
| Есть приложение MDI, в котором главная форма frmMain (fsMDIForm), дочерняя форма frmChld1 (fsMDIChild) и третья - не главная и не дочерняя, а совершенно отдельная форма frmMyDialog (fsNormal). Форма frmMyDialog вызывается из frmChld1 по кнопке. Затем из frmMyDialog нужно обратиться к контролу lblTitle формы frmChld1. Как это правильно сделать ? Если так: frmChld1.lblTitle.caption:=..., то во время выполнения программы выдает Access Violation ... Может через главную форму frmMain типа frmMain.Children[1].lblTitle.caption:=... Но так нельзя, не находит lblTitle. |
| Автор: SmaLL 26.2.2003, 17:08 | ||||
Если обращаться через главную форму, то надо писать так
А вообще это плохой метод, лучше пересмотреть логику программы. |
| Автор: AlexV1 26.2.2003, 17:15 | ||
Так уже пробовал. Не работает |
| Автор: SmaLL 26.2.2003, 17:25 |
| Тебе обязательно из модальной формы менять капшн чилдрена? Может лучше пусть сам чилдрен меняет свой капшн? Пусть модальное окно возвращает какое-нибудь значение после закрытия, а чилдрен будет его брать и совать в свой капшн. |
| Автор: AlexV1 26.2.2003, 17:44 |
| Лучше бы сразу из модального окна суваться в дочернее. Если перестроить логику программы, то как ? Есть гл.форма MDI и несколько дочерних окон. В одной из дочерних окон нужно сделать кнопку вызова модальной формы настроек, причем изменение настроек в модальной форме должны тут же отображаться в дочерней форме, из которой была вызвана форма настроек. |
| Автор: SmaLL 26.2.2003, 19:29 | ||||||||
Конечно лучше - если по быстрому, но это плохой стиль программирования. А спешка, как говориться нужна при ловле блох. Лучше если модальная форма не будет знать ничего о вызвавшей еЁ дочерней форме. Если, например, ты захочешь использовать это же модальное окно для настроек какого-нибудь другой дочерней формы, то модальная форма должна будет знать обо всех дочерних формах. А это лишний код, низкая гибкость и т.д. и т.п.
Например можно завести в модальной форме свойство типа TString, и в него, например, при закрытии формы совать значения твоих настроек:
Потом в дочерней форме после вызова модальной формы можно прочитать эти значения:
|
| Автор: AlexV1 26.2.2003, 20:22 |
| ok. Понятно. Thanks! |
| Автор: Il'ya 27.2.2003, 03:05 |
| Вопрос где USES. :-) |
| Автор: Sluggard 23.4.2003, 22:21 |
| К дочернему окну можно обратится из любого окна можно по имени, номеру или к актвному (это чаще всего) if not (ActiveMDIChild = Nil) then if ActiveMDIChild is TMDIChild then with TMDIChild(ActiveMDIChild) do begin // Давайте запишем что нибудь в активную форму end; |
| Автор: Dapo 24.4.2003, 01:35 | ||
Надо полагать, что форма настроек у тебя создается динамически? Может такой вариант: При создании формы указываешь ей в качестве Owner-a ту форму настройки которой хочешь изменить... И через Owner влияешь... :-) Чем плохо? Нет лишнего кода и гибко. |
| Автор: Dapo 24.4.2003, 01:40 |
| Я цитировал Small-a потому что не согласен по поводу "...должна знать обо всех дочерних формах...". Извиняюсь за лишний топ. |