Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

доступ из подчененной формы к полю формы-создателя


andreoman ©   (2007-09-05 19:24:00) 

Здравствуйте. Есть форма frmMain которая НЕ прописана в dpr-файле как Application.CreateForm(TfrmMain, frmMain),
а создается при помощи:
frmMain :=TfrmMain .Create(Self);
frmMain.Show();
В этой форме есть public поле FCounterOver:TCounterOver;
В свою очередь frmMain создает тоже немодальную форму frmChild:
frmChild :=TfrmChild.Create(Self);
frmChild.Show();
Подскажите, как можно обратиться из frmChild к полю FCounterOver?
(Parent as TfrmMain).FCounterOver не проходит !!! Неужели в frmChild необходимо передавать ссылку на frmMain?


evvcom   (2007-09-06 13:02:00) [1]


> Но данный способ будет правильно работать только если frmChild
> создается именно так: frmChild :=TfrmChild.Create(Self);
> где Self - это frmMain - т.е. в ее(frmMain) методе....

Данный да, а такой всегда:

function TfrmChild.GetCounterOver: TCounterOver;
begin
if Owner is TfrmMain then
 Result:=TfrmMain(Owner).FCounterOver
else
 raise Exception.Create('Низя меня так создавать! :)');
end;


andreoman   (2007-09-06 11:42:00) [2]

Огромнейшее мерси, то что надо


clickmaker   (2007-09-06 10:38:00) [3]

переопредели конструктор TfrmChild и передавай туда, что хочешь


GrayFace   (2007-09-06 10:36:00) [4]

Либо передавать ссылку на frmMain, либо сделать var frmMain:TfrmMain в interface.


MsGuns   (2007-09-05 22:44:00) [5]

В Main:

implementation

use ChildForm


В Child:

interface

use ..., Main


{RASkov}   (2007-09-05 20:17:00) [6]

код выше - это
unit UfrmChild; //Модуль с TfrmChild;


{RASkov}   (2007-09-05 20:14:00) [7]

> [2] andreoman ©   (05.09.07 19:27)

....
   Button: TButton;
   procedure ButtonClick();
 private
   function GetCounterOver: TCounterOver;
   property CounterOver: TCounterOver read GetCounterOver;
 end;

var
 frmChild: TfrmChild;

implementation

uses UfrmMain; //< Unit с TfrmMain

function TfrmChild.GetCounterOver: TCounterOver;
begin
 Result:=TfrmMain(Owner).FCounterOver;
end;

procedure TfrmChild.ButtonClick();
ACO: TCounterOver;
begin
 ACO:=CounterOver;
end;


Но данный способ будет правильно работать только если frmChild создается именно так: frmChild :=TfrmChild.Create( Self);
где Self - это frmMain - т.е. в ее(frmMain) методе....


andreoman   (2007-09-05 19:27:00) [8]

тоже не идет


q1   (2007-09-05 19:25:00) [9]

owner
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо