WinForm界面布局

news/2025/11/30 16:31:07/文章来源:https://www.cnblogs.com/cedu/p/19289598

在C# WinForm中,界面布局是创建用户友好且功能完善应用程序的关键部分。以下详细介绍常见的布局方式及其示例。

1. 绝对定位(Absolute Positioning)

  • 原理:通过设置控件的 Location 属性(指定控件左上角相对于其父容器的坐标)和 Size 属性(指定控件的宽度和高度)来精确确定控件在窗体上的位置和大小。
  • 特点:布局简单直接,但在不同分辨率或不同缩放比例下,控件可能会出现布局错乱的情况,适应性较差。
  • 示例
using System;
using System.Drawing;
using System.Windows.Forms;namespace AbsolutePositioningExample
{public partial class Form1 : Form{public Form1(){InitializeComponent();Button button1 = new Button();button1.Text = "按钮1";button1.Location = new Point(50, 30);button1.Size = new Size(100, 30);this.Controls.Add(button1);TextBox textBox1 = new TextBox();textBox1.Location = new Point(160, 30);textBox1.Size = new Size(150, 30);this.Controls.Add(textBox1);}}
}

2. FlowLayoutPanel

  • 原理:按照从左到右、从上到下的顺序自动排列控件,当一行排满时,自动换行继续排列。
  • 特点:适合简单的线性布局,控件会根据 FlowLayoutPanel 的大小自动调整排列方式,具有一定的自适应能力。
  • 示例
using System;
using System.Windows.Forms;namespace FlowLayoutPanelExample
{public partial class Form1 : Form{public Form1(){InitializeComponent();FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel();flowLayoutPanel1.Dock = DockStyle.Fill;for (int i = 0; i < 10; i++){Button button = new Button();button.Text = $"按钮 {i + 1}";flowLayoutPanel1.Controls.Add(button);}this.Controls.Add(flowLayoutPanel1);}}
}

3. TableLayoutPanel

  • 原理:将控件按照表格形式进行排列,通过设置行和列的属性来确定每个单元格的大小和位置,控件可以跨越多行或多列。
  • 特点:适用于需要精确对齐和复杂布局的场景,能很好地控制控件的相对位置,且在不同大小的容器中能保持较好的布局稳定性。
  • 示例
using System;
using System.Windows.Forms;namespace TableLayoutPanelExample
{public partial class Form1 : Form{public Form1(){InitializeComponent();TableLayoutPanel tableLayoutPanel1 = new TableLayoutPanel();tableLayoutPanel1.Dock = DockStyle.Fill;tableLayoutPanel1.ColumnCount = 2;tableLayoutPanel1.RowCount = 2;tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50));tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 50));Button button1 = new Button();button1.Text = "左上角按钮";tableLayoutPanel1.Controls.Add(button1, 0, 0);Button button2 = new Button();button2.Text = "右上角按钮";tableLayoutPanel1.Controls.Add(button2, 1, 0);Button button3 = new Button();button3.Text = "左下角按钮";tableLayoutPanel1.Controls.Add(button3, 0, 1);Button button4 = new Button();button4.Text = "右下角按钮";tableLayoutPanel1.Controls.Add(button4, 1, 1);this.Controls.Add(tableLayoutPanel1);}}
}

4. DockLayoutPanel

  • 原理:通过设置控件的 Dock 属性,使控件能够沿着其父容器的边缘进行停靠,或者填充整个父容器。Dock 属性的值包括 TopBottomLeftRightFill
  • 特点:非常适合创建具有固定区域(如菜单在顶部、状态栏在底部、侧边栏在左侧或右侧等)的界面布局,能有效利用容器空间并自适应容器大小变化。
  • 示例
