在delphi SDI中创建新表单时传递参数

时间:2012-12-25 18:25:26

标签: delphi parameters vcl

好的,如果这有点令人困惑,我很抱歉,但我不知道如何更好地解释它。我有一个聊天表单,在用户事先在TLoginForm中验证后显示。

用户登录然后显示chatForm:

with TChatForm.Create(Application) do
begin
    Show;
end;

我的问题是,如何将用户名传递给chatForm,以便我可以在聊天中将其用作昵称,考虑到表单自动连接到服务器OnShow的事实,所以我将需要已经发送的用户名。

我是delphi的新手,所以如果我的代码中有任何错误,请原谅。

2 个答案:

答案 0 :(得分:11)

如果用户名应在对象的整个生命周期内修复,则应将其传递给构造函数。好处是不可能滥用课程而忘记分配用户名。

声明一个构造函数,该构造函数接收参数中的额外信息:

type
  TMyForm = class(TForm)
  private
    FUserName: string;
  public
    constructor Create(AOwner: TComponent; 
        const UserName: string);
  end;

constructor TMyForm.Create(AOwner: TComponent; 
        const UserName: string);
begin
  inherited Create(AOwner);
  FUserName := UserName;
end;

创建如下表单:

MyForm := TMyForm.Create(Application, UserName);

答案 1 :(得分:4)

在聊天表单中添加公开方法。

with TChatForm.Create(Application) do
begin
  PassUserName(FUsername);
  Show;
end;

procedure TChatForm.PassUserName(const aUsername: string);
begin
  Caption := 'You can now chat: '+ aUsername;
end;

这使您可以通过简单地添加新的公共方法,将您想要的任何内容传递到聊天表单中,而无需更改现有的公共方法 不使用“with”或FUsername来解决问题的示例:

frmChat := TChatForm.Create(Application);
frmChat.Nickname := aUsername;
frmChat.Show;

TChatForm = class(TForm)
private
  FUsername : string;

  procedure SetNickName(const Value: string);
  function GetNickName: string;
public
  property NickName: string read GetNickName write SetNickName;
end;

procedure TChatForm.SetNickName(const Value: string);
begin
  FUsername := Value;
end;
function TChatForm.GetNickName: string;
begin
  Result := FUsername;
end;