我正在练习写一个局域网内聊天的程序,我有一个TTreeview,里面放一些局域网内的用户,还有一个TForm2,用于接收和发送消息,通过以下的代码来点击不同的用户,并产生一个聊天的窗体:
procedure TForm1.N13Click(Sender: TObject);
var
 form:array[0..100] of TForm2;
 i:integer;
 sCaption : String;begin
 
 i:=treeview1.Selected.Index;
 sCaption := 'Chatting with '+treeview1.Selected.Text;
 form[i]:=TForm2.Create(application);
 form[i].Caption:=sCaption;
 form[i].Show;
end;我的问题是如何让程序来识别用户与窗体的对应关系,如果与其中一个用户的对话窗体已经产生,下次再一次点击时不会再产生一个新的窗体,而直接让它show,谢谢!

解决方案 »

  1.   

    为何不封装一个独立的TChatForm呢,在类接口方法中可以关联用户节点信息
      

  2.   

    if assigned(formname) then formname.show
    else 新建窗体
      

  3.   

    不行,出现了access violation的错误,可否指点详细一点?多谢!
      

  4.   

    if Assigned(Form[i]) then
      Form[i].Show
    else 
    begin
      Form[i]:= TForm2.Create(Application);
      Form[i].Caption:= sCaption;
      Form[i].Show;
    end;
      

  5.   

    要不你就showmodal吧
    这样必须关掉当前的窗口才能操作主窗口
    所以打开当点击主窗口产生聊天窗口的时候
    不会有已经存在的聊天窗口了
      

  6.   

    小不点的办法,出现了access violation的错误聊天时是可以出现多个小窗口与不同的朋友聊天的,如果一次只能出现一个窗口肯定不好,大家想想有无好的办法
      

  7.   

    if not Assigned(Form[i]) then
    begin
      Form[i]:= TForm2.Create(Application);
      Form[i].Caption:= sCaption;
    end;
    Form[i].Show;
      

  8.   

    添加一个list,每添加一个窗体就在list里记录一下这个窗体对应的用户,关闭窗口的时候把这个用户删去。
    创建窗体之前判断一下选中的用户是否在这个list里就行了。