.Net:在屏幕上排列多个窗体

4
问题:
有没有一种有效的方法在.Net中排列多个独立的Windows Forms?我必须同时显示许多表单在我的应用程序中。这是一个图形图表应用程序,窗体的数量取决于用户想要什么,因此它必须是动态的。是否可以像MDI布局一样排列它? 示例:
例如,如果用户选择12个输出图表窗体,我希望它们自动排列在默认屏幕上的4x3。理想情况下,用户甚至可以选择他拥有的监视器中的许多目标屏幕。 为什么不使用MDI:
我不想使用MDI,因为我的应用程序是多屏幕的,我希望给用户留下机会,让他将外部输出图表窗口分散到他想要的不同屏幕上。但我仍然希望有一个默认的输出窗口排列方式,而不需要手动计算屏幕和窗体的宽度/高度通过除法等方式(已经在做了,真的很麻烦)。我希望节省这个繁琐的工作并专注于业务逻辑。 我正在寻找的内容:
如果有人知道一个开源库、工具或酷方法,那就太好了。

顺便说一下,我发现了一个非常有用和方便的工具,可以帮助有着与我类似需求的人:它被称为AquaSnap,但不幸的是,它的代码不是开源的。

附注:再次声明,我知道如何手动完成并将监视器分配给表格。这不是我要寻找的答案类型。

谢谢


3
从表格数量和可用屏幕数量计算表格尺寸真的很难吗? - Axarydax
只是一个想法:表单可以成为其他非表单控件的子控件,因此您可以拥有一组托管表单的面板。请注意,表单会失去一些行为,具体情况不确定,但这是可能的。然后,您可以添加自己的代码,允许用户将表单从停靠处分离并使其成为普通窗口。 - Adam Houldsworth
@Axarydax:我已经在做这个了,但我想要一个更灵活和直接的解决方案。正如我所说,我想专注于业务逻辑并避免重复造轮子。全球至少70%的开发工作是多余的,某个地方肯定有人已经花时间做过同样的事情了。 - Mehdi LAMRANI
1
@Adam:你的建议违反了我的编程范例之一:永远不要使用比所需更多的组件。十有八九用户确实会分离/重新排列表单,而面板最终将变得“孤立”,我将不知道如何处理它的附加元素。在我看来,更干净的方法是放弃这些表单,让用户通过屏幕重新排列它们,如果他觉得需要的话。 - Mehdi LAMRANI
2
可能需要使用一个停靠框架: http://sourceforge.net/projects/dockpanelsuite/ 。不过听起来你并不需要一个停靠宿主,而是需要实现窗口吸附到屏幕尺寸和其他窗口的逻辑 - 所以我不会将其提议为一个答案。 - Adam Houldsworth
@Adam:感谢您提供的相关建议,您似乎非常了解情况。我们已经在使用dockpanelsuite,它确实很强大,但是它很重,并且文档不够清晰和全面;正如您所说,我更愿意避免MDI docking,因为我们有使用9个以上显示器的用户,而MDI在这种情况下确实不适用。如果我找不到已经完成的东西,我就会编写并发布开源代码。 - Mehdi LAMRANI
2个回答

0
我建议您不要使用多个表单,而是选择更易用的单个表单,其中包含分段面板或其他容器以供各个部分使用。多个表单存在太多的可用性问题,例如不会出现在任务栏中、重叠等。
我知道这不是您想要的答案,但我鼓励您从不同的方向思考。对于复杂数据和多个视图,可用性至关重要。

正如我所说,我的应用程序是一个多屏幕应用程序,我不能强制用户在不同的显示器上使用面板 -> 这会导致可用性问题。 - Mehdi LAMRANI

0

这是我也在寻找的东西 输入图像描述

Mql5 + C# 专家顾问会生成与尝试交易的金融符号数量相等的表单数,因此对于2、3、..N个表单的docker非常受欢迎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接