首页 > 解决方案 > 跨表单传递变量

问题描述

所以我试图将一个变量(iCode)传递给另一个表单,但我似乎无法找到它为什么不起作用的问题。

这是代码示例

表格 1:

  public
    iCode : integer;
  end;

var
  DisplayCodeForm: TDisplayCodeForm;

implementation

{$R *.dfm}

uses VerifyFormUnit;

procedure TDisplayCodeForm.btnNextClick(Sender: TObject);
begin
  VerifyForm.ShowModal;
end;

// =============================Generation of Code=============================//

procedure TDisplayCodeForm.FormCreate(Sender: TObject);
begin
  iCode := Random(1000000);
  edtDisplayCode.Text := IntToStr(iCode);
end;

end.

表格 2:

  public
    { Public declarations }
  end;

var
  VerifyForm: TVerifyForm;

implementation

{$R *.dfm}

uses CAPTCHAFormUnit, LoginFormUnit, OTPDisplayFormUnit;

// ================================Functionality=================================//

procedure TVerifyForm.btnOTPClick(Sender: TObject);
begin
  ShowMessage(IntToStr(iCode));
end;

end.

如您所见,我在“使用”部分中引用了两个单位

(我所指的单位也是“OTPDisplayFormUnit”和“VerifyFormUnit”)

Form2 中的错误位于变量“iCode”下,这意味着它无法从其他表单中识别出该变量

标签: delphi

解决方案


在表单中使用属性并为该属性赋值,示例代码如下

    TForm1 = Class (Form)
    private 
      FIcode : Integer ; 
      ....
    public 
       ....
    ///  send data  to any class  via  property syntax, as good coding 
    ///  style, do this in any programming language like JAVA, C++  or 
    ///  DELPHI 
    property ICode : Integer  read  FIcode  write  FIcode;
    end;  
    
    ///   in your application
    .....
var
    aForm : TForm1;
    ...
    begin
    ...
    aForm.ICode:=1; 
    ....
    end; 

更好的编码风格:使用 getter 和 setter 函数而不是直接将值分配给 Form1


推荐阅读