抱歉如果我的表述有点混乱,我不知道该如何更好地解释。在TLoginForm中用户进行身份验证后,将显示聊天表单。
用户登录后显示聊天表单:
with TChatForm.Create(Application) do
begin
Show;
end;
我的问题是,我如何将用户名传递给聊天表单,以便在聊天中使用它作为昵称,考虑到表单在OnShow时自动连接到服务器,所以我需要提前发送用户名。
我是Delphi的新手,如果我的代码有任何错误,请多多包涵。
抱歉如果我的表述有点混乱,我不知道该如何更好地解释。在TLoginForm中用户进行身份验证后,将显示聊天表单。
用户登录后显示聊天表单:
with TChatForm.Create(Application) do
begin
Show;
end;
我的问题是,我如何将用户名传递给聊天表单,以便在聊天中使用它作为昵称,考虑到表单在OnShow时自动连接到服务器,所以我需要提前发送用户名。
我是Delphi的新手,如果我的代码有任何错误,请多多包涵。
如果用户名在对象整个生命周期中都应该保持不变,则应在构造函数中传递它。好处是可以避免误用类并忘记分配用户名。
声明一个构造函数,通过参数接收额外的信息:
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);
with TChatForm.Create(Application) do
begin
PassUserName(FUsername);
Show;
end;
procedure TChatForm.PassUserName(const aUsername: string);
begin
Caption := 'You can now chat: '+ aUsername;
end;
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;
OnCreate
事件。使用与答案中代码完全相同的构造函数
。 - David Heffernanreintroduce
关键字以抑制非虚方法警告的隐藏。 - Marus Gradinaru