首先,我十分高兴能成为博客园的一员。有朋自远方来,不亦乐乎@广大编程爱好者们!!!
最近在软件开发中,遇到了这样一个问题:panel 与treeview控件的结合实现tablecontrol功能,一直不能实现。经过咨询,以及查询资料,终于有了新认识,和大家分享一下,莫见笑。
在这里重点涉及到了控件嵌套(父子关系)的问题,我们把panel们全部摞在一起,这里也就只显示了最上一层的panel内容,我的想法是通过激活treeview控件的节点来实现panel的交换显示。在这里特别注意的是:这些panel彼此之间并非独立的,而是存在嵌套(父子关系的)。我们解决的就是把这些panel控件设置为独立关系。这样就可以很容易的实现各个panel的交换显示了。
第一部分:改变各个panel的嵌套关系为独立关系
我们在XXXX.desiger.cs(窗口设计编辑器)中,改变他们的关系:
// main_panel
this.main_panel.Controls.Add(this.panel1);
this.main_panel.Controls.Add(this.panel2)
在这里就实现了panel1,panel2,是main_panel的子窗体,位于其上面了。
第二部分:利用treeview的节点选择来实现panel的显示、隐藏(以下是一个小例子)
在XXXX.AfterSelect(object sender, TreeViewEventArgs e)
{
showPanel(int level, string name);
}
private void showPanel(int level, string name)
{
foreach (Control c in panel_main.Controls)
{
c.Visible = false;
}
switch (level)
{
case 0:
panel_MEquipGeneralAtt.Visible = true;
break;
case 1:
panel_MEquipGeneralAtt.Visible = true;
break;
case 2:
panel_RingGeneral.Visible = true;
break;
}
}
最后,收获最大的地方是:学会手动去改动XXXX.desiger.cs(窗口设计编辑器)中编码内容.....