基于C#.NET的Windows窗体编程之WinForms布局简介
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
通过前两篇文章的学习,已经对基于.NET的Windows窗体编程有了初步认识,可以独立创建应用程序。然而在实际应用开发中,软件能否吸引用户,除了实现必需的功能以外,UI布局设计也很重要,如整体风格,操作便捷性,以及符合大部分人的使用习惯等,合理的布局不仅可以有效的利用空间,还能提高软件使用效率。今天我们主要介绍WinForm编程中的布局容器相关控件,仅供学习分享使用,如有不足之处,还请指正。 ![]() 布局容器概述
GroupBox
在Form窗体中添加GroupBox,和其他控件一样,可以从工具箱拖动一个GroupBox到Form窗体中,GoupBox作为容器控件,和其他普通单一功能控件一样,具备Size,Location等属性,可以用于设置大小,GoupBox的起始位置等信息。在本示例中,同一个Form窗体中,创建两个GroupBox,分别表示学生信息,班级信息,可以清晰的从视觉上进行区分,如下图所示: ![]() 在上述示例中,学生信息GroupBox中的性别,用RadioButton进行表示,同时班级信息GroupBox中的放假,也用RadionButton进行表示,可以看出同一个GroupBox中的RadioButton是互斥的,如男/女,是/否只能有一个被选中;而分别处在两个GroupBox中的RadioButton则相互独立,互不干扰,如性别的选择,不会影响到放假的选择,这就是容器的另一个作用:程序化分组。 如果GroupBox的Enable属性设置为False,则控件及其子控件均不可用,如下所示: ![]() 注意:GroupBox本身不包含滚动条,如果子控件的位置超过了GroupBox容器的大小,则会自动裁切。 Panel
在Visual Studio中进行窗体设计时,Panel控件会有一个虚线边框,用于标识Panel控件的有效范围,如下所示: ![]() 当实际运行起来时,是不带边框的,如下所示: ![]() 如果需要设置Panel容器的边框,可以设置BorderStyle属性,默认为None,表示无边框,设置为纯线(FixedSingle),效果如下所示: ![]() 如果Panel中子控件的位置大于Panel控件的大小,默认是会自动裁切,不显示滚动条;如果需要显示滚动条,则需要设置AutoScroll属性为true,如下所示: ![]() Panel控件设置背景色,同时会将背景色应用到其所包含的子控件中(如:Label,RadioButton,CheckBox等),如下所示: ![]() 如果不想子控件和Panel容器控件背景色保持一致,则需要单独设置子个控件的背景色,如下所示: ![]() 注意:默认添加的Panel控件,是不自动填充到Form窗体中的,如果需要自动填充窗体,则需要设置Panel的Dock属性为Fill。 SplitContainer
在Form窗体中,默认添加的SplitContainer控件,会自动填充到当前Form窗体中,所以默认Dock属性为Fill。SplitContainer容器的默认Orientation属性为Vertical,创建左右布局,如下所示: ![]() 如果需要创建上下布局,则可以设置Orientation属性为Horizantal。如下所示: ![]() 容器控件之间可以进行嵌套,以实现复杂的布局,如:通过两个SplitContainer进行组合,便可以创建经典的上下左右布局,如下所示: ![]() SpitContainer因其便利性,在众多布局容器中应用非常广泛。 TabControl
在工具箱中,拖动TabControl控件到Form窗体中,便可以创建TabControl实例。默认创建的TabControl,并不会填充到Form窗体,如果需要填充整个窗体,可以设置Dock属性为Fill。在Visual Studio设计器中,可以点击TabControl右侧的箭头添加和删除选项卡,如下所示: ![]() 除了上述方式,在选择TabControl实例后,通过属性窗口的TabPages集合编辑器窗口进行添加或删除选项卡,以及修改选项卡的属性等,如下所示: ![]() 通过TabPages选项卡编辑器,可以实现如下功能:
当在TabControl的选项卡之间进行切换时,会触发SelectedIndexChanged事件,可以在此事件中处理需要的业务逻辑,如下所示: ![]() 以下代码将提示当前点击的选项卡的索引号:
示例效果如下所示: FlowLayoutPanelFlowLayoutPanel关键属性:
FlowLayoutPanel采用流式布局方式,在一些特定场景下非常实用,FlowLayoutPanel的FlowDirection属性,默认为LeftToRight(左右),可以手动修改设置为TopToDown(上下),两种效果如下所示: ![]() 如果WrapContents属性设置为false,则会裁切多余的内容,如下所示:
在Visual Studio设计器中,FlowLayoutPanel会显示虚线边框,但是在运行起来后,默认并不显示边框。如果要显示边框,可以设置BorderStyle属性,具体可参考Panel设置边框。FlowLayoutPanel容器中的子控件会默认具有FlowBreak属性,默认为false,如果设置为true,则从当前控件中断流式布局,并从下一个控件新开启一行或列,如将第5个按钮的FlowBreak属性设置为true,效果如下所示: ![]() TableLayoutPanel
TableLayoutPanel的关键属性,如下所示:
首先在工具箱中,拖入TableLayoutPanel到Form窗体中,默认TableLayoutPanel是两行两列,可以通过控件右边的黑色实心三角,进行快捷添加和删除。在弹出的菜单中,点击“编辑行和列...”,可以打开“行和列样式”对话框,可以设置行列的宽度和高度,宽度高度设置可以有两种形式,如下所示:
具体设置方式如下图所示: ![]() 默认情况下,TableLayoutPanel在Visual Studio设计器中显示虚线边框,实际运行起来并不显示,如果需要显示边框,可以设置CellBorderStyle属性,它是一个枚举值,主要有以下值:
具体边框的不同值之间的效果,可以自行验证,设置为Single的效果如下所示: ![]() 通过拖动控件到TableLayoutPanel容器的指定单元格中,即可向容器中添加控件,添加到TableLayoutPanel容器中的控件,自动具有以上几个附加属性:
三个按钮分别位于(0,0),(1,1),(2,2)位置,效果如下图所示: ![]() 基于.NET的Windows窗体编程之WinForms入门简介 基于.NET的Windows窗体编程之WinForms控件简介 阅读原文:点击这里 该文章在 2026/4/13 12:43:33 编辑过 |
关键字查询
相关文章
正在查询... |