2

我有一个 VB.NET MDI WinForms 应用程序。我的用户一直在抱怨表单蠕变(正如他们所说的那样),这是每次您在主 MDI 窗口中打开特定表单时,它会在之前加载的位置略下方和右侧打开 - 即它从窗口的左上角并向下移动到右下角。

我不得不同意他们的观点,这非常令人恼火,有什么办法可以防止这种情况发生吗?加载表单的代码是:

frmPurchaseInvoiceSelect.Show()
frmPurchaseInvoiceSelect.MdiParent = Me

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

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

4

5 回答 5

4

尝试

frmPurchaseInvoiceSelect.StartPosition = FromStartPosition.CenterParent

始终从 Mdi 父级的中心开始。

有几个选项,但这取决于您希望表单从哪里开始。我没试过,但是:

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

应该在您想要的位置开始表单。

于 2009-01-17T20:18:12.630 回答
2

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

于 2015-11-19T14:54:31.900 回答
1

请参阅我的问题和得到的答案,这很可能会帮助您解决这个问题。您还可以查看我关于该主题的非常详细的博客文章。我的代码是用 Delphi 编写的,但您应该能够将这些概念转移到 VB。

于 2011-12-10T07:12:53.843 回答
0

不管使用什么语言,原因都是一样的。当您打开第一个 MDI 窗口时,起点是相对于 MDI 框架的 0,0,因此它在框架内的左上角打开。如果您关闭窗口然后重新打开它,则起点不再是 0,0,而是基于您打开窗口的方式(级联等)的其他值 通常它会略低并位于前一个窗口的右侧关闭。存在问题是因为您或该工具没有检查要打开的窗口是否是框架内的唯一窗口实例。如果窗口是唯一的实例,则在 0,0 处打开它,否则在相对于其他窗口的适当位置打开它。

此功能通常由您正在使用的 MDI 库处理,或者如果没有,您将手动对其进行编码。手动编写代码只需要几行代码,因此实现起来应该很简单。

于 2009-01-17T20:03:58.870 回答
0

男童,

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

于 2009-01-17T20:59:20.503 回答