首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Delphi中锁定克隆表单?

如何在Delphi中锁定克隆表单?
EN

Stack Overflow用户
提问于 2013-05-07 07:01:18
回答 1查看 364关注 0票数 1

我正在编写一个聊天程序,它有一群客户端连接到它,并将它们填充到一个列表视图中,我希望能够单击每个客户端,打开一个看起来像聊天的表单,但我希望能够同时对多个客户端这样做。

我已经为每个实例克隆了Form2 (聊天窗口),但是我需要知道如何锁定克隆的表单来进行更改,比如Form2.RichEdit.Lines.Add

然而,当我尝试这样做时,它不工作,因为我没有锁定到正确的形式,因为它是克隆的,我假设它不再是Form2

任何有关这方面的信息将是非常感谢的。

更新

我要重述一下我想做的事。

我将解释我试图做什么:我有一个聊天程序(服务器),它侦听客户端通过Indy10套接字进行连接,当客户端连接它时,它用用户名填充ListView,当我单击用户名(服务器)打开私有信息表单时,我可以在那里与客户机聊天。

我希望能够有多个客户端连接,我希望能够点击多少我想要的,让它克隆私密的形式,并有两个单独的聊天窗口,以两个不同的客户端。

问题是:当试图单击seccond用户时,程序会变得混乱,无法锁定到这个seccond用户的私密形式(克隆)。

如果需要更多的信息,我的意思是任何事情,请不要犹豫,问我会开几个小时,并不断检查这条线。

我已经被困在这上面三天了,所以我真的很想解决这个问题,并继续我的项目。如有任何资料,敬请见谅。,提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-05-07 10:06:21

打开项目选项并从自动创建列表中删除Form2。不要再使用那个变量了。

TForm2重命名为有意义的名称。一旦你在你的程序中有10张表格,你就会忘记你所说的数字2,5,7.总是给变量有意义的名称,其中包括组件,其中包括表单。在这里,我将把TForm2命名为TPrivMessageForm

使用一个特殊的变量数组来保留几个窗体,而不是一个全局变量。例如:

代码语言:javascript
复制
Type TChatUser = string; 
// to begin with, user is a name. Then it may become URL, or GUID or something    
// complex like `record` or `class` or whatever

Type TPMForms = TDictionary<TChatUser, TPrivMessageForm>; 

PMForms := TPMForms.Create;

单击用户后创建新的私有消息窗口:

代码语言:javascript
复制
if not PMForms.ContainsKey(ClickedUser) 
   then PMForms.Add(ClickedUser, TPrivMessageForm.Create(Application) );
PMForms[ClickedUser].ChatWith := ClickedUser; // variable in ex-TForm2 to tell several instances apart

当这类表单关闭时-它应该通过它的OnClose

  • PMForms列表中删除自身(这样就不会有悬空的指针了)
  • 选择caRelease来关闭操作(使VCL实际上释放表单对象)

另请参阅

  • http://delphi.about.com/od/beginners/a/using-t-dictionary-hash-tables-in-delphi.htm
  • (Delphi)

PS。请编辑您的问题,并添加标签与您的具体德尔菲版本。

PPS。下载现成的牙线聊天程序,只需阅读和学习他们是如何做到的。也许,与其打开一个自由浮动(乱糟糟的桌面)表单,不如在PageControl中打开Tab。“利用源头,卢克”

对于后者来说,要找到来源,就必须在www.google.com上键入两个单词"Visual“,并获得http://sourceforge.net/p/visualirc/mercurial/ci/default/tree/ --这是我忽略了的重要信息,因为我确信,一个对查找源感兴趣的人()能够自己完成这个任务。

公私伙伴关系。这些不是“克隆”:克隆是分开的对象。您所说的是同一个表单类的几个实例。就像表单上可能有两个或多个标签一样,应用程序中也可以有两个或两个以上的表单。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16413071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档