using System;
using System.Windows.Forms;namespace DockLayoutPanelExample
{public partial class Form1 : Form{public Form1(){InitializeComponent();MenuStrip menuStrip1 = new MenuStrip();menuStrip1.Dock = DockStyle.Top;menuStrip1.Items.Add("文件");menuStrip1.Items.Add("编辑");this.Controls.Add(menuStrip1);StatusStrip statusStrip1 = new StatusStrip();statusStrip1.Dock = DockStyle.Bottom;statusStrip1.Items.Add("状态栏信息");this.Controls.Add(statusStrip1);Panel leftPanel = new Panel();leftPanel.Dock = DockStyle.Left;leftPanel.Width = 150;Button leftButton = new Button();leftButton.Text = "左侧按钮";leftPanel.Controls.Add(leftButton);this.Controls.Add(leftPanel);Panel mainPanel = new Panel();mainPanel.Dock = DockStyle.Fill;Label mainLabel = new Label();mainLabel.Text = "主内容区域";mainLabel.Dock = DockStyle.Fill;mainPanel.Controls.Add(mainLabel);this.Controls.Add(mainPanel);}}
}

5. SplitContainer

  • 原理:将容器分为两个可调整大小的面板,用户可以通过拖动分隔条来改变两个面板的相对大小。
  • 特点:适用于需要在同一窗口中展示两个相关但独立内容区域的场景,例如在资源管理器中,一边显示文件夹结构,另一边显示文件内容。
  • 示例
using System;
using System.Windows.Forms;namespace SplitContainerExample
{public partial class Form1 : Form{public Form1(){InitializeComponent();SplitContainer splitContainer1 = new SplitContainer();splitContainer1.Dock = DockStyle.Fill;Panel panel1 = new Panel();panel1.BackColor = System.Drawing.Color.LightBlue;Button button1 = new Button();button1.Text = "面板1按钮";panel1.Controls.Add(button1);splitContainer1.Panel1.Controls.Add(panel1);Panel panel2 = new Panel();panel2.BackColor = System.Drawing.Color.LightGreen;Button button2 = new Button();button2.Text = "面板2按钮";panel2.Controls.Add(button2);splitContainer1.Panel2.Controls.Add(panel2);this.Controls.Add(splitContainer1);}}
}

通过合理选择和组合这些布局方式,可以创建出美观、易用且适应性强的WinForm界面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/982009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P7137 [THUPC 2021 初赛] 切切糕

