当前位置: 首页 > news >正文

C# winform如何实现数据的保存和读取

在c#winform中我们在写程序时,经常需要进行数据处理,那么数据如何保存和读取(下面我们通过序列化和反序列化的方式来实现)

第一步:  我们建立一个winform窗体

第二步:  构建一个外部实体类(Student类)

第三步:从图上按钮可以发现现在我定义了两个按钮(保存参数和读取参数)保存参数对应代码DataSave(),读取参数对应(DataRead)

DataSava方法代码如下:

DataRead方法如下

最后展示完整代码内容

结果演示:

 第一步:   按F5启动应用程序:

 第二步:修改控件中的数据并且点击保存参数

 第三步:保存成功后点击读取参数,在图片的右边会产生一个与原始窗体一样的窗体

1.首先创建窗体:

2.再新建一个实体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace  SlandDs
{//允许本类可以被序列化[Serializable]public class Student{//定义了五个属性分别是姓名,年龄,性别,班级,爱好public string Name { get; set; }public int Age  { get; set; }public string Six { get; set; }public string ClaslRoom { get; set; }public string Hoppy { get; set; }}
}

3.第三步:从图上按钮可以发现现在我定义了两个按钮(保存参数和读取参数)保存参数对应代码DataSave(),读取参数对应(DataRead)

