【发布时间】:2011-06-09 02:08:40
【问题描述】:
问题:
有没有什么有效的方法可以在 .Net 中安排许多独立的 Windows 窗体?
我必须在我的应用程序中同时显示许多表单。
它是一个图表应用程序,表格的数量取决于用户想要什么,所以它必须是动态的。
是否可以像 MDI Layout 那样排列?
示例:
例如,如果用户选择 12 个输出图表形式,我希望它们在默认屏幕上自动排列为 4x3。理想情况下,用户甚至可以在他拥有的显示器中选择多个目标屏幕。
为什么不使用 MDI :
我不想要 MDI,因为我的应用程序是多屏的,我想留给用户机会将他的外部输出图表窗口分散在上面随心所欲的不同屏幕。
但我想有一个输出窗口的默认排列,无需手动计算屏幕并通过划分和填充形成宽度/高度(已经这样做了,这真的很痛苦)。我不想让自己做这些蚂蚁工作,而是专注于业务逻辑。
我在寻找什么:
如果有人知道可能很棒的开源库或工具或很酷的方法。
顺便说一句,我发现了一个非常有用和方便的工具,可以帮助有我在这里制定的相同需求的人:它被命名为AquaSnap,但不幸的是代码不是开源的
PS:我知道如何“手工”完成并将监视器分配给表单。这不是我要寻找的答案。
比X
【问题讨论】:
-
根据表单数量和可用屏幕计算表单尺寸真的有那么难吗?
-
只是一个想法:表单可以是其他非表单控件的子控件,因此您可以拥有一组托管表单的面板。请注意,表单虽然会失去一些行为,但不确定具体情况,但这是有可能的。然后,您可以添加自己的代码,以允许用户从 Dock 中分离表单并让它们成为普通窗口。
-
@Axarydax :我已经这样做了,但我希望有一个更灵活和直接的解决方案,正如我所说,我想专注于业务逻辑并避免重新发明轮子。在全球范围内至少有 70% 的开发工作是多余的,而且某个地方的某个人已经花时间做同样的事情。
-
@Adam :你的提议违反了我的编码范例之一:永远不要使用更多需要的组件。 10 个用户中有 9 个确实会分离/重新排列表单,并且面板最终会“孤立”,我只剩下一个补充元素来处理不知道如何处理它。恕我直言,如果用户愿意,删除表单并让用户通过屏幕重新排列它们会更干净
-
可能使用对接框架:sourceforge.net/projects/dockpanelsuite 但是听起来您不想要对接主机,但窗口的逻辑可以捕捉到屏幕尺寸并相互对齐 - 所以我不会建议作为答案。