【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox
文章目录
- 1.WinForm文件结构
- 2. 窗体的常用属性、方法与事件
- 2.1 常用属性(可直接在属性中设置)
- 2.2 常用方法
- 2.3 常用事件
- 3.Label、TextBox及Button控件
- 4.RadioButton和CheckBox
- 5.ListBox(列表框)
1.WinForm文件结构
.sln文件 :解决方案文件 位置引用
bin文件夹: 存放项目的编译结果 exe dll debug 调试 release 发布 pdb 位置信息–调试
obj文件夹 object 编译过程中生成的中间临时文件 加快编译速度
Properties 引用 添加引用 --选择需要的程序集
App.config 配置文件
.csproj 项目文件 位置引用 双击打开项目
Program.cs :程序入口
Form.cs 源代码(窗口处理代码)
Form.Designer.cs 窗体布局代码 自动生成对应的控件代码
Form.resx 窗体的资源
2. 窗体的常用属性、方法与事件

2.1 常用属性(可直接在属性中设置)
| 属性名称 | 描述 | 示例代码 |
|---|---|---|
Text | 窗体的标题 | this.Text = "My Application"; |
Size | 窗体的尺寸 | this.Size = new Size(800, 600); |
Location | 窗体在屏幕上的位置 | this.Location = new Point(100, 100); |
WindowState | 窗体的状态(正常、最小化、最大化) | this.WindowState = FormWindowState.Maximized; |
BackColor | 窗体的背景颜色 | this.BackColor = Color.Red; |
FormBorderStyle | 窗体边框的样式 | this.FormBorderStyle = FormBorderStyle.FixedDialog; |
StartPosition | 窗体的初始位置 | this.StartPosition = FormStartPosition.CenterScreen; |
2.2 常用方法
| 方法名称 | 描述 | 示例代码 |
|---|---|---|
Show() | 显示窗体 | this.Show(); |
ShowDialog() | 模态显示窗体 | this.ShowDialog(); |
Hide() | 隐藏窗体 | this.Hide(); |
Close() | 关闭窗体 | this.Close(); |
Activate() | 激活窗体 | this.Activate(); |
Invalidate() | 强制重新绘制窗体 | this.Invalidate(); |
Show() 和 ShowDialog() 是用于显示窗体的两个不同方法,区别如下:
-
Show()-
非模态窗体(Non-modal): 当你使用
Show()方法显示一个窗体时,用户可以自由地在新打开的窗体和原窗体之间切换。 -
并行交互: 用户可以同时与父窗体和子窗体交互。
-
代码继续执行: 在
Show()方法后面的代码会立即执行,不会等待新打开的窗体关闭。
-
-
ShowDialog()-
模态窗体(Modal): 当你使用
ShowDialog()打开一个窗体时,用户必须首先关闭该窗体才能继续与父窗体交互。 -
串行交互: 用户在关闭新窗体之前不能与父窗体交互。
-
代码等待:
ShowDialog()后面的代码会等待用户关闭新打开的窗体才会执行。
-
2.3 常用事件
| 事件名称 | 描述 | 示例用途 |
|---|---|---|
Load | 窗体加载时触发 | 初始化窗体内容 |
Click | 在窗体上单击时触发 | 处理单击事件 |
MouseMove | 鼠标在窗体上移动时触发 | 实现自定义的鼠标跟踪 |
KeyPress | 键盘按键被按下时触发 | 处理键盘输入 |
FormClosing | 窗体即将关闭时触发 | 弹出确认对话框或保存设置 |
Resize | 窗体尺寸改变时触发 | 动态调整控件位置和大小 |
3.Label、TextBox及Button控件
Label(标签)控件:
- 属性:
- Name:控件的名称,用于在代码中引用它,一般以lbl开头,例如: lblUserName
- Text:设置或获取显示在标签上的文本信息。
- Image:用于显示图像。
- ImageList:图像集控件。
- Size:控件的尺寸,包括Width和Height。
- Tag:与控件相关的自定义数据。
- Enabled:确定是否启用标签。
- Location:控件在窗体上的位置,包括X和Y坐标。
- 事件:
- Click:当用户单击标签时触发。
- TextChanged:当标签的文本内容发生更改时触发。
TextBox(文本框)控件:
- 属性:
- Name:控件的名称。一般以txt开头,例如:txtUserName
- Text:用于输入和获取文本信息。
- MultiLine:确定文本框是否支持多行文本输入。
- WordWrap:确定是否可以自动换行。
- PasswordChar:指定密码框中的密码字符。
- Size:控件的尺寸。
- Enabled:确定是否启用文本框。
- Location:控件在窗体上的位置。
- 方法:
- AppendText(text):将指定的text文本追加到文本框的末尾。
- Clear():清除文本框中的文本。
- Focus():使文本框获取焦点。
- Select():选择文本框中的文本。
- SelectAll():选择文本框中的所有文本。
- 事件:
- TextChanged:当文本框的文本内容发生更改时触发。
- Click:一般不用于文本框,通常用于按钮等控件。
Button(按钮)控件:
- 属性:
- Name:控件的名称。
- Text:用于显示在按钮上的文本。
- BackgroundImage:背景图片。
- Image:按钮上显示的图像。
- BackColor:背景色。
- ForeColor:文本颜色。
- Visible:确定按钮是否可见。
- 事件:
- Click:当用户单击按钮时触发,通常用于执行与按钮相关的命令。
案例:做一个简单的登录界面

