当前位置:首页 > 娱乐

winform登录界面

拖一个TextBox到窗体上,录界再拖一个Button,录界双击按钮写两行代码——这就是录界很多人对WinForm登录界面的全部想象。真跑起来,录界用户第一件事就是录界按回车,然后发现没反应。录界因为默认情况下,录界Button不会响应Enter键,录界你得手动把窗体的录界AcceptButton属性指向那个登录按钮。这个细节,录界书上一般不写。录界

我见过不少WinForm项目,录界登录界面做得跟闹着玩似的录界。用户名和密码框上下叠着,录界间距随意,录界Tab键顺序乱七八糟——按一下Tab,光标从用户名直接跳到登录按钮,密码框被完美跳过。这玩意儿用户不骂娘才怪。TabIndex属性就在属性面板里躺着,动动手的事。

密码框的PasswordChar设成●或者*,这谁都知道。但有个坑:有些开发者把MaxLength忘了设。用户粘贴一段两百字符的文本进去,程序拿着这坨东西去查数据库,SQL参数倒是能防注入,但业务逻辑层直接给你抛异常。给MaxLength设个50或者64,不费事。

登录逻辑本身没什么好说的。点按钮,拿TextBox.Text,拼SQL或者调存储过程,比对成功就DialogResult.OK,失败弹个MessageBox。但这里有个容易被忽略的点:数据库连接字符串硬编码在代码里。我接手过一个老项目,连接字符串里明文写着sa密码,整个解决方案还提交到了公司GitLab上。后来安全审计的人脸都绿了。

正确做法是扔进App.config,用ConfigurationManager.ConnectionStrings去读。再讲究一点,密码用Windows身份验证或者加密存储,别让明文在配置文件里裸奔。当然,小工具无所谓,但要是企业内网系统,这事可大可小。

验证码功能在WinForm里其实不太常见,毕竟不是Web。但有些金融类客户端会加,通常是本地生成一个四位数字,画在PictureBox上,带点扭曲和噪点。代码不长,Graphics类画几条线、几个点就行。不过说实话,这玩意儿防不住有心人,更多是走个形式。

异步登录是个分水岭。同步写法下,点登录按钮,界面直接卡死,直到数据库返回结果。网络稍微抖一下,用户以为程序崩了,狂点按钮,然后多个查询同时飞出去。改成async/await,按钮里先禁用自己,显示个“登录中…”的Label,await完再恢复。用户体验完全不一样。虽然WinForm的异步支持不如WPF那么顺滑,但够用。

还有个细节:记住用户名。CheckBox勾上,下次打开自动填充。实现方式无非是写注册表或者本地XML文件。写注册表干净,但有些公司电脑锁了权限;写文件简单,但得注意别把密码也存进去。只存用户名,密码让用户自己输,这是底线。

最后说个真事。有个朋友的公司做收银系统,WinForm登录界面用了三年,一直没问题。直到有天店员把键盘上的回车键抠下来当杯垫,换了个新键盘,键位映射变了,Enter键发出来的不是Keys.Enter而是Keys.Return。程序判断的是e.KeyCode == Keys.Enter,直接失效。店员只能用鼠标点,效率掉了一截。后来改成同时判断Keys.Enter和Keys.Return才解决。

WinForm是老了,但没死。工厂车间、医院挂号、超市收银,到处都是它的影子。登录界面作为第一道门,值得多花半小时抠抠细节。别让用户在第一秒就皱眉头。

分享到: