1

我们正在尝试将我们的应用程序嵌入到另一个通过 UserControl 提供界面的应用程序中。

创建包含普通 Windows.Form 的用户控件很容易。但是,如果要嵌入的表单具有 IsMdiContainer == true 属性,该怎么做呢?

谢谢

4

2 回答 2

0

您可以使用以下方法,它不是自动的,但它会完成工作。

1) 在您的用户控件中,声明您的 Windows 应用程序,即 MDI 主机。2) 将创建和处理新窗口的功能映射到用户控件中的工具栏,或者您可以将其映射到自定义控件。3) 每次创建新窗口时,将 MDI 父级设置为您在步骤 1 中声明的窗口。

主要思想是在这篇文章 C# Panel As MDI Container

该方法有1个问题。当您最大化您的子窗口时,它会最大化并覆盖所有用户控制区域,您不会看到它的标题栏。我相信您可以通过将MDI子窗口的最大尺寸设置为比用户控件尺寸小一点来摆脱这个错误

于 2011-05-02T00:14:12.943 回答
0

我认为这不可能,因为

多文档界面 (MDI) 父窗体必须是顶级窗口。

如果您尝试为 MdiContainer 设置父级,您将/应该得到一个异常。解决此问题的唯一方法是重新设计您尝试嵌入的窗口。要么不使用 MDI 概念,要么如果您确实需要它,请将其实现为自定义控件,其行为类似于 MDI,但没有限制。(这是一项艰巨的任务,很可能需要大量定制图纸。)

实际上有一种 hack 方法,您可以在运行时通过SetParent函数从其他进程重新父窗口。因此,例如,您可以“窃取”一个计算器窗口应用程序并将其托管在另一个 MDI 中,但这往往非常不稳定,尤其是对于更复杂的应用程序。您必须将 MDI 应用程序作为单独的进程启动,然后从托管应用程序调用 SetParent。如果上述选项都不适合您的需求,可能值得一试,但最有可能的结果将是运行时异常。

于 2011-04-01T04:52:52.540 回答