我有一个树形视图的一面.根据选择的节点,我想在右侧显示不同的内容.为了保持代码和控件的可管理性,我的计划是将内容分离为单独的表单,并在面板中显示表单.
在我的TreeView AfterSelect事件中,我尝试实例化表单,并将它的Parent设置为面板,但是我得到一个异常"顶级控件无法添加到控件中.":
Form frmShow = new MyForm();
frmShow.Parent = this.pnlHost;
Run Code Online (Sandbox Code Playgroud)
这不是MDI配置,但我尝试将表单MdiParent属性设置为父表单,然后将表单的父属性设置为面板但我得到一个异常"指定为此表单的MdiParent的表单不是MdiContainer.参数名称:value":
Form frmShow = new MyForm();
frmShow.MdiParent = this;
frmShow.Parent = this.pnlConfigure;
Run Code Online (Sandbox Code Playgroud)
我不能将表单设置为MDI容器,因为它不是顶级表单,它实际上是一个停靠在父表单内的表单(使用WeifenLuo停靠库).
是否有某种方法可以在非MDI框架中的窗体中表示窗体?
Han*_*ant 20
只是为了记录,这是可能的.您可以通过将其TopLevel属性设置为false将Form转换为子控件.像这样:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
switch (e.Node.Name) {
case "Node0": embedForm(new Form2()); break;
// etc..
}
}
private void embedForm(Form frm) {
// Remove any existing form
while (panel1.Controls.Count > 0) panel1.Controls[0].Dispose();
// Embed new one
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.Visible = true;
panel1.Controls.Add(frm);
}
Run Code Online (Sandbox Code Playgroud)
用户控件的开销较小.