【问题标题】:MDI form 'creep' (position change in MDI window)MDI 表格“蠕变”(MDI 窗口中的位置变化)
【发布时间】:2015-11-19 22:54:31
【问题描述】:

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

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

frmPurchaseInvoiceSelect.Show()
frmPurchaseInvoiceSelect.MdiParent = Me

我可以通过将表单启动位置设置为“手动”来解决这个问题,但随后它们会直接在屏幕左上方彼此重叠地打开。

还有其他 SO 用户遇到过这种情况吗?

【问题讨论】:

  • 这就是每个应用程序的工作方式。打开两个计算器,或者两个记事本,就会看到。
  • 我不认为这是有问题的。

标签: .net vb.net mdi


【解决方案1】:

试试

frmPurchaseInvoiceSelect.StartPosition = FromStartPosition.CenterParent

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

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

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

应该在你想要的地方开始表单。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          男童,

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

          【讨论】:

            猜你喜欢
            • 2010-11-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-23
            • 1970-01-01
            相关资源
            最近更新 更多