如何在Delphi 10.4中关联两个TEdit组件实现用户名跨窗体传递
Delphi 10.4 跨窗体传递TEdit用户名实现方案
以下方案均适配Delphi 10.4版本,默认命名约定:登录窗体为frmLogin,登录页用户名输入框为edtLoginUsername,后续业务窗体为frmMain,目标显示用户名的输入框为edtMainUsername,可根据你实际的命名替换。
方案1:直接控件引用(适合小型项目,实现最快)
操作步骤:
- 在登录窗体的代码单元
uses节,引入后续窗体的代码单元(如后续窗体单元名为MainUnit,直接添加到uses列表即可) - 在登录验证通过的逻辑后,直接给目标窗体的TEdit赋值,登录按钮点击事件示例代码:
procedure TfrmLogin.btnLoginClick(Sender: TObject); begin // 原有账号密码校验逻辑,校验通过后执行以下代码 if CheckAccountPass() then // 替换为你自己的校验逻辑 begin frmMain := TfrmMain.Create(nil); try // 直接赋值给下一个窗体的TEdit frmMain.edtMainUsername.Text := edtLoginUsername.Text; frmMain.ShowModal; finally frmMain.Free; end; Close; // 关闭登录窗体 end; end;
如果你的后续窗体是项目自动创建的(非动态创建),无需写Create和Free逻辑,直接赋值后调用Show/ShowModal即可
方案2:全局变量中转(适合多窗体需要复用用户名的场景)
操作步骤:
- 新建公共单元
PublicUnit.pas,定义全局变量存储用户名:
unit PublicUnit; interface var G_CurrentUsername: string; // 全局存储当前登录用户名 implementation end.
- 登录窗体引用
PublicUnit,校验通过后给全局变量赋值:
G_CurrentUsername := edtLoginUsername.Text;
- 后续窗体引用
PublicUnit,在OnCreate或OnShow事件中给TEdit赋值:
procedure TfrmMain.FormCreate(Sender: TObject); begin edtMainUsername.Text := G_CurrentUsername; end;
方案3:窗体属性传递(符合封装规范,推荐中大型项目使用)
操作步骤:
- 在后续窗体的类定义中新增公开的Username属性:
type TfrmMain = class(TForm) edtMainUsername: TEdit; private FUsername: string; procedure SetUsername(const Value: string); public property Username: string read FUsername write SetUsername; end;
- 实现SetUsername方法,属性赋值时自动更新TEdit内容:
procedure TfrmMain.SetUsername(const Value: string); begin FUsername := Value; edtMainUsername.Text := FUsername; end;
- 登录校验通过后给属性赋值即可:
frmMain := TfrmMain.Create(nil); try frmMain.Username := edtLoginUsername.Text; frmMain.ShowModal; finally frmMain.Free; end;
常见问题排查
- 若提示控件不可访问,检查目标TEdit的
Modifiers属性是否为默认的published或public - 若出现单元循环引用报错,可将单元引用放到代码单元的
implementation节下而非interface节
内容的提问来源于stack exchange,提问作者Franklin
相关产品推荐
相关产品推荐

