背景

近几个月都用的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属性。

        晕快一个小时过去了,给自己记的,都没必要这么个写法,哎╮(╯▽╰)╭

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