C# 很多时候需要用到panel 面板来处理同一窗体,切换界面的问题
1.tabControl
- 优势: 即便在VS的设计面板内也可以很好处理
- 缺点:
- 1.控件名容易重复或太长,比如将登陆、注册、重置密码做在同一个tabControl的3个page中时,都要填用户名密码,所以即便控件基本一摸一样,你也要每个Page创建一次,并且在命名上要给予区分,txtLoginUsername,txtRegisterUsername ...
当然如果你的应用场景每个Page的控件都基本不同,这条缺点也可以忽略 - 2.整个tabControl绑定的方法都会在这个Form窗体中,代码量增加。
- 3.恶心的标签头和边框,标签头最小可以设置宽高为1, 即便你设置border = none 也能看到个外边框。
解决方法有这三种:- a.找东西挡住
- b.重写控件
- c.先用一个panel容器,再将tabControl放在这个panel里面,然后设置这个tabControl的位置和大小,让他大于整个panel,直到标签头和边框看不见。因为这个tabControl是这个panel内的控件,所以超出部分他是不会显示的。
- 1.控件名容易重复或太长,比如将登陆、注册、重置密码做在同一个tabControl的3个page中时,都要填用户名密码,所以即便控件基本一摸一样,你也要每个Page创建一次,并且在命名上要给予区分,txtLoginUsername,txtRegisterUsername ...
2.panel
如果直接多个panel叠上去,平时修改维护的时候要怎么做呢?
抠脚做法:拉大界面,然后每个panel拉开再改
正确的做法应该是:打开视图-其他窗口-文本大纲,然后将3个panel放在同一层,想显示的那个拖至第一个即可
但是同样会有tabControl缺点1的问题。
3.自定义panel控件
最好的方法是,创建一个自定义Panel控件,因为他的方法代码也可以分离在那个控件中,不用全写在Form窗体中了
注意:
- 1.如果你的winform是选择的框架是大于.net 4.6 并且支持高DPI的,那么自定义控件的AutoScaleMode选择DPI,font要和你放置的Form窗体一致,不然可能导致这个自定义Panel创建在你的Form窗体上时不一样。
- 2.维护修改时,建议打开 视图-其他窗口-文档大纲,然后将3个panel放在同一层,想显示的那个拖至第一个,方便维护
- 3.维护修改的时候,在自定义控件中改了后,要重新生成一下解决方案,才会在Form窗体的设计面板中显示出来。
- 4.多个Panel中将想显示的面板放到最前面,通过panel控件的BringToFront()方法。还有个将控件放最后的方法 SendToBack() ,但这个用的比较少
- 5.如果想在panel中调用父窗体的方法,((FrmFather)this.ParentForm).FatherMethodYouNeed();