【发布时间】:2019-10-29 13:40:44
【问题描述】:
我有一个 TreeList ,有很多 Items ,每个项目都有它自己的唯一 ID 。 我允许用户一次打开多个 ID。但是我想防止用户两次打开同一个ID。
所以我考虑创建一个简单的动态数组,在其中存储哪个 TreeList ID 连接到哪个 Form HWND 。如果我在我的列表中找到一个带有匹配 HWND 的 ID,那么我只需将已经创建的表单带到前台。
Application.CreateForm(TChapter, Chapter);
Chapter.PopupParent:=Main;
Chapter.FID:=qryTreeID.Value;
Chapter.Caption:=qryTreeName.Value+Cardinal(Chapter.Handle).ToString;
Chapter.Show;
这就是我创建表单的方式。这只是一个“基本”示例。我只是想确保句柄是唯一的,我打开了多个表单,数字总是不同的。但我想确定一下。
谢谢!
【问题讨论】:
-
当您似乎已经在 TChapter 表单的 FID 字段/属性中获得了可用信息时,为什么还要创建一个新数组。因此,您所要做的就是遍历所有表单以查看具有特定 FID 的表单是否已经打开。如果是,您只需显示它。如果不是,则创建一个新的。
-
将
HWND转换为Cardinal在 64 位上可能存在风险,其中HWND是 64 位类型,但由于实现细节,您将侥幸逃脱。你不会逃脱的是窗口娱乐。表单的唯一 ID 是它自己的引用。将Cardinal(Chapter.Handle)替换为NativeUInt(Chapter)。