delphi 调用子窗体传值的问题?

有2个窗体调用一个子窗体,
第一个窗体传值给子窗体可以,第二个窗体传值有值的,跟踪到子窗体时值为空。
子窗体是动态创建的。
比如第一个窗体传值:
sName := '1';
子窗体SHOW时显示1;正确。
第二个窗体传值过去:
sName := '2';
子窗体SHOW时是空,问题就在这里了?
第一个窗体用的是全局变量sName,第二个窗体也是一个sName的全局变量。

完整代码:https://download.csdn.net/download/caozhy/10538409

贴出代码看下,或者代码全部压缩放到网盘里,给链接。

不需要用全局变量,在子窗口里面定义一个成员变量

 unit udlg;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Tdlg = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    val :String; //定义在这里
  end;

var
  dlg: Tdlg;

implementation

{$R *.dfm}

procedure Tdlg.FormShow(Sender: TObject);
begin
  Label1.Caption := val; //显示
end;

end.

调用:

 procedure TForm2.Button1Click(Sender: TObject);
var
  dlg: Tdlg;
begin
  dlg := Tdlg.Create(self);
  dlg.val := Edit1.Text; //传过去
  dlg.ShowModal();//显示子窗口
end;

图片说明