当前位置: 首页 > 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…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...