用户控件,其作用类似于标准窗口,仅限于一个窗格
本文关键字:于一个 窗口 标准 控件 作用 类似于 用户 | 更新日期: 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?