【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性能的讨论。之前我一直在使用它们,但从未从性能的角度考虑过,这…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...