C# 界面布局之Dock,Anchor,容器控件心得
背景近几个月都用的WPF,结果发现很多代码都是WinFrom的,一直想学下WinForm的,恰好今天要用下。就拿了别人的源码,增加些控件与功能,然后界面不太规范,所以边学边改之,第一天弄WinForm界面。有必要记下免得忘了。目标:重点要解决的问题,如何让窗口在拖动的时候,某些控件是固定在某个角落。而某些控件是需要随着窗口变化而放大缩小的。思路原理:要实现所说功
背景
近几个月都用的WPF,结果发现很多代码都是WinFrom的,一直想学下WinForm的,恰好今天要用下。就拿了别人的源码,增加些控件与功能,然后界面不太规范,所以边学边改之,第一天弄WinForm界面。有必要记下免得忘了。
目标:
重点要解决的问题,如何让窗口在拖动的时候,某些控件是固定在某个角落。而某些控件是需要随着窗口变化而放大缩小的。
思路原理:
要实现所说功能,即布局与放大缩小问题。重点是通过如下3点的结合使用
1、Dock属性
2、anchor属性
3、容器的使用。
原理阐述(个人心得^ ^ 尚未去证明,只是通过这个思路得出了想要的结果):
一切皆界面对象,控件也是对象。所有的对象都支持Dock与anchor属性。为了不一个控件一个控件的去修改它的Dock属性与anchor属性,所以需要用容器控件,把它们定好位置,不然托控件定位置是会托出人命的。 最外层为窗口,然后是容器控件,容器控件里面再装控件。或者是容器中嵌套容器都行。
备注:Dock就是停靠,anchor就锚定,当窗口变大的时候,界面对象应该怎么调整自己的位置全靠它俩作为依据。(这里不太想具体阐述,对不住了,请自行百度)
而容器控件,拿来布局用得最多的,就3个TableLayoutPanel.Panel,和FlowLayoutPanel.它们三个,排个号。大哥是TabbleLayoutPanel.它可以在窗口放大的时候让自己的小弟(就是自己管辖区域)哪些动,哪些不动。二哥Panel是个死脑筋,自己管辖的区域大小变化了,它才不会给小弟们排位置,原封远样。老三FlowLaoutPanel最灵活,也可以说有强迫症,总要给小弟些要么衡行排位置,要么竖行排位置。(具体阐述可以百度,再写就是写小说了,打住)
具体操作:
1、菜单栏MenuStrip占顶部,状态信息栏StatusStrip占窗口低端。设置方式,通过设置MenuStrip的Dock属性为Top,StatusStrip的Dock为Botton及可);
2、窗口中间,应该是布局最多的地方。先放一个容器装所有的控件。选择TableLayoutPanel.这个控件有个好处,(与WPF中Grid布局容器差不多功能),它可以分割布局。而且当窗口变化的时候,它的某几行或列的面积大小可以不变,而其他行或列的面积可以随着窗口放大或缩小。修改的地方在它属性->布局中的Rows或者Cloums属性,点击集合后面的按钮。有相关设置,一看就懂。一个是绝对大小(按照像素来),一个是百分比大小。
3、在TableLayoutPanel中肯定是添加老二Panel,或者是老三FlowPanel。不建议直接拖什么Txt控件之类的。然后具体是设置老二老三的Dock属性或者anchor属性。
晕快一个小时过去了,给自己记的,都没必要这么个写法,哎╮(╯▽╰)╭
更多推荐
所有评论(0)