Solution 跟 这题 没什么区别。 设 \(f_{i,j}\) 表示切了 \(i\) 个蛋糕,Tinytree 使用了 \(j\) 次“优先选糕权”时他能拿到的最多蛋糕。那么有 \(f_{i,j}=\max(f_{i-1,j-1}+a_i-t,f_{i-1,j}+t),0 \le t \le \frac{a_…

完整教程:【普中STM32F1xx开发攻略--标准库版】-- 第 12 章 STM32 时钟系统

完整教程:【普中STM32F1xx开发攻略--标准库版】-- 第 12 章 STM32 时钟系统2025-11-30 16:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x…

状压DP 学习笔记

一、基础位操作:单个比特位的判断与修改功能 用途 位运算表达式 原理判断第 \(i\) 位是否为 \(1\)(元素 \(i\) 是否在集合中) 检查状态中是否包含某个元素(如 “城市 i 是否已访问”“任务 i 是否已完成”) (mask…

应用Graphics2D创建滑块验证码

应用Graphics2D创建滑块验证码pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

母婴商标购买平台实测 TOP 榜公布(2025版):这 5 家安全过户不踩雷

在母婴行业品牌化竞争白热化的 2025 年,一枚合规适配的商标成为企业入驻电商平台、建立消费者信任的 “关键门槛”。母婴类商标因覆盖食品、洗护、玩具、服饰等多个细分品类,对分类精准度、合规性及过户效率的要求远…

分子级的管理智慧:哲讯科技以SAP重塑化工行业安全与效能新标杆

分子级的管理智慧:哲讯科技以SAP重塑化工行业安全与效能新标杆化工行业,是现代工业体系的基石,从日常生活的衣食住行到关乎国计民生的高端材料,其身影无处不在。然而,这个创造无限可能的行业,也始终伴随着复杂的…

NOI Plus 2025 游记

T1 对于这种简单题,我们可以使用贪心解决。 对于这种简单的反悔贪心,我们显然是可以用网络流来做的。于是我开始思考费用流。 我开始建立费用流模型。对于每种商品建立两个点,源点向其中一个点连一条流量为无限,费…

2025赣州实力会议会展酒店TOP5权威推荐:专业场地赋能商

近年来,赣州作为区域经济与文旅融合的核心城市,商务会议、政务接待与大型庆典需求持续增长。2024年数据显示,赣州酒店会议会展业务年增速超25%,但行业痛点凸显:超30%的客户投诉集中在场地容量适配不足、设备老旧、…

Animation Rigging Unity官方的IK动画绑定教程

简单调整人物手臂IK看这个视频(5分钟): [Unity教程]-动画绑定(Animation Rigging)_哔哩哔哩_bilibili unity官方教程: [Unity 活动]-官方直播- Unity最新程序化动画绑定(Animation Rigging)技术介绍_哔哩哔哩_bilibi…

2025年河北实力不错的西点学校排名:西点学校哪家权威?西点

本榜单依托石家庄、保定、邯郸等河北核心城市的市场调研与真实学员口碑,深度筛选出5家标杆西点学校,为热爱西点的人群提供客观选型依据,助力精准匹配专业学习平台。 TOP1 推荐:河北欧米奇西点西餐学校 推荐指数:…

智链芯未来:哲讯科技以SAP系统赋能半导体产业数字化变革

智链芯未来:哲讯科技以SAP系统赋能半导体产业数字化变革在全球化竞争与技术迭代加速的背景下,半导体行业正面临前所未有的机遇与挑战。从芯片设计、晶圆制造到封装测试,产业链的复杂性与协同难度持续攀升。如何实现…

DDD支付模块

工作中对接了招商银行模块,但是回调过程中需要考虑很多问题,这里小计一下 网络不可靠!可能出现: 你的服务器临时过载(GC、Full GC) 数据库连接池满 防火墙拦截 代码 bug 导致 500 机房网络抖动 系统必须支持 幂等处…

实用指南:自然语言处理NLP的数据预处理:从原始文本到模型输入(MindSpore版)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

mac 防止brew 安装 nginx 后不通过服务直接启动

直接看代码~,逻辑很简单,把原命令替换掉NGINX_BIN=$(which nginx) sudo mv "$NGINX_BIN" "${NGINX_BIN}.bin" sudo tee "$NGINX_BIN" << EOF #!/bin/bashNGINX_REAL="${B…

2025年云南高三高考冲刺培训排名:高考冲刺培训推荐几家?

TOP1 推荐:昆明市五华区滇云教育培训学校有限公司 推荐指数:★★★★★ 口碑评分:云南家长公认的靠谱高考冲刺机构 专业能力:滇云教育是经五华区教体局批准的正规培训机构,以16年高考补习经验为根基,构建精细化管…

从小工到专家3

篇三:《终身成长:重新定义成功的思维模式》读后感 —— 专家的格局:用 “成长思维” 抵御职业天花板​ 成为行业内公认的 “专家” 后,我曾一度陷入 “能力固化” 的焦虑:担心自己的知识体系过时,害怕被新生代超…

2025常州本地美食新地标TOP5权威推荐:挖掘城市烟火味,

在消费升级与城市文旅融合的浪潮下,本地美食新地标已成为城市文化传播与消费活力的核心载体。2024年常州餐饮消费数据显示,美食打卡地带动的餐饮客流量年增35%,但消费者常遇特色同质化体验单一化文化割裂化三大痛点…

CICD(一)CI/CD概述及GitLab部署和一些Git命令 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11.30代码大全二

一、核心认知:代码的本质是“与人沟通” 很多人误以为代码是写给计算机执行的,实则代码首先是写给人看的,其次才是给机器运行的——毕竟代码的生命周期中,编写时间仅占10%,其余90%都在阅读、修改、调试和维护。这…

KFCoder - 敏捷冲刺日志 - 3rd

第 3 篇 Scrum 冲刺博客(2025 年 11 月 29 日) 一、站立式会议记录项目 内容会议时间 2025 年 11 月 29 日 09:00-09:13(13 分钟)会议地点 团队参会人员 徐新曜、许国伟、罗芷忻、田璐、陈曦、白子璇、辜艺淇会议照…