1

我正在编写一个程序来为我生成代码,并且由于界面非常简单,我正在根据 Game Maker 制作 UI。它有一个 SplitContainer,其中 Panel1 包含一个 TreeView 和 Panel2 包含任意数量的独立窗口(真正的窗口,而不是一些 hacky 解决方法)。我想使用用户控件来存储我用来修改东西的控件,但我想不出任何办法将它放在 splitContainer 的 Panel2 内的窗口中。谁能帮我?

这是一个很好的例子:

http://i.stack.imgur.com/CG6kO.png

这两个精灵属性窗口是我想要做的。

4

4 回答 4

2

我认为您要查找的内容称为 mdi-container

然而,到目前为止我看到的唯一真正的 mdi 容器(在 .NET 中)是一个表单......遗憾的是没有面板或类似的东西......

但是,如果您只想要“窗口中的窗口”效果:只需创建新表单,将该实例的TopLevel属性设置为false,然后将该实例添加到您的表单/面板/splitcontainer/任何其他常用控件

于 2011-07-04T00:46:43.800 回答
1

您可以尝试使用 MDI 表单并实现您的 TreeView 控件,请查看某种停靠面板。我过去使用过这个(http://sourceforge.net/projects/dockpanelsuite/)。

它非常灵活。您设置了这些停靠面板表单之一,停靠在 MDI 表单的左侧。它总是“在最上面”,用户可以像窗体上的拆分器控件一样调整它的大小。如果您愿意,它还可以具有“自动隐藏”功能,在您的情况下可能需要也可能不需要。

然后它可以包含你的树形视图,它可以加载你喜欢的所有 MDI 子窗体。

你会发现你并没有与“Windows”真正想要的行为作斗争,事情会运行得更顺利。

于 2011-07-04T01:43:46.403 回答
0

通过 Add() 方法将其放入 Panel2 的 Control 集合中,以编程方式应用坐标、锚点和停靠。

于 2011-07-03T22:47:55.633 回答
0

我曾经做过类似的事情,因此,我有 ReplaceControl 方法,我将其粘贴在下面:

    static public void ReplaceControl(Control ToReplace, Form ReplaceWith) {
        ReplaceWith.TopLevel=false;
        ReplaceWith.FormBorderStyle=FormBorderStyle.None;
        ReplaceWith.Show();
        ReplaceWith.Anchor=ToReplace.Anchor;
        ReplaceWith.Dock=ToReplace.Dock;
        ReplaceWith.Font=ToReplace.Font;
        ReplaceWith.Size=ToReplace.Size;
        ReplaceWith.Location=ToReplace.Location;
        ToReplace.Parent.Controls.Add(ReplaceWith);
        ToReplace.Visible=false;
    }

剩下要做的就是在表单上手动创建一些控件,作为表单的占位符。例如,使用标签。

How to implement a-form-inside-a-form with runtime embedded formsswitching?

于 2011-07-03T23:16:56.613 回答