好的,如果这有点令人困惑,我很抱歉,但我不知道如何更好地解释它。我有一个聊天表单,在用户事先在TLoginForm中验证后显示。
用户登录然后显示chatForm:
with TChatForm.Create(Application) do
begin
Show;
end;
我的问题是,如何将用户名传递给chatForm,以便我可以在聊天中将其用作昵称,考虑到表单自动连接到服务器OnShow的事实,所以我将需要已经发送的用户名。
我是delphi的新手,所以如果我的代码中有任何错误,请原谅。
答案 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;