7

わかりました。少し混乱している場合は申し訳ありませんが、それをより適切に説明する方法がわかりません。ユーザーが以前にTLoginFormで認証した後に表示されるチャットフォームがあります。

ログインしたユーザーは、chatFormを表示します。

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

私の問題は、フォームがサーバーOnShowに自動的に接続するという事実を考慮して、チャットフォームにユーザー名を渡してチャットでニックネームとして使用できるようにする方法です。そのため、ユーザー名はすでに送信されている必要があります。

私はdelphiを初めて使用するので、コードに間違いがあった場合は、すみません。

4

2 に答える 2

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);
于 2012-12-25T18:30:00.367 に答える
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;
于 2012-12-25T18:31:50.443 に答える