开始用的是Show()跟Hide()方法,在Panel较多的情况下会发生某些Panel不能显示问题。
private void tvOption_AfterSelect(object sender, TreeViewEventArgs e)
{
this.UnVisibleAllPanels(); //这里,初始化每个panel的visible属性为false
//this.lblTitle.Text = "カテゴリー";
switch (e.Node.Name)
{
case OptionItem.Main:
case OptionItem.General:
this.panel_General.Visible = true;
break;
case OptionItem.Module:
this.panel_Module.Visible = true;
break;
case OptionItem.Desk:
this.panel_TestLog.Visible = true;
break;
case OptionItem.LevelOne:
this.panel_DefaultArg_LevelOne.Visible = true;
break;
case OptionItem.LevelTwo:
this.panel_DefaultArg_LevelTwo.Visible = true;
break;
case OptionItem.SerialCom:
this.panel_Serial.Visible = true;
break;
default:
break;
}
}
CSDN上某人回复的方案,经过尝试,只能显示第一个Panel了,估计是Panel之间关系不平行的问题。
在Panel属性中未看见Parent属性,在Form的Load函数中加入将所有Panel的Parent设置为this之后解决。
最后采用如上代码类似的方案,用show跟hide应该也是可行的,归根结底是Panel之间关系不平行的问题,控件属性中没有,必须用代码设置。(补充一下:写这篇日志的时候还不知道,可以在Design的设计代码里改,在AddControl的时候确定的Parent关系,当然我当初用在OnLoad中设置Parent关系也是可行的,在Design部分能解决的就留在Design吧)