如何在TTabSheet中显示模式或从同一表单获取值?

时间:2018-02-21 07:14:58

标签: vcl delphi

我有一个表单,我以两种不同的方式显示。第一个是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

0 个答案:

没有答案