Delphi跨窗体传递iCode变量时Form2无法识别该变量问题求助
问题根因
你声明的iCode是TDisplayCodeForm类的公共成员变量,不属于全局作用域,因此在Form2中直接调用变量名时,编译器无法找到对应的变量定义。
修复方案
方案1:指定实例访问(改动最小)
Form2已经引用了Form1的单元,直接在调用时指定iCode所属的全局窗体实例即可:
procedure TVerifyForm.btnOTPClick(Sender: TObject); begin ShowMessage(IntToStr(DisplayCodeForm.iCode)); end;
方案2:解耦传值(更规范)
适合项目迭代使用,避免跨单元强依赖:
- 先在Form2的类公共段新增接收用的成员变量
type TVerifyForm = class(TForm) // 原有组件、方法声明 public iCode: Integer; end;
- Form1打开Form2前主动传值
procedure TDisplayCodeForm.btnNextClick(Sender: TObject); begin VerifyForm.iCode := Self.iCode; VerifyForm.ShowModal; end;
- 后续Form2中可以直接调用自身的
iCode变量,不需要再引用Form1单元。
方案3:声明全局变量(不推荐)
如果需要多处频繁调用该变量,可以把iCode定义为Form1单元的全局变量:
// OTPDisplayFormUnit 接口段 var DisplayCodeForm: TDisplayCodeForm; iCode: Integer; // 新增全局变量声明
其他引用了该单元的地方可以直接调用iCode。
内容的提问来源于stack exchange,提问作者Haroshi
相关产品推荐
相关产品推荐

