WinForm界面布局

更新时间:2023-05-04 23:24:36 阅读: 评论:0

WinForm界面布局
Dock&Anchor
Dock和Anchor是水火不容的,同时给控件设置Dock和Anc脾胃舒丸 ho简短的个人工作总结 r属性时后设置的会覆盖前面的设置。
Dock
我初接触WinForm的时候发现控件的Width和Height只能是int,不能设置为百分比,那个时候就想子控件如何跟着父控件而变化呢?父控件变大就变大,而且还填满那个区域。甚至以为这个需要通过代码来解决,如是在SizeChanged事件里……
后来才发现我要的就是Dock给的,Dock是停靠的意思。Dock属性的类型是DockStyle枚举:
1:public enum DockStyle
2:{
3:None=0,
4:Top=1,
5:Bottom=2,
6:Left=3,
7:Right=4,
8:Fill=5
9:}
默认是None,当为Left的时,就表示子控件停靠在父控件的左边区域,并把左区域填充满:
上图中的Panel总是会停靠在Form的左边区域,不管如何调整Form的高度,它总是能把左边区域填满。Dock麻烦的地方在于多个控件碰到一起时,比如有两个Panel都设置为Left 该怎么办?我们会发现向父控件的Controls集合中添加子控件,越晚添加具有更高的“优先级”(不知道有没有这个说法,这是我杜撰的)。这里的优先级指的是,子控件“优先级”越高,
越靠近父控件边缘,其他子控件就得避让:
[我的见解;通过选中控件,一般是pannel,右键选择置为vba函数 底层,来决定控件间的优先级]
this.Controls.Add(this.panel1);
this.Controls.Add(this.panel2);
Panel2后添加进去,所以它具有更高的优先级,更靠近Form的边缘。这个规则不仅仅对于Dock都设为Left的有效,对Dock属性不同,但是碰到一起的子控件也适用:
1:this.panel1.Dock=DockStyle.Left;
2:this.panel2.Dock=DockStyle.Left;
3:this.panel3.Dock=DockStyle.Top;
4:
5:this.Controls.Add(this.panel1);
6:this.Controls.Add(this.panel2);
7:this.Controls.Add(this.panel3);
panel3的Dock设置为Top,最后添加到Controls集合中,所以具有最高的优先级,其他两个panel都得避让:
将Panel3调整成第二个添加进去呢?却是这番景象:
当歌曲梅花 然,这里的“优先级”比较只在同一个“层次”起作用,将子控件与父控件同一层次的控件相比较是没有意义的。
Anchor
Dock一般是划说明文猫 分区域的,将一个窗体或大控件划分几个大区域以便布局,就像Web中的div 一样。但有的时候我们却想子控件在父控件里的相对位置不要随着父控件的变大缩小而变化,或者控件边缘距离父控件边缘的相对距离不要发生变化,但又不是停靠在父控件的边缘,这就是Anchor该出场的时候了。
Anchor属性的类型是AnchorStyles位标记(如果不理解位标记就将其理解为可以使用位运算符进行操作,从而可以设置多个值的枚举吧,深入理解请参见MSDN或《CLR via C#》中美轮美奂造句 对位标记的描述):
1:[Flags]
2:public enum AnchorStyles
3:{
4:None=0,
5:Top=1,
6:Bottom=2,
7:Left=3,
8:Right=4
9:}
Anchor的默认值是Anchor.Left|Anchor.Top,也就是子控件与父控件的左边缘和上边缘的相对位置不会变化,这也保证了在窗体最大化后子控件的位置不会发生变化:
窗腾讯客服人工服务 体默蓝瘦香菇原版视频 认显示时->
窗体变大后->
还是悬停在左上角不会发生变化。那如果设置为Left和Rig伤感文案 ht呢?当Anchor设置为Left|Right 的时候,为了确保父控件(在这里就是Form)变大时,控件的边缘与父控件距离不变,子控件会自动的扩大:
总之,记着Anchor的中文意思:锚。当给控件设置Anchor的时候,就相当于用一个铁钉将控件的边缘给钉住。
Padding&Margin
Padding和Margin没有什么好说的,和CSS的盒模型描述的一模一样,Padding指的是控件内部空间,Margin指的是控件之外的:
padding和margin都可以指定四个值。
AutoSize
有的时候我们需要控件随着里面的内容的增长而增长,比如在做多语言的程序时,各国的语言描述同一个意思的时候长度会不同,这个时候就需要AutoSize为true了,这样当文字过长不会被截断。关于AutoSize更详细的内容请参见MSDN。
如何面对复杂界面?出了问题咋办?
设计时
当界面变得越来越复杂的时候,我们很期望了解控件之间的层次关系,这个按钮是放在哪个Panel上?这个Panel的区域又是咋样的。我刚接触WinForm的时候,我非常期望WinForm 上也有类似于IE Developer Toolbar的工具,点击HTML,可以可视化的在界面上显示区域,在界面上选中某区域,也可以定位到HTML元素。实际上在设计WinForm界面时也是可以的。这就是Visual Studio的Document Outline窗口(View->Other Windows->Document Outline):

本文发布于:2023-05-04 23:24:36,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/856717.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:控件   边缘   时候
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图