我有一个表单,我以两种不同的方式显示。第一个是TPageControl中的TTabSheet的子代。我不需要收集任何数据,它工作正常。
第一种方式
with TTabSheet.Create(APageControl) do
begin
PageControl := APageControl;
Caption := 'Child Form Caption Info';
APageControl.ActivePageIndex := PageIndex;
end;
with TMyDefinitionForm.CreateFor(Application, 'DEF_TYPE', 'Child Form Caption Info') do
begin
Parent := APageControl.Pages[APageControl.ActivePageIndex];
Align := alClient;
Name := 'ChildFormName';
Show;
end;
第二个是通过不同的细节形式创建,并且应该从相同的表单返回一些所需的值。但是当我将此表单创建为第一个表单时,我无法在TTabSheet中将表单显示为 ShowModal 。 (它无法激活或聚焦)
第二种方式
var
AComponent: TComponent;
begin
{This is different detail form and its owner is DashboardForm which has TPageControl}
AComponent := (Self.Owner.FindComponent('APageControl') as TPageControl);
with TTabSheet.Create(AComponent) do
begin
PageControl := (AComponent as TPageControl);
Caption := 'Child Form Caption Info';
(AComponent as TPageControl).ActivePageIndex := PageIndex;
end;
with TMyDefinitionForm.CreateFor(Self, 'DEF_TYPE', 'Child Form Caption Info') do
begin
Parent := (AComponent as TPageControl).Pages[(AComponent as TPageControl).ActivePageIndex];
Name := 'ChildFormName';
Show; { If I change this to ShowModal, I can't click to my form }
end;
txtFieldOne.Text := DataModuleObject.Field; {sample usage}
txtFieldTwo.Text := DataModuleObject.Field2; {sample usage}
SomeVariables:= DataModuleObject.Field3; {sample usage}
end;
问题:我有一个DataModule,它包含一般用法的数据对象。当我创建这个子表单时,我必须为这些对象设置一些值,在关闭子表单后,这些数据应该设置为我的第一个表单。为此,我总是使用ShowModal,然后在下一行中将这些值设置为我的第一个表单。但现在我无法在TTabSheet中打开ShowModal。
问题:有没有办法从子表格中获取这些值?
奖金问题:我可以使用ShowModal然后我可以获取这些值,如果我只是创建该表单。我应该在TTabSheet中正常创建表单而不设置父控件吗?
注意:使用XE10.1 Berlin