![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
доступ из подчененной формы к полю формы-создателя
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
?