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

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和串口页面的数据展示&#xff0c;和保存控件 我们这一章&#xff0c;实现如何去&#xff0c;控制保存。 一、控件展示 CheckBox TextBox Button label Name: checkSaveImage checkDelete txtSaveDays txtSaveImagePath btnSelectIm…...

【LeetCode: LCR 126. 斐波那契数 + 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

OSPF(开放路径最短优先)

ospf优先级&#xff1a;内部优先级默认为10&#xff0c;外部优先级默认为150 1.ospf的三张表 &#xff08;1&#xff09;邻居表 <记录邻居状态和关系> &#xff08;2&#xff09;拓扑表 <链路状态数据库> &#xff08;3&#xff09;路由表 <对链路状态数据库进…...

JAVA EE初阶 - 预备知识(四)

一、API API 即应用程序编程接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是一组定义、协议和工具&#xff0c;用于不同软件组件、应用程序或系统之间进行交互和通信。以下从多个方面详细介绍 API&#xff1a; 基本概念 接口规范&#xff1a;A…...

如何解决服务器端口被攻击:全面防护与快速响应

服务器端口被攻击是网络安全中常见的问题之一&#xff0c;尤其是当服务器暴露在公共网络上时&#xff0c;容易成为黑客的目标。攻击者可能通过扫描开放端口、利用漏洞或发动拒绝服务&#xff08;DoS/DDoS&#xff09;攻击来破坏服务器的正常运行。本文将详细介绍如何检测、防御…...

golang panic原理

数据结构与底层实现 Goroutine结构体 stack&#xff08;栈内存范围&#xff09; 结构体类型&#xff0c;包含 lo&#xff08;低地址&#xff09;和 hi&#xff08;高地址&#xff09;两个 uintptr 字段&#xff0c;描述 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 提供的一种功能&#xff0c;允许用户根据预定义的规则动态调整搜索结果。它通过匹配查询的元数据&#xff08;如用户输入、地理位置、用户兴趣等&#xff09;&#xff0c;对搜索结果进行定制化调整&#xff0c;例如固…...

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,谁是合适选择?

文档预处理之文本化 近日&#xff0c;我们收到来自专业用户的使用心得&#xff0c;浅析结构化信息提取技术、技术选型及一些个人测试。 结构化信息提取的重要性 数据作为大模型时代的核心生产资料&#xff0c;其结构化处理能力直接影响AI系统的实用价值。尽管知识图谱、RAG等…...

vite调试node_modules下面插件

在使用vite进行开发的时候,我们可能想要修改node_modules中插件的源码.特别是集成一个SDK&#xff0c;需要调试去判断问题时&#xff0c;或者研究第三方源码时后; vite默认是走缓存的&#xff0c;所以当修改后不会看到你打印的日志&#xff0c;这个时候有几种方法可以选择; 方式…...

ES12 weakRefs的用法和使用场景

ES12 (ECMAScript 2021) 特性总结&#xff1a;WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性&#xff0c;用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象&#xff0c;即使该对象仍然被弱引用持有。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 并集&#xff1a…...

网络安全大数据架构 网络安全之数据安全

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

(前端基础)CSS(一)

了解 Cascading Style Sheet&#xff1a;层叠级联样式表 CSS&#xff1a;表现层&#xff08;美化网页&#xff09;如&#xff1a;字体、颜色、边框、高度、宽度、背景图片、网页定位、网页浮动 css优势&#xff1a; 内容和表现分离网页结构表现统一&#xff0c;可以实现复用…...

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 是一个自由奔放的艺术家&#xff0c;它在创作&#xff08;编写代码&#xff09;时不受太多约束&#xff0c;非常灵活&#xff0c;但有时也容易犯错且难以调试。而 TypeScript 就像是给这位艺术家配备了一套精确的工具和规范…...

flink-cdc同步数据到doris中

1 创建数据库和表 1.1 数据库脚本 这样直接创建数据库是有问题&#xff0c;因为后面发现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 负载均衡器配置及常见问题解析

引言 在云原生时代&#xff0c;Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务&#xff0c;简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者&#xff0c;为微服务提供了流量管理…...

