我正在制作一个为我生成代码的程序,而且由于界面的简单性,我在Game Maker之后制作了UI。它有一个SplitContainer,Panel1包含一个TreeView和Panel2,包含任意数量的自包含窗口(真正的窗口,而不是一些hacky解决方法)。我想使用用户控件来存储我用来修改内容的控件,但是我无法想出任何方法将它放在splitContainer的Panel2中的窗口中。任何人都可以帮助我吗?
这是一个很好的例子:
http://i.stack.imgur.com/CG6kO.png
这两个精灵属性窗口正是我想要做的。
答案 0 :(得分:2)
我认为你要找的是mdi-container
然而到目前为止我所看到的唯一真正的mdi容器(在.NET中)是一种形式......遗憾的是没有面板或类似的东西......
但如果你只想要“窗口中的窗口”效果:只需创建新表单,将该实例的TopLevel
属性设置为false
,并将实例添加到表单/面板中/ splitcontainer /任何其他常用控件
答案 1 :(得分:1)
您可以尝试使用MDI表单并实现TreeView控件,查看某种对接面板。我过去曾经使用过这个(http://sourceforge.net/projects/dockpanelsuite/)。
非常灵活。您设置了其中一个dockpanel表单,停靠在MDI表单的左侧。它总是“在顶部”,用户可以像表单上的分割器控件一样调整它的大小。如果您愿意,它还可以具有“自动隐藏”功能,在您的情况下可能是也可能不需要。
然后它可以包含treeview,它可以加载你喜欢的所有MDI Child表单。
你会发现你并没有打击“Windows”真正想要表现的事情,而且事情会更顺利地运行。
答案 2 :(得分:0)
通过Add()方法将它放入Panel2的Control集合中,应用坐标,锚点和对接程序。
答案 3 :(得分: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;
}
唯一要做的就是在表单上手动创建一些控件,作为Form的占位符。例如,使用标签。
来自How to implement a-form-inside-a-form with runtime embedded forms switching?