用户控件,其作用类似于标准窗口,仅限于一个窗格

本文关键字:于一个 窗口 标准 控件 作用 类似于 用户 | 更新日期: 2023-09-27 18:01:06

我正在制作一个程序来为我生成代码,由于界面非常简单,我正在用Game Maker制作UI。它有一个SplitContainer,其中Panel1包含TreeView,Panel2包含任意数量的自包含窗口(真正的窗口,而不是一些巧妙的变通方法(。我想使用用户控件来存储我用来修改东西的控件,但我想不出任何方法将其放在splitContainer的Panel2内的窗口中。有人能帮我吗?

这里有一个很好的例子:

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

这两个sprite属性窗口正是我想要做的。

用户控件,其作用类似于标准窗口,仅限于一个窗格

我认为您正在寻找的是所谓的mdi容器

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

但是,如果您只想要"窗口中的窗口"效果:只需创建新表单,将该实例的TopLevel属性设置为false,并将该实例添加到您的表单/面板/拆分容器/类似于任何其他常用控件

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

它非常灵活。您设置了其中一个停靠在MDI窗体左侧的固定面板窗体。它将始终处于"顶部",用户可以像窗体上的拆分器控件一样调整其大小。如果您愿意,它还可以具有"自动隐藏"功能,这在您的情况下可能是可取的,也可能不是可取的。

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

你会发现你并没有为"Windows"真正想要的行为方式而斗争,事情会运行得更顺利。

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

我曾经做过类似的事情,因此,我有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;
    }

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

从如何在运行时嵌入表单切换的情况下实现a-form-inside-a-form?