我正在开发一个多文档应用程序。目前它使用 MDI,这对我(作为开发人员)以及我相信的用户来说都非常方便。但是有一个“反对” - 我还没有找到快速加载许多子窗口的解决方案(每次创建并最大化窗口以填充父区域时,都会有一个调整大小的“动画”,这需要很多时间)到目前为止,因此我正在考虑切换回选项卡式界面(这需要更多的工作,我需要将表单“嵌入”到页面表中,因为有许多“种类”的表单可用,其中一些用于编辑文本文档,一些用于其他对象)...
那么,你的意见是什么?我应该使用 MDI 还是选项卡式界面?
为避免新 MDI 子窗口的大小调整动画(从而延迟),请在创建子窗口之前向父 TForm 的 ClientHandle 属性发送 WM_SETREDRAW 消息,然后在完成后再次发送,即:
Self.Perform(WM_SETREDRAW, False, 0);
... create child windows as needed ...
Self.Perform(WM_SETREDRAW, True, 0);
Windows.InvalidateRect(Self.ClientHandle, nil, True);
Windows.UpdateWindow(Self.ClientHandle);
MDI 是在 Windows 3 天(或者可能更早?)开发的,现在没有得到很好的支持。如果您需要具有不同形式的多个文档,我建议使用选项卡式界面。使用框架而不是表单,并创建新选项卡并在其上放置一个框架,对齐 alClient。
MDI 肯定有比你引用的更多的负面观点。您可以在 Wikipedia 中找到关于此的讨论,甚至在 Windows 界面指南中也可以找到。MDI 已被弃用多年。Microsoft 本身不再在其任何大型应用程序中使用其“标准”形式的 MDI,它们通常只提供 MDI 仿真和其他 UI 样式。
如果您的程序适用于具有多个屏幕的用户,那么 MDI 和基于选项卡的 UI 都存在将文档窗口限制在父窗口内部的问题。
通过适当的应用程序设计,您实际上不必在 MDI 和基于选项卡的 UI 之间做出决定。让您的用户决定他们最熟悉的 UI,以及最适合他们工作风格的 UI。也允许多个独立的顶级文档窗口(在一个应用程序实例中或在多个)。它可以像为文档创建框架类并在运行时决定是否将它们嵌入选项卡控件、MDI 子窗口或顶级窗口一样简单。
问题:用户一次能够看到多个嵌入式表单或框架是否重要?如果没有,肯定会选择标签。
选项卡使导航和查看可用内容变得更容易。但是使用标准的 PageControl,您一次只能看到一个选项卡 - 没有“平铺”或“级联”。例如,当用户需要将内容从一个选项卡拖到另一个选项卡时,就会出现问题。当然可以,但不是那么方便——因为这一次用户看不到他们将东西拖到哪里。
要克服此限制,您必须查看停靠 UI,这会增加复杂性,但可以为您提供选项卡以及能够平铺它们。