MDI形成'creep'(MDI窗口中的位置变化)

时间:2009-01-17 19:28:53

标签: .net vb.net mdi

我有一个VB.NET MDI WinForms应用程序。我的用户一直在抱怨表单蠕变(他们称之为),这是每次你在主MDI窗口中打开一个特定表单的地方,它会在它先前加载的位置的下方和右侧打开 - 即它从在窗口的左上方,向下到右下方。

我必须同意他们这是非常恼人的,有什么方法可以阻止这种情况吗?加载表单的代码是:

frmPurchaseInvoiceSelect.Show()
frmPurchaseInvoiceSelect.MdiParent = Me

我可以通过将表单启动位置设置为“手动”来解决这个问题,但之后它们只是在屏幕左上角直接打开。

任何其他SO用户遇到过这个?

5 个答案:

答案 0 :(得分:3)

尝试

frmPurchaseInvoiceSelect.StartPosition = FromStartPosition.CenterParent

总是从Mdi父母的中心开始。

有一些选项,但这取决于您希望表单的起始位置。我没试过,但是:

frmPurchaseInvoiceSelect.Location = windowPoint
frmPurchaseInvoiceSelect.Size = windowSize
frmPurchaseInvoiceSelect.StartPosition = FormStartPosition.Manual  

应该准确地开始表格。

答案 1 :(得分:1)

请参阅我的question以及可能对此问题有帮助的结果答案。您还可以查看关于该主题的非常详细的blog条目。我的代码是用Delphi编写的,但你应该能够将这些概念转移到VB。

答案 2 :(得分:1)

以下为我解决了这个问题 frmUser.StartPosition = FormStartPosition.Manual 重新开放时,它停止了“爬行”

答案 3 :(得分:0)

无论使用何种语言,原因都是一样的。打开第一个MDI窗口时,相对于MDI帧的起点为0,0,因此它在框架的左上角打开。如果你关闭窗口,然后重新打开它,起点不再是0,0,而是基于你打开窗口的方式的其他一些值(级联等)一般来说它会稍微低一点,在前一个窗口的右边是关闭。问题的存在是因为您或工具没有检查要打开的窗口是否是框架中唯一的窗口实例。如果窗口是唯一的实例,请在0,0打开它,否则在相对于其他窗口的适当位置打开它。

此功能通常由您正在使用的MDI库处理,如果没有,您可以手动编码。它只需几行就可以手动编码,因此实现它应该是微不足道的。

答案 4 :(得分:0)

MBoy,

虽然SDI应用程序可能,但MDI应用程序通常不会显示以Windows为中心的窗口。 在打开多个窗口的MDI应用程序中,用户通常希望看到每个窗口的边缘(级联视图),以便他/她可以单击所需的窗口将其带到前面。这通常可以通过两种方式完成。知道打开多少个窗口以及它们相对于MDI框架的位置。打开最后一个窗口右下方和右侧的后续窗口。此功能通常在使用的语言或库中提供。第二种方式是选择(菜单或其他)以在所需方向(级联,平铺或分层)之后显示打开的窗口。正如我之前提到的,如果语言/库中没有自动提供MDI显示功能,则需要手动编码。这可以在一个函数中完成,该函数在每个MDI窗口打开但在它变得可见之前调用。