DataSava方法代码如下:

        private bool DataSava(string fileName){try{if (student == null){student = new Student();}//首先把控件的值赋值给对象(也就是序列化)student.Name = txt_name.Text;student.Age = Convert.ToInt16(num_age.Value);student.Six = txt_six.Text;student.ClaslRoom = txt_classroom.Text;student.Hoppy = txt_hobby.Text;//第二步就是要把这些内容保存在一个数据文件中(后缀名为.dat)string FileDir = System.Windows.Forms.Application.StartupPath + "\\studnet\\";if (!Directory.Exists(FileDir)){Directory.CreateDirectory(FileDir);}//将学生数据保存在数据文件中mSerialize.FilePath = fileName;string Ren;mSerialize.SaveObj(student, out Ren);MessageBox.Show("学生数据保存成功", "提示");return true;}catch (System.Exception ex){MessageBox.Show(ex.Message);return false;}}

DataRead方法如下

        private bool DataRead(string fileName){try{if(student==null){student = new Student();}else if (mSerialize == null){mSerialize = new MSerialize(null);}string FileDir = System.Windows.Forms.Application.StartupPath + "\\studnet\\";if (!Directory.Exists(FileDir)){MessageBox.Show("student文件不存在");return false;}mSerialize.FilePath = fileName;string Ren;if (mSerialize.LoadObj(out student,out Ren)==true){txt_name.Text = student.Name;num_age.Value = student.Age;txt_six.Text = student.Six;txt_classroom.Text = student.ClaslRoom;txt_hobby.Text = student.Hoppy;MessageBox.Show("读取学生数据成功","提示");}elseMessageBox.Show("读取学生文件失败","提示");Form1 form = new Form1();form.dataRead(ref student);form.ShowDialog();return true;}catch (System.Exception ex){MessageBox.Show(ex.Message);return false;}}

最后展示完整代码内容

using System;
using System.IO;
using System.Windows.Forms;
using WRO;namespace SlandDs
{public partial class Form1 : Form{static   string FileName = System.Windows.Forms.Application.StartupPath + "\\studnet\\" + "studnet.dat";//必须保证在同一个命名控件下Student student;MSerialize mSerialize;public Form1(){mSerialize = new MSerialize(FileName);InitializeComponent();}public void dataRead(ref Student _student){try{if (_student==null){_student = new Student();}txt_name.Text = _student.Name;num_age.Value = _student.Age;txt_six.Text = _student.Six;txt_classroom.Text = _student.ClaslRoom;txt_hobby.Text = _student.Hoppy;}catch (System.Exception ex){MessageBox.Show(ex.Message);}}//保存private void button_保存_Click(object sender, EventArgs e){DataSava(FileName);}private bool DataSava(string fileName){try{if (student == null){student = new Student();}//首先把控件的值赋值给对象(也就是序列化)student.Name = txt_name.Text;student.Age = Convert.ToInt16(num_age.Value);student.Six = txt_six.Text;student.ClaslRoom = txt_classroom.Text;student.Hoppy = txt_hobby.Text;//第二步就是要把这些内容保存在一个数据文件中(后缀名为.dat)string FileDir = System.Windows.Forms.Application.StartupPath + "\\studnet\\";if (!Directory.Exists(FileDir)){Directory.CreateDirectory(FileDir);}//将学生数据保存在数据文件中mSerialize.FilePath = fileName;string Ren;mSerialize.SaveObj(student, out Ren);MessageBox.Show("学生数据保存成功", "提示");return true;}catch (System.Exception ex){MessageBox.Show(ex.Message);return false;}}//读取private void button_读取_Click(object sender, EventArgs e){DataRead(FileName);}private bool DataRead(string fileName){try{if(student==null){student = new Student();}else if (mSerialize == null){mSerialize = new MSerialize(null);}string FileDir = System.Windows.Forms.Application.StartupPath + "\\studnet\\";if (!Directory.Exists(FileDir)){MessageBox.Show("student文件不存在");return false;}mSerialize.FilePath = fileName;string Ren;if (mSerialize.LoadObj(out student,out Ren)==true){txt_name.Text = student.Name;num_age.Value = student.Age;txt_six.Text = student.Six;txt_classroom.Text = student.ClaslRoom;txt_hobby.Text = student.Hoppy;MessageBox.Show("读取学生数据成功","提示");}elseMessageBox.Show("读取学生文件失败","提示");Form1 form = new Form1();form.dataRead(ref student);form.ShowDialog();return true;}catch (System.Exception ex){MessageBox.Show(ex.Message);return false;}}}
}

结果演示:

按F5启动应用程序:

第二步:修改控件中的数据并且点击保存参数

第三步:保存成功后点击读取参数,在图片的右边会产生一个与原始窗体一样的窗体

相关文章:

C# winform如何实现数据的保存和读取

在c#winform中我们在写程序时,经常需要进行数据处理,那么数据如何保存和读取(下面我们通过序列化和反序列化的方式来实现) 第一步: 我们建立一个winform窗体 第二步: 构建一个外部实体类(Student类) 第…...

【Java基础面试四十一】、说一说你对static关键字的理解

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说一说你对static关键字…...

istio介绍(二)

5. kubesphere istio使用 5.1 整体架构 ks-account 提供用户、权限管理相关的 APIks-apiserver 整个集群管理的 API 接口和集群内部各个模块之间通信的枢纽,以及集群安全控制ks-apigateway 负责处理服务请求和处理 API 调用过程中的所有任务ks-console 提供 KubeSp…...

中文编程开发语言工具构件说明:屏幕截取构件的编程操作

屏幕截取 用于截取指定区域的图像。 图 标: 构件类型:不可视 重要属性 l 截取类型 枚举型,设置在截取屏幕时的截取类型。包括:全屏幕、指定区域、活动窗口三种。当全屏幕截取时相当于执行了硬拷屏(PrintScre…...

selenium多窗口、多iframe切换、alert、3种等待

1、多标签/多窗口之间的切换 场景: 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口上进行操作。这种情况下,需要识别多标签或窗口的情况。 操作方法: switch_to.window()方法:切换…...

物联网AI MicroPython传感器学习 之 RTC时钟模块

学物联网,来万物简单IoT物联网!! 一、产品简介 DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数…...

Mac安装nginx(Homebrew)

查看需要安装 nginx 的信息 brew info nginxDocroot 默认为 /usr/local/var/www 在 /opt/homebrew/etc/nginx/nginx.conf 配置文件中默认端口被配置为8080,从而使 nginx 运行时不需要加 sudo nginx将在 /opt/homebrew//etc/nginx/servers/ 目录中加载所有文件 …...

租用服务器后需要注意什么呢

租用服务器后需要注意什么呢 1、从IDC服务商中接收到服务器时,需要对服务器的各项性能进行测试确认,并做好记录以便对服务器的性能做到心中有数。 2、在服务器租用交接时,要了解服务器的安全设置情况,对服务器安全技术方面不了解…...

pip 时报错 no such option: --bulid-dir 的解决办法

Pycharm 安装第三方库报错及解决方案——no such option: --build-dir Pycharm 安装第三方库报错及解决方案——no such option: --build-dir 最近在学习路径规划相关内容,在运行GitHub上下载例程时缺少“plotly”库,根据网上查到的安装步骤操作&#x…...

[Spring] SpringBoot2 简介(一)—— 基础配置

目录 一、SpringBoot 简介 1、Spring 的缺点 2、SpringBoot 功能 二、SpringBoot 入门案例 1、实现步骤 2、访问服务器 3、入门小结 4、Idea 快速构建 SpringBoot 工程 5、起步依赖无需版本号 6、主启动类的在项目中的位置(*重要*) 三、Sprin…...

【软考】计算机指令系统寻址的几种方式及其速度的比较

速度比较:立即>寄存器>直接> 间接 1. 立即寻址: 直接在指令中给出操作数 2. 寄存器寻址(Register Addressing): 寄存器寻址是指操作数直接存储在寄存器中。指令中的地址字段指定要使用的寄存器编号&#…...

golang笔记17--编译调试go源码

golang笔记17--编译调试go源码 前置条件编译源码在 fmt 包中加自定义函数说明 当前go语言越来越流行了,各大厂商都有加大go工程师的需求,作为go语言的学习者,我们除了要了解如何使用go语言外,也有必要了解一下如何编译、调试go源码…...

DailyPractice.2023.10.22

文章目录 1.[39. 组合总和]2.[22. 括号生成]3.[79. 单词搜索]4.[131. 分割回文串] 1.[39. 组合总和] 39. 组合总和 class Solution { public: vector<vector<int>> res; vector<int> path;void dfs(vector<int>& candidates,int target,int star…...

Go学习第四章——程序流程控制

Go学习第四章——程序流程控制 1 分支结构1.1 单分支1.2 双分支1.3 多分支1.4 switch分支 2 循环结构2.1 for循环2.2 while和dowhile的实现2.3 经典案例——打印金字塔2.4 经典案例——打印九九乘法表 3 跳转控制语句3.1 break3.2 continue3.3 goto3.4 return 流程控制的作用&a…...

自然语言处理---Transformer机制详解之Decoder详解

1 Decoder端的输入解析 1.1 Decoder端的架构 Transformer原始论文中的Decoder模块是由N6个相同的Decoder Block堆叠而成&#xff0c;其中每一个Block是由3个子模块构成&#xff0c;分别是多头self-attention模块&#xff0c;Encoder-Decoder attention模块&#xff0c;前馈全…...

【读书笔记】《软技能》

句子摘抄&#xff1a; 软技能-代码之外的生存指南 “自强不息 孜孜不倦” 强调了坚持不懈、不断奋斗和追求进步的精神。无论遇到多少困难和挫折&#xff0c;都要坚持努力&#xff0c;不断提高自己&#xff0c;不知疲倦地追求目标。这句谚语鼓励人们积极进取&#xff0c;不轻言…...

视频怎么压缩?视频过大这样压缩变小

在日常生活中&#xff0c;我们常常会遇到需要压缩视频的情况&#xff0c;视频压缩不仅可以减小文件大小&#xff0c;方便存储和传输&#xff0c;还可以在保证质量的同时&#xff0c;满足不同的使用需求。那么&#xff0c;如何有效地压缩视频呢&#xff1f; 方法一&#xff1a;嗨…...

蓝桥杯中级题目之组合(c++)

系列文章目录 数位递增数_睡觉觉觉得的博客-CSDN博客拉线开关。_睡觉觉觉得的博客-CSDN博客蓝桥杯中级题目之数字组合&#xff08;c&#xff09;_睡觉觉觉得的博客-CSDN博客 文章目录 系列文章目录前言一、个人名片二、描述三、输入输出以及代码示例1.输入2.输出3.代码示例 总…...

julia 笔记:复合类型 struct

1 struct关键字 1.1 声明 struct关键字与复合类型一起引入&#xff0c;后跟一个字段名称的块&#xff0c;可选择使用 :: 运算符注释类型 struct Foobarbaz::Intqux::Float64end 没有类型注释的字段默认为 Any 类型&#xff0c;所以可以包含任何类型的值。 1.2 创建新对象 …...

【JavaEE初阶】 线程池详解与实现

文章目录 &#x1f334;线程池的概念&#x1f384;标准库中的线程池&#x1f340;ThreadPoolExecutor 类&#x1f6a9;corePoolSize与maximumPoolSize&#x1f6a9;keepAliveTime&#x1f6a9;ThreadFactory&#x1f6a9;workQueue&#x1f6a9;RejectedExecutionHandler handl…...

Guesstimate未来路线图:AI集成、私有部署和协作功能的展望

Guesstimate未来路线图&#xff1a;AI集成、私有部署和协作功能的展望 【免费下载链接】guesstimate-app Create Fermi Estimates and Perform Monte Carlo Estimates 项目地址: https://gitcode.com/gh_mirrors/gu/guesstimate-app Guesstimate是一款强大的费米估算和蒙…...

C++ string操作指南:从入门到精通

一、为什么要用 string&#xff1f;之前学的 char[] 缺点&#xff1a;必须手动处理 \0&#xff0c;容易乱码不能直接用 赋值、 拼接长度受限&#xff0c;容易越界函数少&#xff0c;操作麻烦string 优点&#xff1a;是 C 标准类&#xff0c;安全方便可以直接 、、 比较自动管理…...

抖音批量下载终极指南:5分钟掌握高效无水印下载技巧

抖音批量下载终极指南&#xff1a;5分钟掌握高效无水印下载技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

智能代码生成与CI/CD审查流程深度耦合(2024头部科技公司内部SOP首次公开)

第一章&#xff1a;智能代码生成与CI/CD审查流程深度耦合&#xff08;2024头部科技公司内部SOP首次公开&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 2024年&#xff0c;Google、Meta与阿里云联合发布的《AI-Native DevOps白皮书》正式将智能代码生成器&#x…...

LaserGRBL:如何用开源软件实现专业级激光雕刻控制

LaserGRBL&#xff1a;如何用开源软件实现专业级激光雕刻控制 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL是一款专为激光雕刻和切割优化的GRBL控制器Windows图形界面软件&#xff0c;为…...

实测对比:鲁班猫5跑YOLOv12,比树莓派5快多少?附性能优化小技巧

鲁班猫5 vs 树莓派5&#xff1a;YOLOv12推理性能实测与NPU优化实战 当我们需要在嵌入式设备上部署目标检测模型时&#xff0c;硬件选型往往让人纠结。最近拿到鲁班猫5&#xff08;Rockchip RK3588&#xff09;和树莓派5两款热门开发板&#xff0c;我决定做个深度对比测试&#…...

如何在PDF中运行Linux?LinuxPDF虚拟输入输出系统的实现原理详解

如何在PDF中运行Linux&#xff1f;LinuxPDF虚拟输入输出系统的实现原理详解 【免费下载链接】linuxpdf Linux running inside a PDF file via a RISC-V emulator 项目地址: https://gitcode.com/gh_mirrors/li/linuxpdf LinuxPDF是一个令人惊叹的开源项目&#xff0c;它…...

千问3.5-9B数据库课程设计助手:从ER图到SQL语句智能生成

千问3.5-9B数据库课程设计助手&#xff1a;从ER图到SQL语句智能生成 1. 课程设计的痛点与解决方案 每到数据库课程设计季&#xff0c;计算机专业的学生们总会遇到相似的困扰&#xff1a;如何把课本上的ER图理论转化为实际可用的数据库&#xff1f;怎样确保表结构设计符合三范…...

告别手动刷UDS!用CANoe.Diva Demo工程5分钟上手诊断自动化测试

告别手动刷UDS&#xff01;用CANoe.Diva Demo工程5分钟上手诊断自动化测试 还在为手动执行UDS诊断测试而烦恼&#xff1f;每次测试都要重复输入相同的指令&#xff0c;既耗时又容易出错。CANoe.Diva的自动化测试功能可以彻底改变这一现状&#xff0c;而它的Demo工程更是新手快…...

26-4-17 数据结构作业:用栈解决迷宫问题

1.问题描述 已知一个 66 的迷宫&#xff0c;可将其视作在一个坐标系中&#xff0c;令起点 (1,1)&#xff0c;终点 (4,4)&#xff0c;墙&#xff1a;1、路&#xff1a;0&#xff0c;要求用队列实现最短路径搜索。 2.算法思路 题目要求使用队列&#xff08;先进先出&#xff09…...