Winform(C#) 项目保存页面
上一张我们已经实现了TCP和串口页面的数据展示,和保存控件
我们这一章,实现如何去,控制保存。
一、控件展示
CheckBox TextBox Button label
Name:
checkSaveImage checkDelete txtSaveDays
txtSaveImagePath btnSelectImagePath
checksaveData
txtSaveDataPath btnSelectDataPath
btnSave
二、根据上回创建API来实现
private static TotalMessage instance = null;private TotalMessage() { }private static readonly object locker = new object();public static TotalMessage GetInstance(){if (instance == null){lock (locker){instance = new TotalMessage();}}return instance;}public string Configpath = Directory.GetCurrentDirectory() + @"\配置文件\Config.ini";
三、声明类
#region 图片数据路径属性public string ImageSavePath { get; set; }public string DataSavePath { get; set; }#endregion#region 保存数据-图片属性public bool IsSaveImage { get; set; }public bool IsSaveData { get; set; }public bool IsDelete { get; set; }public int SaveDay { get; set; }public string PathSaveImage { get; set; }public string PathSaveData { get; set; }#endregionpublic void LoadConfig()
{ImageSavePath = IniAPI.GetPrivateProfileString("路径", "ImageSavePath", @"D:\Image", Configpath);DataSavePath = IniAPI.GetPrivateProfileString("路径", "DataSavePath", @"D:\Data", Configpath);
}public void WriteValues(string Section, string key, string value)
{IniAPI.INIWriteValue(Configpath, Section, key, value);
}
四、窗体框架
1.在APP.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ><section name="九点标定项目.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /></sectionGroup></configSections><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /></startup><userSettings><九点标定项目.Properties.Settings><setting name="IsSaveImage" serializeAs="String"><value>True</value></setting><setting name="IsSaveData" serializeAs="String"><value>True</value></setting><setting name="IsDelete" serializeAs="String"><value>True</value></setting><setting name="SaveDays" serializeAs="String"><value>7</value></setting><setting name="LastDeleteData" serializeAs="String"><value>2023-05-11</value></setting></九点标定项目.Properties.Settings></userSettings>
</configuration>
2. 窗体加载
private void FormSaveDataImage_Load(object sender, EventArgs e){checkSaveImage.Checked = message.IsSaveImage ? true : false;checksaveData.Checked = message.IsSaveData ? true : false;checkDelete.Checked = message.IsDelete ? true : false;txtSaveDays.Text=message.SaveDay.ToString();txtSaveDataPath.Text = message.PathSaveData;txtSaveImagePath.Text=message.PathSaveImage;}
3.保存数据路径
private void btnSelectImagePath_Click(object sender, EventArgs e){//创建一个FolderBrowserDialog对象FolderBrowserDialog folder=new FolderBrowserDialog();folder.SelectedPath = message.PathSaveImage;if(folder.ShowDialog() == DialogResult.OK){txtSaveDataPath.Text=folder.SelectedPath;message.PathSaveImage = folder.SelectedPath;}}
4.保存图片路径
private void btnSelectDataPath_Click(object sender, EventArgs e){FolderBrowserDialog fold=new FolderBrowserDialog();fold.SelectedPath = message.PathSaveData;if(fold.ShowDialog() == DialogResult.OK){txtSaveDataPath.Text=fold.SelectedPath;message.PathSaveData=fold.SelectedPath;}}
5.this.Controls
TotalMessage message = TotalMessage.GetInstance();public FormSaveDataImage(){InitializeComponent();message.IsSaveData=Settings.Default.IsSaveData;message.IsSaveImage=Settings.Default.IsSaveImage;message.IsDelete=Settings.Default.IsDelete;message.SaveDay=Settings.Default.SaveDays;message.PathSaveImage=TotalMessage.GetInstance().ImageSavePath;message.PathSaveData=TotalMessage.GetInstance().DataSavePath;}
6.保存
private void btnSave_Click(object sender, EventArgs e){message.IsSaveImage=checkSaveImage.Checked;message.IsSaveData=checksaveData.Checked;message.IsDelete=checkDelete.Checked;message.PathSaveData=txtSaveDataPath.Text;message.PathSaveImage=txtSaveImagePath.Text;message.SaveDay=Convert.ToInt32(txtSaveDays.Text.Trim());TotalMessage.GetInstance().ImageSavePath=message.PathSaveImage;TotalMessage.GetInstance().DataSavePath=message.PathSaveData;Settings.Default.IsSaveData = message.IsSaveData;Settings.Default.IsSaveImage = message.IsSaveImage;Settings.Default.IsDelete = message.IsDelete;Settings.Default.SaveDays=message.SaveDay;DialogResult res=MessageBox.Show("确认保存设置","保存设置",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);if(res == DialogResult.Yes){Settings.Default.Save();message.WriteValues("路径","ImageSavePath",message.PathSaveImage);message.WriteValues("路径","DataSavePath",message.PathSaveData);MessageBox.Show("保存成功");}
五、ALL代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using 九点标定项目.Class;
using 九点标定项目.Properties;namespace 九点标定项目
{public partial class FormSaveDataImage : Form{TotalMessage message = TotalMessage.GetInstance();public FormSaveDataImage(){InitializeComponent();message.IsSaveData=Settings.Default.IsSaveData;message.IsSaveImage=Settings.Default.IsSaveImage;message.IsDelete=Settings.Default.IsDelete;message.SaveDay=Settings.Default.SaveDays;message.PathSaveImage=TotalMessage.GetInstance().ImageSavePath;message.PathSaveData=TotalMessage.GetInstance().DataSavePath;}private void FormSaveDataImage_Load(object sender, EventArgs e){checkSaveImage.Checked = message.IsSaveImage ? true : false;checksaveData.Checked = message.IsSaveData ? true : false;checkDelete.Checked = message.IsDelete ? true : false;txtSaveDays.Text=message.SaveDay.ToString();txtSaveDataPath.Text = message.PathSaveData;txtSaveImagePath.Text=message.PathSaveImage;}private void btnSelectImagePath_Click(object sender, EventArgs e){//创建一个FolderBrowserDialog对象FolderBrowserDialog folder=new FolderBrowserDialog();folder.SelectedPath = message.PathSaveImage;if(folder.ShowDialog() == DialogResult.OK){txtSaveDataPath.Text=folder.SelectedPath;message.PathSaveImage = folder.SelectedPath;}}private void btnSelectDataPath_Click(object sender, EventArgs e){FolderBrowserDialog fold=new FolderBrowserDialog();fold.SelectedPath = message.PathSaveData;if(fold.ShowDialog() == DialogResult.OK){txtSaveDataPath.Text=fold.SelectedPath;message.PathSaveData=fold.SelectedPath;}}private void btnSave_Click(object sender, EventArgs e){message.IsSaveImage=checkSaveImage.Checked;message.IsSaveData=checksaveData.Checked;message.IsDelete=checkDelete.Checked;message.PathSaveData=txtSaveDataPath.Text;message.PathSaveImage=txtSaveImagePath.Text;message.SaveDay=Convert.ToInt32(txtSaveDays.Text.Trim());TotalMessage.GetInstance().ImageSavePath=message.PathSaveImage;TotalMessage.GetInstance().DataSavePath=message.PathSaveData;Settings.Default.IsSaveData = message.IsSaveData;Settings.Default.IsSaveImage = message.IsSaveImage;Settings.Default.IsDelete = message.IsDelete;Settings.Default.SaveDays=message.SaveDay;DialogResult res=MessageBox.Show("确认保存设置","保存设置",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);if(res == DialogResult.Yes){Settings.Default.Save();message.WriteValues("路径","ImageSavePath",message.PathSaveImage);message.WriteValues("路径","DataSavePath",message.PathSaveData);MessageBox.Show("保存成功");}}}}
相关文章:

Winform(C#) 项目保存页面
上一张我们已经实现了TCP和串口页面的数据展示,和保存控件 我们这一章,实现如何去,控制保存。 一、控件展示 CheckBox TextBox Button label Name: checkSaveImage checkDelete txtSaveDays txtSaveImagePath btnSelectIm…...

【LeetCode: LCR 126. 斐波那契数 + 动态规划】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
OSPF(开放路径最短优先)
ospf优先级:内部优先级默认为10,外部优先级默认为150 1.ospf的三张表 (1)邻居表 <记录邻居状态和关系> (2)拓扑表 <链路状态数据库> (3)路由表 <对链路状态数据库进…...
JAVA EE初阶 - 预备知识(四)
一、API API 即应用程序编程接口(Application Programming Interface),是一组定义、协议和工具,用于不同软件组件、应用程序或系统之间进行交互和通信。以下从多个方面详细介绍 API: 基本概念 接口规范:A…...
如何解决服务器端口被攻击:全面防护与快速响应
服务器端口被攻击是网络安全中常见的问题之一,尤其是当服务器暴露在公共网络上时,容易成为黑客的目标。攻击者可能通过扫描开放端口、利用漏洞或发动拒绝服务(DoS/DDoS)攻击来破坏服务器的正常运行。本文将详细介绍如何检测、防御…...
golang panic原理
数据结构与底层实现 Goroutine结构体 stack(栈内存范围) 结构体类型,包含 lo(低地址)和 hi(高地址)两个 uintptr 字段,描述 Goroutine 的栈内存区间 [lo, hi)。初始栈大小为 2KB&a…...

scratch猜年龄互动小游戏 2024年12月scratch四级真题 中国电子学会 图形化编程 scratch四级真题和答案解析
scratch猜年龄互动小游戏 2024年12月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 老爷爷的年龄是1-100的随机数,老爷爷询问“请猜猜我的年龄是多少?”,输入年龄,老爷爷会回答"大了"或者"小了,直到最后成功猜出年龄。 1、准备工作 (1)删…...
【Elasticsearch】查询规则_query_rules
1.Query Rules 的定义与作用 Query Rules 是 Elasticsearch 提供的一种功能,允许用户根据预定义的规则动态调整搜索结果。它通过匹配查询的元数据(如用户输入、地理位置、用户兴趣等),对搜索结果进行定制化调整,例如固…...

Git备忘录(三)
设置用户信息: git config --global user.name “itcast” git config --global user.email “ helloitcast.cn” 查看配置信息 git config --global user.name git config --global user.email $ git init $ git remote add origin gitgitee.com:XXX/avas.git $ git pull or…...

用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?
文档预处理之文本化 近日,我们收到来自专业用户的使用心得,浅析结构化信息提取技术、技术选型及一些个人测试。 结构化信息提取的重要性 数据作为大模型时代的核心生产资料,其结构化处理能力直接影响AI系统的实用价值。尽管知识图谱、RAG等…...

vite调试node_modules下面插件
在使用vite进行开发的时候,我们可能想要修改node_modules中插件的源码.特别是集成一个SDK,需要调试去判断问题时,或者研究第三方源码时后; vite默认是走缓存的,所以当修改后不会看到你打印的日志,这个时候有几种方法可以选择; 方式…...
ES12 weakRefs的用法和使用场景
ES12 (ECMAScript 2021) 特性总结:WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性,用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象,即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使…...

【Python】集合set详细讲解(语法、操作、集合运算、性能、使用场景)
文章目录 1. 语法1.1 使用 {} 定义1.2 使用 set() 定义 2. 特点3. 常用操作3.1 访问元素3.2 查找数据3.3 添加元素3.3.1 add() 方法3.3.2 update()方法 3.4 删除元素3.4.1 remove()方法3.4.2 discard()方法3.4.3 pop()方法3.4.4 clear()方法 3.5 集合运算3.5.1 并集:…...

网络安全大数据架构 网络安全之数据安全
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全和数据安全 从狭义来说,网络安全指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因遭到破坏、更改、泄露&…...

(前端基础)CSS(一)
了解 Cascading Style Sheet:层叠级联样式表 CSS:表现层(美化网页)如:字体、颜色、边框、高度、宽度、背景图片、网页定位、网页浮动 css优势: 内容和表现分离网页结构表现统一,可以实现复用…...
Redis数据类型全景解析:从底层编码到应用反模式
一、核心数据类型矩阵 1.1 基础类型对比表 类型底层结构最大容量时间复杂度典型场景StringSDS/Embstr/Raw512MBO(1)读写缓存/计数器ListQuickList(ziplist)2^32-1元素头尾操作O(1)消息队列Hashziplist/hashtable2^32-1键值对O(1)平均对象存储Setintset/hashtable2^32-1成员O(…...

(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解
题目背景 小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条…...
TypeScript跟js,es6这些的区别
TypeScript 一、TypeScript 是什么 想象 JavaScript 是一个自由奔放的艺术家,它在创作(编写代码)时不受太多约束,非常灵活,但有时也容易犯错且难以调试。而 TypeScript 就像是给这位艺术家配备了一套精确的工具和规范…...

flink-cdc同步数据到doris中
1 创建数据库和表 1.1 数据库脚本 这样直接创建数据库是有问题,因为后面发现superset连接使用doris://root:12345610.101.12.82:9030/internal.eayc?charsetutf8mb4 -- 创建数据库eayc create database if not exists ods_eayc; -- 创建数据表2 数据同步 2.1 f…...

Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析
引言 在云原生时代,Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务,简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者,为微服务提供了流量管理…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...