C#编程时winform程序登陆记住密码和自动登录功能,关于App.config的问题及解决方案

news/2025/10/24 0:00:56/文章来源:https://www.cnblogs.com/genming/p/19161882

一、问题起因及来由
最近由于自己工作需要,把丢了十几年没有用过的编程软件知识捡起来,虽然十几年了,但还是忘不了,还是喜欢自己敲代码,遇到问题后,体验解决问题的后的快感。
同时也喜欢看着自己敲出的一系列整齐的代码,看着真实赏心悦目。
所以呢,为了工作需要,打算做一个内部使用小软件。白天工作时间需要处理日常工作问题(非计算机编程业务),所以只能下班后,检查完孩子作业后,奋战几个小时。

二、问题类型
这个小软件主要是关于客户管理、内部员工业务、财务等等相关。其中不乏需要针对每个用户有不同的权限及处理不同的业务内容。所以绕不开的就是登录权限问题。都知道登录都好解决,无非就是增删改查。但是一直使用计算机软件,都知道登录有几个功能比较好用,比如记住密码和自动登录,当然还有一个比较心情好可用,心情不好看着烦的开机启动功能。

三、具体问题
对,没有错,就是在保存密码和自动登录,这两个功能实现的遇到的,需要实现这两个功能还是相对容易,从思维角度看,无外乎就是读写文件问题。为了方便我选择了把账号密码存入App.config这个XML类型的配置文件里面。当然数据库连接也是存里面的。具体代码块如下:
` //用户登录
private void userlogin()
{
if (txtName.Text.Trim().Equals("") || txtpw.Text.Trim().Equals(""))
{
MessageBox.Show("姓名密码不能为空!");
return;
}
else
{
BLL.tbUser userBLL = new BLL.tbUser();
if (userBLL.select("Uname='" + txtName.Text.Trim() + "' and Upassword='" + txtpw.Text.Trim() + "'").Rows.Count > 0)
{
MessageBox.Show("登录成功!");
Adduser au = new Adduser();
au.Tag = this;
au.Show();
this.Hide();
Saveuser(txtName.Text.Trim(), txtpw.Text.Trim());
}
else {
MessageBox.Show("密码或姓名错误!");
return;
}
}

    }`

` //自动登录
private bool IsAutoLoginEnable()
{
try {
Configuration cf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (cf.AppSettings.Settings["autoLogin"].Value == "true" && cf.AppSettings.Settings["rememberme"].Value == "true")
{
txtName.Text = cf.AppSettings.Settings["username"].Value;
txtpw.Text = cf.AppSettings.Settings["userpw"].Value;
BLL.tbUser userBLL = new BLL.tbUser();
if (userBLL.select("Uname='" + cf.AppSettings.Settings["username"].Value + "' and Upassword='" + cf.AppSettings.Settings["userpw"].Value + "'").Rows.Count > 0)
{
Adduser au = new Adduser();
au.Tag = this;
au.Show();
this.Hide();
}

                return true;}else{return false;}}catch {return false;}}`

` //接收配置对象、键名和值
private void SetConfigValue(Configuration cf, string key, string value)
{
if (cf.AppSettings.Settings[key] != null)//如果键存在
{
cf.AppSettings.Settings[key].Value = value;//更新值
}
else//如果不存在
{
cf.AppSettings.Settings.Add(key, value);//添加新值
}
}
//保存用户名和密码
private void Saveuser(string username, string userpw)
{
try
{
//打开配置文件
Configuration cf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (checklogin.Checked)//如果选择自动登录
{
SetConfigValue(cf, "rememberme", "true");//设置记住密码为true
SetConfigValue(cf, "username", username);
SetConfigValue(cf, "userpw", userpw);
SetConfigValue(cf, "autoLogin", "true");

            }else if (checkpw.Checked){SetConfigValue(cf, "rememberme", "true");//设置记住密码为trueSetConfigValue(cf, "username", username);SetConfigValue(cf, "userpw", userpw);SetConfigValue(cf, "autoLogin", "false");}else{SetConfigValue(cf, "rememberme", "false");//设置记住密码为trueSetConfigValue(cf, "username", "");SetConfigValue(cf, "userpw", "");SetConfigValue(cf, "autoLogin", "false");}cf.Save(ConfigurationSaveMode.Modified);ConfigurationManager.RefreshSection("appSettings");}catch(Exception ex) {MessageBox.Show("保存密码时出错"+ex.Message);}}`

每次运行调试都是正常,但是,对,但是第二次运行的又还原了,就跟系统还原一样。一直以为是代码问题。
最后也网上各种查找,看到有人也遇到过。
四、解决方案
其实主要的问题是,这压根就不是一个问题,为什么,因为我们每次都是运行调试,所以每次这个文件都会恢复默认状态,所以从程序运行插入的动态数据,保存了也会恢复原来的状态。除非是把程序重新解决方案,同时在bin文件夹找到程序的.exe文件,进行运行,这个时候你会发现,功能完全是没有任何问题。因为VS的F5就是一个测试编译器,所以每次都会恢复默认状态,不会动态存储内容。

现在马上十二点【2025年10月23日23:38】,太晚了睡觉去了。遇到其他问题了再分享。
感谢大家!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.10.23总结

软考还有两周左右,得抓紧复习了,目前仅仅在网上找题库刷了一点电题,得快点看完知识点讲解后刷题,剩下一周就以刷题为主了。因为目前的时间不能以天算,加上上课的时间,写作业,写项目等待。用在复习上的时间,每天…

[C/C++] Linux 环境变量(C/C++ ver)

[C/C++] Linux 环境变量(C/C++ ver)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");Grok 生成(2025年10月23日23:53:07)🌟 Linux 环境变量(C/C++ ver)…

诗词大会day1

诗词大会day1$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");成语血脉偾(fen四声)张:形容情绪极度激动、兴奋,导致血液流动加速,血管膨胀的感觉。 如椽…

Day2超链接标签

超链接的作用是跳转到其他网页<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,…

Ai元人文构想:你喜欢黑箱与偏见

你喜欢黑箱与偏见 在这个被算法支配的时代,我们都在参与一场心照不宣的共谋——你爱黑箱,我恋偏见。 这不是什么难以启齿的秘密,而是我们在这个过度刺激的世界里生存下来的智慧。黑箱多么美妙,它把复杂的因果、矛盾…

企业微信 使用api批量处理群消息

好的,我们来详细讲解如何为企业微信创建API接口,以便实现批量发送等高级功能。 创建企业微信API接入的核心是为你的企业创建一个“自建应用”,然后获取这个应用的访问凭证。整个过程可以分为以下几个步骤:第一步:…

first game (1)

初步搭完场景跟人物一些tips:F5 运行 F8 退出运行 Ctrl+A 创建新子节点 Ctri+S 保存耗时≈一小时 明天继续

10月23日日记

1.今天上体育课。 2.明天学习英语 3.为什么哈希表的查询可以做到O(1)?

软件工程学习日志2025.10.23

目标:完成 MapReduce 词频统计程序的远程执行链路,支持用 java -jar 直接运行 RemoteRunner,并解决参数传递与 HDFS/SSH 连接问题。 结果:RemoteRunner 已增强为“更健壮的远程执行器”,能自动探测 HDFS、在无参数…

66ye

`import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision.datasets import CIFAR10 from torchvision.transforms import Compose, ToTensor, No…

Gin笔记一之项目建立与运行

本文首发于公众号:Hunter后端 原文链接:Gin笔记一之项目建立与运行本篇笔记开始介绍 Golang 的 web 框架 Gin 的相关内容。 本系列笔记预计通过四到五篇笔记内容介绍 Gin 框架的核心内容,然后通过一个简单的示例介绍…

【题解】P14254 分割(divide)

想了想,感觉这道题还是总结一下为好。 这个题需要涉及大量证明,也是很恶心人了。 引理一:当第 \(1\) 个点选择了深度为 \(i\),那后续所有节点的深度就只能为 \(i\)。 证明:因为选择的点的深度是不降得,所以不能选…

10.23日学习笔记

一、应用层在 TCP/IP 中的位置 最顶层,直接为用户的应用程序提供网络服务。 不关心底下几层如何传输,只关心“消息语义”与“交换规则”。 典型交互模型: 客户/服务器(C/S) P2P(对等) 混合(边缘 P2P + 索引服务…

埃氏筛及扩展质因数筛——埃拉托斯特尼筛法变种

质数筛这段代码用 “埃拉托斯特尼筛法” 找 2 到 N 之间的所有素数,逻辑很直接:先假设所有数都是素数(用vis数组标记,初始全为true); 排除 0 和 1(它们不是素数,标记为false); 从 2 开始,对每个没被排除的数…

Day2路径,相对与绝对

路径指的是查找文件时,从起点到终点经历的路程 路径也分为绝对路径与相对路径 相对路径是从当前文件出发查找目标额文件 绝对路径是从盘符出发找目标文件 Windows电脑是从盘符出发的,而Mac电脑则是从根目录出发 在…

第九届强网杯线上赛PWN_flag-market

第九届强网杯线上赛PWN_flag-market第九届强网杯线上赛PWN_flag-market 一、题目二、信息搜集 下载题目给的附件,查看文件ctf.xinetd之后,知道我们的可执行程序名为chall:这个文件在附件中的bin目录下。 通过file命…

ISFB银行木马家族演化史:从Gozi到LDR4的技术剖析

本文深入分析ISFB银行木马家族十年演化历程,详细解析其技术架构、功能模块和分支变种,包括加载器、键盘记录、Web注入、VNC远程控制等核心功能,揭示网络犯罪组织的运作模式和技术演进。第1章 — 从Gozi到ISFB:一个…

exgcd板子

void exgcd(int &x,int &y,int a,int b) {if(!b){x=1;y=0;return;}exgcd(x,y,b,a%b);int t=x;x=y;y=t-a/b*y; }

2025.10.23

今天上午算法与数据结构的早八,然后跆拳道前半节课训练,后半节课进行体测,我对这次的成绩非常满意,中午没有点外卖,去食堂买了一个饼,回宿舍休息睡觉,晚上去科技楼制作本周六竞赛的PPT,一直到10点半。

Codeforces Round 976 (Div. 2) A. Find Minimum Operations

这个问题实际上是K进制取位和: 举例:2进制 n=110100 使用几次2的x次幂可以将n置0,ans=3 10进制 n=9924 使用几次10的x次幂可以将n置0,ans=9+9+2+4 k进制也相同 ,代码如下: `#include <bits/stdc++.h> using nam…