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 作为服务网格领域的佼佼者,为微服务提供了流量管理…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