Transformer时间序列预测实战:如何用个人业务数据替换ETTh1进行滚动预测与结果分析

Transformer时间序列预测实战&#xff1a;从公开数据集到业务数据的无缝迁移指南 当你第一次接触Transformer时间序列预测时&#xff0c;可能已经跑通了ETTh1这类公开数据集的Demo。但真正令人头疼的是&#xff1a;如何将这套方法迁移到自己的业务数据上&#xff1f;本文将带你…...

别再死记硬背了!用Python+NumPy处理Excel数据,这5个函数让你效率翻倍

别再死记硬背Excel公式了&#xff01;用PythonNumPy实现高效数据处理的5个核心技巧 每次面对销售报表里的上千行数据&#xff0c;你是否还在手动拖拽Excel公式&#xff1f;当需要合并三个分公司的季度数据时&#xff0c;VBA脚本是否让你头疼不已&#xff1f;作为曾经每天处理几…...

Gramps家谱软件终极指南:三步构建专业家族历史数据库

Gramps家谱软件终极指南&#xff1a;三步构建专业家族历史数据库 【免费下载链接】gramps Source code for Gramps Genealogical program 项目地址: https://gitcode.com/gh_mirrors/gr/gramps Gramps是一款功能强大的开源家谱软件&#xff0c;专为家族历史研究者和爱好…...

从‘甜甜圈’到‘三明治’:手把手拆解高频板材Dk/Df的三种主流测试夹具

从‘甜甜圈’到‘三明治’&#xff1a;手把手拆解高频板材Dk/Df的三种主流测试夹具 走进任何一家高频PCB材料实验室&#xff0c;你都能看到工程师们对着各种形状奇特的金属夹具忙碌。这些看似简单的装置&#xff0c;却决定着价值数百万的5G基站或卫星通信设备能否正常工作。今天…...

Qwen3-TTS在金融领域的应用:财报语音摘要生成

Qwen3-TTS在金融领域的应用&#xff1a;财报语音摘要生成 1. 金融语音化的痛点与机遇 金融从业者每天都要面对海量的财报数据和分析报告&#xff0c;眼睛盯着密密麻麻的数字和表格&#xff0c;时间长了难免疲劳。特别是基金经理、分析师和投资顾问&#xff0c;经常需要在通勤…...

Element UI Tree懒加载回显踩坑记:default-checked-keys为何总多展开一层?

Element UI Tree懒加载回显深度解析&#xff1a;从原理到实战的完整解决方案 1. 问题现象与背景分析 在VueElement UI的后台管理系统开发中&#xff0c;el-tree组件因其强大的树形展示能力而广受欢迎。但当遇到懒加载模式下的数据回显需求时&#xff0c;不少开发者都会陷入一个…...

SOCD Cleaner终极指南:游戏键盘输入冲突仲裁的完整解决方案

SOCD Cleaner终极指南&#xff1a;游戏键盘输入冲突仲裁的完整解决方案 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd SOCD Cleaner&#xff08;又称Hitboxer&#xff09;是一款专为竞技游戏玩家设计的开源键盘…...

lvgl_v8之圆弧动画

static void set_angle(void* obj, int32_t v) {lv_arc_set_value(obj, v);...

零基础极速上手教程:30分钟用AI建站工具做出第一个网站

如果你完全不懂技术&#xff0c;对HTML、CSS、服务器这些词一头雾水&#xff0c;但又急需一个拿得出手的网站&#xff0c;这篇教程就是为你准备的。我们将抛开复杂的理论&#xff0c;用一套通用、可复制的实操步骤&#xff0c;带你体验从零到一做出一个完整网站的全过程。无论你…...

详解CN域名注册:流程、要求、材料及注意事项全解析

CN域名作为中国国家顶级域名&#xff0c;凭借其本土标识和稳定性能&#xff0c;成为深耕国内市场的首选。注册受CNNIC严格监管&#xff0c;遵循规范流程至关重要。本文国科云将系统梳理cn域名注册全流程、核心要求及关键注意事项。一、CN域名注册核心流程CN域名注册遵循“先申请…...