c#软件开发学习笔记--Winform窗体第二期
WinForm 学习总结 - 第二十三天一、登录功能与窗体切换1.1 应用程序入口namespace_01_登录{internalstaticclassProgram{[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);LoginFrmloginFrmnewLoginFrm();// 使用 ShowDialog() 以模态方式显示登录窗体if(loginFrm.ShowDialog()DialogResult.OK){// 登录成功后显示主窗体Application.Run(newBankCustormerFrm(admin));}}}}1.2 登录窗体实现publicpartialclassLoginFrm:Form{publicLoginFrm(){InitializeComponent();}privatevoidbtnLogin_Click(objectsender,EventArgse){// 验证账号if(string.IsNullOrWhiteSpace(txtAccount.Text)){label3.Text账号不能为空白;return;}// 验证密码if(string.IsNullOrWhiteSpace(txtPassword.Text)){MessageBox.Show(密码不能为空白);return;}// 验证账号密码if(!(txtAccount.TextadmintxtPassword.Textadmin)){MessageBox.Show(账号或密码出错请重新输入);return;}// 登录成功设置返回结果DialogResultDialogResult.OK;}}1.3 主窗体接收参数publicpartialclassBankCustormerFrm:Form{publicBankCustormerFrm(stringvalue){InitializeComponent();label1.Text$欢迎{value}进入;}}二、模态对话框与非模态对话框2.1 概念对比特性模态对话框 (ShowDialog())非模态对话框 (Show())窗口层级独占顶层阻止操作其他窗口与主窗口平级可自由切换关闭方式Close()关闭并销毁Hide()隐藏仍存在返回值返回DialogResult无返回值典型场景登录框、确认框工具栏、属性面板2.2 关闭应用程序的方式// 1. 关闭当前窗口非主窗口无法退出程序this.Close();// 2. 退出所有窗体无法处理非托管线程Application.Exit();// 3. 退出调用线程上的所有消息Application.ExitThread();// 4. 最彻底的退出方式强制退出所有线程System.Environment.Exit(0);推荐做法在主窗体的FormClosed事件中使用privatevoidfrmMain_FormClosed(objectsender,FormClosedEventArgse){if(tip!null){tip.Dispose();}Dispose();System.Environment.Exit(0);}三、Controls 集合3.1 遍历控件集合publicpartialclassForm1:Form{publicForm1(){InitializeComponent();// 遍历窗体上所有控件foreach(ControlcinControls){Console.WriteLine(c);// 筛选特定类型控件if(cisButton){Console.WriteLine(c.Text);}}// 通过索引访问控件Console.WriteLine(Controls[0]);Console.WriteLine(Controls[1]);}}四、消息提示框 (MessageBox)4.1 基本用法// 基本消息提示MessageBox.Show(提示信息);// 带标题MessageBox.Show(提示信息,窗口标题);// 带按钮类型和图标MessageBox.Show(提示信息,窗口标题,MessageBoxButtons.YesNo,MessageBoxIcon.Stop,MessageBoxDefaultButton.Button2);4.2 MessageBoxButtons 枚举枚举值按钮组合OK确定OKCancel确定、取消YesNo是、否YesNoCancel是、否、取消RetryCancel重试、取消AbortRetryIgnore中止、重试、忽略4.3 MessageBoxIcon 枚举枚举值图标样式Information信息图标 (i)Warning警告图标 (!)Error错误图标 (X)Question疑问图标 (?)Asterisk信息图标Exclamation警告图标Hand错误图标Stop错误图标4.4 处理用户选择DialogResultresMessageBox.Show(确认删除吗,删除,MessageBoxButtons.OKCancel);if(resDialogResult.OK){// 用户点击确定Controls.Remove(label1);}五、RadioButton 控件单选框5.1 特性互斥性同一容器内只能选择一个Checked 属性true表示选中false表示未选中CheckedChanged 事件选中状态改变时触发5.2 代码示例publicpartialclassForm1:Form{publicForm1(){InitializeComponent();// 创建Panel作为容器Panelp1newPanel();p1.BackColorColor.Red;p1.SizenewSize(100,100);p1.LocationnewPoint(330,0);// 创建单选框RadioButtonr1newRadioButton();r1.Text男;r1.LocationnewPoint(30,10);p1.Controls.Add(r1);RadioButtonr2newRadioButton();r2.Text女;r2.LocationnewPoint(30,30);r2.Checkedtrue;// 默认选中p1.Controls.Add(r2);// 添加事件处理r1.CheckedChangedFanfan;r2.CheckedChangedFanfan;this.Controls.Add(p1);}publicvoidFanfan(objecto,EventArgse){RadioButtonroasRadioButton;if(r.Checked){Console.WriteLine(选择了r.Text);}}}5.3 关键要点互斥性同一容器内的 RadioButton 自动互斥分组不同容器Panel/GroupBox中的 RadioButton 互不影响事件CheckedChanged在选中状态改变时触发六、CheckBox 控件复选框6.1 特性独立选择每个 CheckBox 独立不互斥Checked 属性true表示勾选false表示未勾选CheckedChanged 事件勾选状态改变时触发6.2 代码示例publicpartialclassForm1:Form{publicForm1(){InitializeComponent();// 动态创建 CheckBoxCheckBoxc1newCheckBox(){Textnew出来的多选框,LocationnewPoint(180,100),Checkedtrue,// 默认勾选};Controls.Add(c1);// 绑定事件checkBox2.CheckedChangedcheckBox1_CheckedChanged;checkBox3.CheckedChangedcheckBox1_CheckedChanged;c1.CheckedChangedcheckBox1_CheckedChanged;}privatevoidcheckBox1_CheckedChanged(objectsender,EventArgse){CheckBoxc(CheckBox)sender;if(c.Checked){Console.WriteLine(c.Text);}}}七、ListBox 控件列表框7.1 选择模式SelectionMode说明None不可选择One单选默认MultiSimple多选点击切换MultiExtended多选支持 Ctrl/Shift7.2 代码示例publicpartialclassForm1:Form{publicForm1(){InitializeComponent();// 添加项listBox1.Items.Add(罗志祥);listBox1.Items.Add(李云迪);listBox1.Items.Add(蔡徐坤);// 动态创建 ListBoxListBoxlistBoxnewListBox();listBox.LocationnewPoint(100,20);listBox.SizenewSize(100,180);Controls.Add(listBox);// 批量添加string[]stringsnewstring[]{111,222,333};listBox.Items.AddRange(strings);// 设置多选模式listBox.SelectionModeSelectionMode.MultiSimple;// 绑定事件listBox.SelectedIndexChangedXuanzhong;}publicstaticvoidXuanzhong(objectsender,EventArgse){ListBoxl1senderasListBox;// 单选获取选中项// Console.WriteLine(l1.SelectedItem);// Console.WriteLine(l1.SelectedIndex);// 多选遍历所有选中项stringssstring.Empty;foreach(variteminl1.SelectedItems){ssitem;}Console.WriteLine(ss);}}八、ComboBox 控件下拉框8.1 特性结合文本框和列表框功能支持输入和选择DropDownStyle属性控制行为8.2 代码示例publicpartialclassForm1:Form{publicForm1(){InitializeComponent();// 动态创建 ComboBoxComboBoxcbnewComboBox();cb.SizenewSize(60,30);cb.LocationnewPoint(100,100);Controls.Add(cb);// 添加项cb.Items.AddRange(newstring[]{吴亦凡,罗志祥});// 绑定事件cb.SelectedIndexChangedGaibian;}publicstaticvoidGaibian(objectsender,EventArgse){ComboBoxcbsenderasComboBox;Console.WriteLine(cb.SelectedItem);// 获取选中项Console.WriteLine(cb.SelectedIndex);// 获取选中索引}}九、NumericUpDown 控件数字输入框9.1 主要属性属性说明Value当前数值decimal 类型Minimum最小值Maximum最大值Increment增减步长DecimalPlaces小数位数ThousandsSeparator是否显示千位分隔符9.2 代码示例publicpartialclassForm1:Form{publicForm1(){InitializeComponent();NumericUpDownnumnewNumericUpDown();num.Value10;// 初始值num.Minimum0;// 最小值num.Maximum100;// 最大值num.Increment2;// 步长num.DecimalPlaces0;// 小数位数Controls.Add(num);// 绑定值改变事件num.ValueChangednewEventHandler(numValueChanged);}privatevoidnumValueChanged(objectsender,EventArgse){NumericUpDownnum(NumericUpDown)sender;MessageBox.Show(当前的值是: num.Value.ToString());}}十、PictureBox 控件图片框10.1 图片加载方式// 方式1从文件加载pictureBox.ImageImage.FromFile(C:\Images\0001.PNG);// 方式2设置图片路径pictureBox.ImageLocationC:\Images\0001.PNG;// 方式3从资源加载pictureBox.ImageProperties.Resources.background;10.2 SizeMode 属性SizeMode说明Normal图片位于左上角超出部分被剪切StretchImage拉伸图片以适应控件可能失真Zoom保持比例缩放完整显示AutoSize控件根据图片自动调整大小CenterImage图片居中显示超出部分被剪切10.3 代码示例pictureBox1.SizenewSize(200,150);pictureBox1.LocationnewPoint(10,10);pictureBox1.SizeModePictureBoxSizeMode.StretchImage;pictureBox1.ImageImage.FromFile(C:\Images\0001.PNG);// 点击事件pictureBox1.Click(sender,e){MessageBox.Show(图片被点击了);};十一、ImageList 组件11.1 特性存储和管理多个图像供其他控件共享使用如 ListView、TreeView减少内存占用11.2 轮播图示例publicpartialclassForm1:Form{intindex0;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){// 显示第一张图pictureBox1.ImageimageList1.Images[index];}privatevoidbutton1_Click(objectsender,EventArgse){// 切换到下一张index;if(indeximageList1.Images.Count){index0;}pictureBox1.ImageimageList1.Images[index];}}十二、核心概念总结12.1 窗体生命周期构造函数 → Load事件 → 显示 → 用户交互 → FormClosing → 关闭12.2 事件处理模式// 方式1设计器绑定privatevoidbutton1_Click(objectsender,EventArgse){}// 方式2代码绑定Lambdabtn.Click(sender,e){MessageBox.Show(点击);};// 方式3代码绑定方法引用btn.Clickbutton1_Click;// 移除事件btn.Click-button1_Click;12.3 控件创建方式// 方式1设计器拖放可视化// 方式2代码动态创建ControlcontrolnewControlType();control.Propertyvalue;this.Controls.Add(control);十三、实用技巧控件访问通过Name属性或Controls集合访问控件类型转换使用as关键字安全转换sender对象资源管理使用Properties.Resources管理项目资源线程安全UI 更新应在 UI 线程执行使用Control.Invoke内存优化使用ImageList共享图像资源十四、使用场景模态对话框用于需要用户确认的操作如登录、确认删除非模态对话框用于辅助功能如工具栏、搜索框Controls 集合用于批量操作或动态控件管理消息提示应适度使用避免频繁弹窗影响用户体验单选框分组使用Panel或GroupBox容器图片显示根据需求选择合适的SizeMode

相关新闻

电阻、电容、电感,二极管、三极管、mos管

电阻、电容、电感,二极管、三极管、mos管

一、电阻1、核心定义:电阻是消耗电能,将电能转化为热能的元件,是纯耗能元件2、单位:欧姆Ω3、作用:限流、分压、发热(WI^2*R),匹配阻抗、构成滤波器4、核心定律:欧姆定律…

2026/6/23 16:09:58阅读更多 →
SpringCloud Alibaba Sentinel 限流+熔断完整实战教程

SpringCloud Alibaba Sentinel 限流+熔断完整实战教程

一、前言在微服务架构中,流量突增、下游服务超时、报错雪崩是线上最常见的稳定性问题。Sentinel 作为阿里开源、经过双11大促打磨的流量防护组件,相比 Hystrix 更轻量、功能更强、配置更灵活,是目前国内微服务限流、熔断、降级的主流方案。本…

2026/6/23 16:09:58阅读更多 →
向量数据库选型指南:FAISS、Milvus、Weaviate与Chroma的功能解析

向量数据库选型指南:FAISS、Milvus、Weaviate与Chroma的功能解析

向量数据库选型指南:FAISS、Milvus、Weaviate与Chroma的功能解析 在人工智能技术快速发展的背景下,向量数据库作为支撑大规模相似性搜索的核心工具,逐渐成为机器学习、推荐系统、自然语言处理等领域的底层基础设施。其核心功能是通过高效存储…

2026/6/23 16:09:58阅读更多 →
Apache Traffic Server在Ubuntu 14.04上的反向代理实战

Apache Traffic Server在Ubuntu 14.04上的反向代理实战

1. 项目概述:为什么在 Ubuntu 14.04 上用 ATS 做反向代理不是“怀旧”,而是精准选型Apache Traffic Server(ATS)不是 Nginx 的平替,也不是 HAProxy 的简化版——它从诞生起就带着雅虎大规模内容分发的基因,…

2026/6/23 18:35:36阅读更多 →
Gemini 3.1 Flash 计费逻辑深度解析:Token+推理强度双维定价

Gemini 3.1 Flash 计费逻辑深度解析:Token+推理强度双维定价

1. 一个被误读的“降价”:Gemini 3.1 Flash API 根本没调过价,但它的计费逻辑变了最近在开发者社区里,“Gemini 3.1 Flash API 降价了吗?”这个问题像野火一样烧起来。我看到不少人在 Slack 群、GitHub Discussions 甚至技术博客评…

2026/6/23 18:35:36阅读更多 →
Spring 5:响应式架构与Kotlin原生支持的工程实践分水岭

Spring 5:响应式架构与Kotlin原生支持的工程实践分水岭

1. Spring 5:不是版本号,而是Java企业级开发的分水岭Spring 5发布于2017年9月,表面看只是框架主版本从4.x升到5.x,但实际它是一次彻底的“断代式重构”。我带团队在2018年初把一个运行五年的Spring MVCTomcat项目迁移到Spring 5.0…

2026/6/23 18:35:36阅读更多 →
Prisma + PostgreSQL 生产级落地指南:从连接配置到向量搜索

Prisma + PostgreSQL 生产级落地指南:从连接配置到向量搜索

1. 为什么不用 Express 原生写 SQL,而要选 Prisma PostgreSQL 这套组合? 我第一次在生产环境里用原生 Node.js pg 模块手写 CRUD 的时候,正赶上周五下午三点——一个本该安静收尾的时刻。结果因为一个 INSERT INTO users (name, email) VA…

2026/6/23 18:35:36阅读更多 →
三步构建AI API使用数据自动化分析流水线:从账单到洞察

三步构建AI API使用数据自动化分析流水线:从账单到洞察

1. 项目概述:为什么我们需要自动化导出AI使用数据? 如果你正在使用各类AI服务,无论是OpenAI的ChatGPT API、Claude API、DeepSeek API,还是国内的智谱、文心一言等大模型,一个绕不开的痛点就是: 账单和用量…

2026/6/23 18:35:36阅读更多 →
零样本学习在软件工程情感分析中的创新应用

零样本学习在软件工程情感分析中的创新应用

1. 零样本学习在软件工程情感分析中的突破性应用情感分析作为自然语言处理(NLP)的核心任务,在软件工程领域展现出独特价值。传统方法通过分析开发者社区讨论、代码审查意见和应用商店评论等文本数据,帮助团队捕捉开发者情绪、识别…

2026/6/23 18:30:35阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/23 7:04:52阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/23 5:55:37阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →