本帖最后由 颜晓峰 于 2013-2-28 11:49 编辑
经过一个晚上的琢磨,我终于得出了个可以实现的,代码较少的方法。现在和大家分享下!
1.为了便于管理,又能够有利于快速排列。我在控件的命名上下了一番功夫。Label我缩写为lb,Textbox缩写为tb。然后借鉴了二维数组,命名效果如下图:
以此类推。如此一来,控件名前面部分告诉我们控件类型,最后2位告诉我们控件位置,管理起来轻松多了。
2.开始布局。由于每个Label后都紧跟着个Textbox,因此,只要先将Label布局好了,后面就轻松了。为了适应可拉伸的窗体,而又不改变控件的大小,我选择了用百分比解决。即,控件Location属性的x占窗体width多少百分比,y占height多少百分比。当然,为了避免窗体拉伸过大,而控件大小没改变,导致整个界面太过稀疏,不美观,大家可以定个值,当窗体大于该值时,控件的布局换个方式。就如网页在宽频显示器上最大化时,左右2边空了2块。这个是后话,这里就不研究了。下面是我定义的布局Label方法,该方法写在窗体Paint事件里,以便实时调整。(注:我事先将控件放入了几个groupbox内,为了美观,因此下面也对groupbox进行布局。)
参数n和m用于方便调整所占百分比,及考虑到textbox输入信息的长度将影响布局,比如某列中有用于输入住址的textbox,住址长度不一定,但相对较长,先预留一些空间,该列的列宽就会比较宽,具体可以由参数控制。下面就附上布局代码。
这里是部分代码,其他的大家以此类推。该代码中我将每个Label的布局都写出来,代码看起来还是蛮多的,主要是让大家都能更好的理解我的布局思路。若用遍历控件+sunstring()方法,代码会极大的减少。所谓代码没有最少,只有更少,关键在于思考没思考。
3.接下来是textbox的布局。
以上就是我的大致思路,如上所说,代码量还可大量减少,不过以上代码好在清楚明了,虽然代码多点,但都很好写,只需改些参数。
表达不好,没能把问题说清楚,大家见谅,希望以上内容能对大家有所帮助。
最后附上我的效果图~
运行前:
运行后,原始大小:
运行后:拉伸:
暂时的效果,还不够完美,继续研究去~
|