delphi - 跨表单传递变量
问题描述
所以我试图将一个变量(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”下,这意味着它无法从其他表单中识别出该变量
解决方案
在表单中使用属性并为该属性赋值,示例代码如下
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
推荐阅读
- java - 使用 Atom 创建 Java 环境变量
- r - 根据该列中的滞后值改变一个新列 - dplyr 方法
- java - 使用 Serenity BDD 剧本管理 React DOM
- reactjs - 将 React Redux 与路由器集成时出现问题?
- scala - Flink Core 和 Flink CEP 在能力方面有什么区别?
- javascript - 如何在 JavaScript 中将二维数组中的相邻单元格随机组合在一起?
- javascript - 表单邮件程序正在工作,但现在没有
- python - 列表对象的python变量名,最佳实践
- r - R:按数据集分组,条件是组中特定列中的所有值都符合某些要求
- r - 如何在 R 中按中位数或众数填充 NA