代码
public partial class FrmUser : Form{public FrmUser(){InitializeComponent();txtName.Text = "请输入账户";txtPassword.Text = "请输入密码";txtName.ForeColor = Color.Gray;txtPassword.ForeColor = Color.Gray;}private void Form1_Load(object sender, EventArgs e) //sender事件触发的对象{}private void textBox2_TextChanged(object sender, EventArgs e){txtPassword.ForeColor = Color.Black;}private void txtName_TextChanged(object sender, EventArgs e){txtName.ForeColor = Color.Black;}private void button2_Click(object sender, EventArgs e){string UserName = txtName.Text.Trim();string userPwd = txtPassword.Text;if (string.IsNullOrEmpty(UserName) || UserName == "请输入账户"){MessageBox.Show("请输入用户名!", "登录页面", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}if (string.IsNullOrEmpty(userPwd) || UserName == "请输入密码"){MessageBox.Show("请输入密码!", "登录页面", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}MessageBox.Show("登录成功!", "进入主界面中....", MessageBoxButtons.OK, MessageBoxIcon.Information);}private void btn_Click(object sender, EventArgs e){this.Close();}}
代码实现了一个基本的用户登录界面,用户可以输入用户名和密码,点击 “登录” 按钮进行登录,或者点击 “关闭” 按钮关闭窗体。同时,也包含了一些用户友好的功能,如在文本框中显示提示文本,输入文本时改变文本颜色,以及在输入验证时显示错误消息框。


4.RadioButton和CheckBox
RadioButton(单选按钮)
RadioButton 用于在一组选项中选择单一选项。在一组单选按钮中,只能选中其中一个,互相排斥。
属性:
Name: 控件的名称Text: 显示在界面上的文本Checked: 是否被选中,返回布尔值AutoCheck: 自动更改其他 RadioButton 的选中状态,默认为 true。
事件:
CheckedChanged: 当选中状态改变时触发该事件。
应用场景:
- 角色选择登录
- 性别选择
分组与代码操作: RadioButton 控件通常会放在一个 GroupBox 控件内,以形成一个逻辑分组,从而在这个分组中只能选择一个选项。通过代码也可以轻易地改变 RadioButton 的状态,例如 radioButton1.Checked = true;。
事件处理: 你可以在 CheckedChanged 事件的事件处理器中添加逻辑,以响应用户的操作。例如:
csharpCopy codeprivate void radioButton1_CheckedChanged(object sender, EventArgs e)
{if (radioButton1.Checked){// 执行某些操作}
}
CheckBox(复选框)
CheckBox 用于在一组选项中选择一个或多个项。
属性:
Name: 控件的名称Text: 显示在界面上的文本Checked: 是否被选中,返回布尔值。AutoCheck: 单击时自动更改选中状态,默认为 true,通常不要去修改这个属性。CheckState: 表示三种不同的状态——未选中、选中、中间状态。ThreeState: 控制 CheckBox 是三种状态还是两种,默认为 false。
事件:
CheckedChanged: 当Checked属性值改变时触发。CheckStateChanged: 当CheckState改变时触发。
事件触发顺序:
CheckedChanged(Checked 属性值改变)CheckStateChanged(CheckState 改变)
应用场景:
- 权限分配
- 角色分配
高级用法与代码操作: 当 ThreeState 属性设置为 true 时,CheckBox 可以有三种状态:未选中、选中和中间状态。这在一些复杂的场景中(例如,批量操作)可能会很有用。通过代码也可以轻易地改变 CheckBox 的状态,例如 checkBox1.Checked = true; 或 checkBox1.CheckState = CheckState.Indeterminate;。
事件处理: 你可以在 CheckedChanged 或 CheckStateChanged 事件的事件处理器中添加逻辑,以响应用户的操作。例如:
csharpCopy codeprivate void checkBox1_CheckedChanged(object sender, EventArgs e)
{if (checkBox1.Checked){// 执行某些操作}
}
示例:
public partial class frmSubmit : Form{public frmSubmit(){InitializeComponent();}private void btnCancel_Click(object sender, EventArgs e){this.Close();}private void btnOk_Click(object sender, EventArgs e){MessageBox.Show("提交成功!", "提交完成", MessageBoxButtons.OK, MessageBoxIcon.Information);}private void rdWriter_CheckedChanged(object sender, EventArgs e){DialogResult result = MessageBox.Show("确定切换吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);// 判断用户的选择if (result == DialogResult.OK){// 用户选择了 OK,执行相应的操作// 这里可以放置你想要执行的代码}else if (result == DialogResult.Cancel){// 用户选择了 Cancel,可以选择不执行任何操作// 或者放置一些取消操作的代码}}}
上面代码包含了按钮点击事件和单选按钮选择事件的处理逻辑。在用户与窗体进行交互时,它会显示消息框以获得用户的确认或取消操作,并根据用户的选择执行相应的操作。

5.ListBox(列表框)
ListBox 是 Windows Forms 中的一个控件,用于显示一列可选项,用户可以选择一项或多项。
属性:
Name: 控件的名称Items: 列表框中的项集合,可以通过它来添加、移除和操作列表中的项。DataSource: 数据源,用于绑定 ListBox 到外部数据源,通常与DisplayMember和ValueMember属性一起使用。DisplayMember: 指定绑定数据源时显示的字段的名称。ValueMember: 指定绑定数据源时用作值的字段的名称。
事件:
SelectedIndexChanged: 当选择项更改时触发的事件,可以用于捕捉用户的选择变化。
示例:
public partial class FrmListBox : Form
{public FrmListBox(){InitializeComponent();}private void FrmListBox_Load(object sender, EventArgs e){//项的清除listBox1.Items.Clear();//避免控件闪烁的问题listBox1.BeginUpdate();//闪烁//for循环等加载大量的项 listBox1.EndUpdate();//添加项listBox1.Items.Add(123);listBox1.Items.Add("jason");string[] list = { "adbc", "admin", "sqlserver" };listBox1.Items.AddRange(list);listBox1.Items.Insert(3, "micosoft");int index = listBox1.Items.IndexOf("admin");//获取索引bool bl = listBox1.Items.Contains("sqlserver");//存在listBox1.Items.Remove("admin");listBox1.Items.RemoveAt(3);}
}

相关文章:
【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox
文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性(可直接在属性中设置)2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox(列表框) 1.WinForm文件结构 .sln文件 &am…...
【SwiftUI模块】0060、SwiftUI基于Firebase搭建一个类似InstagramApp 3/7部分-搭建TabBar
SwiftUI模块系列 - 已更新60篇 SwiftUI项目 - 已更新5个项目 往期Demo源码下载 技术:SwiftUI、SwiftUI4.0、Instagram、Firebase 运行环境: SwiftUI4.0 Xcode14 MacOS12.6 iPhone Simulator iPhone 14 Pro Max SwiftUI基于Firebase搭建一个类似InstagramApp 3/7部分-搭建Tab…...
PureFlash云原生存储部署方法
PureFlash云原生存储 PureFlash是一个开源存储系统,它能为云计算和传统应用提供块存储服务。PureFlash最显著的优势是其高性能,每节点能提供超过100万IOPS随机写IO。 PureFlash可以以云原生的方式部署,并为云原生应用提供持久存储。 PureFl…...
SqueezeNet 一维,二维网络复现 pytorch 小白易懂版
SqueezeNet 时隔一年我又开始复现神经网络的经典模型,这次主要复的是轻量级网络全家桶,轻量级神经网络旨在使用更小的参数量,无限的接近大模型的准确率,降低处理时间和运算量,这次要复现的是轻量级网络的非常经典的一…...
Java 数据结构
枚举 Java枚举是一种特殊的类,它用于定义有限个特定的值,例如一周的星期或者性别。枚举在Java中被视为数据类型,你可以使用它们来创建枚举类型的变量,然后使用那些枚举值等。 在Java中,声明枚举类型需要使用enum关键字…...
python sqlalchemy(ORM)- 02 表关系
文章目录 表关系ORM表示 1v1ORM表示 1vm 表关系 1:1,表A 中的一条记录,仅对应表B中的一条记录;表B的一条记录,仅对应表A的一条记录。1:m,表A中的一条记录,对应表B中的多条记录,表B中的一条记录…...
Http长连接同一个socket多个请求和响应如何保证一一对应?
HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的…...
Standford Compiler Course Assignment 2
第二部分的作业是语法分析,通过编写cool.y(这个assignment的任务),利用bison将其自动生成语法分析LALR(1)的代码。 语法分析,就是将词法分析阶段已经识别好的token,按照语法的规则,构建抽象语法树的过程。 比如以下的…...
基于Java的校园论坛管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
谈谈你对Spring的理解
谈谈你对Spring的理解 一,什么是Spring 1.介绍 Spring是一个用于开发Java应用程序的工具集合,它提供了许多方便的组件和工具,可以帮助开发者更轻松地构建企业级应用程序。 Spring Framework是Spring的核心部分,它可以帮助开发者…...
系统架构师考试易混淆知识点总结
易混淆点1:系统工程生命周期与信息系统的生命周期 1、系统工程生命周期阶段 探索性研究→概念阶段→开发阶段→生产阶段→使用阶段→保障阶段→退役阶段 2、信息系统的生命周期 产生阶段→开发阶段(单个系统开发:总体规划、系统分析、系统设计、系统实施、系统验收…...
反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )
1、绕过 编译阶段 为集合添加数据 反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以 为集合存入其他任意类型的元素的 。泛型只是在编译阶段可以约束集合只能操作某种数据类型,在 编译成Class文件进入 运行阶段 的时候&a…...
前端开发实践:vue中用qrcode库将超链接生成二维码图片
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…...
数据库连接池有什么用?它有哪些关键参数?
首先,数据库连接池是一种池化技术,池化技术的核心思想是实现资源的复用,避免资源重复创建销毁的开销。而在数据库的应用场景里面,应用程序每次向数据库发起 CRUD 操作的时候,都需要创建连接.在数据库访问量较大的情况下…...
Android Settings解析
Android Settings 系列文章: Android Settings解析SettingsIntelligenceSettingsProvider 首语 Android设置应用是Android系统中一个非常重要的系统应用,它允许用户调整和设置系统的各种参数和功能(系统设置/自定义设置/控制应用权限/开发…...
Spring+spring mvc+mybatis整合的框架
Spring是一个轻量级的企业级应用开发框架,于2004年由Rod Johnson发布了1.0版本,经过多年的更新迭代,已经逐渐成为Java开源世界的第一框架,Spring框架号称Java EE应用的一站式解决方案,与各个优秀的MVC框架如SpringMVC、…...
02-2、PyCharm中文乱码的三处解决方法
PyCharm中文乱码 修改处1: 修改处2:这个也没用 在Pycharm中可以创建一个模版,每次新建python文件时Pycharm会默认在前两行生成utf-8 #!/user/bin/env python3 # -- coding: utf-8 -- 还是乱码 再在这里设置以下 添加 : -Dfi…...
Axi接口的DDR3:参数,时序,握手机制
参考 AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?_axi wrap-CSDN博客 还有官方手册,名字太长想起来再写。 Transaction/Burst/Transfer/Beat Transaction指一次传输事务,实际上包括了address phase, data phase与response ph…...
浏览器标签上添加icon图标;html引用ico文件
实例 <link rel"shortcut icon" href"./XXX.ico" type"image/x-icon">页面和图标在同一目录内 则 <link rel"shortcut icon" type"text/css" href"study.ico"/>可以阿里矢量图库关键字搜索下载自己…...
深入解析i++和++i的区别及性能影响
在我们编写代码时,经常需要对变量进行自增操作。这种情况下,我们通常会用到两种常见的操作符:i和i。最近在阅读博客时,我偶然看到了有关i和i性能的讨论。之前我一直在使用它们,但从未从性能的角度考虑过,这…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
