在我的 MDI 应用程序中防止窗口混乱的最佳方法

Posted

技术标签:

【中文标题】在我的 MDI 应用程序中防止窗口混乱的最佳方法【英文标题】:Best way to prevent window cluttering in my MDI application 【发布时间】:2010-10-20 09:00:34 【问题描述】:

我目前正在.net 4.0 中设计一个 MDI 应用程序(一个自定义 CRM),我开始不喜欢整个界面,因为没有真正的方法来跟踪哪些窗口是打开或关闭的,它可能会导致到一个非常混乱的界面。

避免这种情况的最佳方法是什么? - 我应该实现一个任务栏来跟踪每个打开的 mdi 孩子吗? - 我应该使用对话框来防止多任务处理吗? - 有什么方法可以改变mdi容器上最小化窗口的大小(为什么它们这么小,你甚至无法阅读完整的表单标题......)

抱歉有这么多问题,提前谢谢。

【问题讨论】:

是否必须使用MDI?就个人而言,我更喜欢真正的窗口,然后你已经有了一个工作任务栏(Windows 内置),你可以不受限制地安排它们(否则 MDI 可能会导致多显示器配置问题。)如果你今天查看应用程序,一般来说,它们不是t MDI(例如,Office 不再是 MDI。)浏览器是个例外,它们会使用 MDI 而不是远离它们,但它们有选项卡,并且一次只能有一个子项可见,并且只有最大化。保持简单:) 【参考方案1】:

MDI 有其用途,但正如您所发现的那样,它很容易导致界面混乱、难以使用。当前流行的处理此问题的方法是添加一个选项卡控件(如在任何 Web 浏览器或大多数文本编辑器/IDE 中)以允许在打开的视图之间切换。我猜这离任务栏很近。

其他选项是 Outlook 栏(Outlook 左侧下方的大视图选择器)等控件,或者可能只是一个带有当前打开视图的简单列表框。

或者,考虑您真正希望多个窗口可用的频率以及它们中的大多数是否是“工具窗口”。如果是这样,或许可以考虑为这些工具窗口使用停靠窗口,并为应用程序的其余部分使用单文档界面。一切都取决于您实际在做什么!

【讨论】:

【参考方案2】:

MDI 窗口管理已经内置了通过菜单跟踪打开的窗口。 ToolStripMenu 有一个 MdiWindowListItem,您可以将其设置为包含打开窗口列表的菜单项的引用。如果菜单附加到 MDI 父窗口,子窗口会自动填充菜单项。

MDI 的目标之一是允许多任务处理。如果这不是您想要的,请使用不同的设计。

就更改最小化窗口的大小而言,显然使用标准 Windows 界面是不可能的。在此处查看更多信息:Is it possible to change size of minimized window in MDI C# Winforms。但是您可以删除标准的最小化按钮,添加您自己的按钮,然后在正常状态的窗口中执行您想要的操作。

【讨论】:

以上是关于在我的 MDI 应用程序中防止窗口混乱的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

没有装饰的 MDI 文档任务栏缩略图

C#-MDI-多窗口通信方法总结

MDI 子窗口创建失败

防止浏览器在历史记录中存储当前页面

确保两个人不会在我的网络应用程序上编辑同一行的最佳方法是啥?

表单未作为活动窗口打开