c#桌面应用程序开发--登陆窗口
程序员文章站
2022-09-24 10:39:00
一.显示登陆窗口 应用程序入口点为Main方法,因此在Main方法中创建登陆窗体。 1)创建登陆窗体(登陆窗体UI已提前创建好); 2)显示窗体,以模式对话框的形式显示,并赋值给result; 3)判断窗体的返回值是否为OK,若是,则显示主窗体,(窗体的对话框结果在相应的窗体中设置,已达到逻辑处理, ......
一.显示登陆窗口
应用程序入口点为main方法,因此在main方法中创建登陆窗体。
1)创建登陆窗体(登陆窗体ui已提前创建好);
2)显示窗体,以模式对话框的形式显示,并赋值给result;
3)判断窗体的返回值是否为ok,若是,则显示主窗体,(窗体的对话框结果在相应的窗体中设置,已达到逻辑处理,登陆验证的效果),否则退出程序;
具体代码如下:
二.登陆窗体数据访问方法的编写
1.准备:
1)数据访问层dal创建:解决方案→新建项目→类库;
2)在dal中创建管理员数据访问类sysadminservice: dal→右键→类
3)编写通用数据访问类:负责连接数据库(最基本的格式化sql语句通用数据访问类),代码如下
1 using system; 2 using system.collections.generic; 3 using system.linq; 4 using system.text; 5 using system.data; 6 using system.data.sqlclient; 7 using system.configuration; 8 9 namespace dal 10 { 11 /// <summary> 12 /// 通用数据访问类 13 /// </summary> 14 class sqlhelper 15 { 16 private static string connstring = common.stringsecurity.desdecrypt(configurationmanager.connectionstrings["connstring"].tostring());//于数据库连接的字符串(配置文件解密) 17 18 /// <summary> 19 /// 执行增、删、改操作 20 /// </summary> 21 /// <param name="sql"></param> 22 /// <returns></returns> 23 public static int update(string sql) 24 { 25 sqlconnection conn = new sqlconnection(connstring); 26 sqlcommand cmd = new sqlcommand(sql, conn); 27 try 28 { 29 conn.open(); 30 return cmd.executenonquery(); 31 } 32 catch (exception ex) 33 { 34 35 throw ex; 36 } 37 finally 38 { 39 conn.close(); 40 } 41 } 42 43 /// <summary> 44 /// 执行单一结果查询 45 /// </summary> 46 /// <param name="sql"></param> 47 /// <returns></returns> 48 public static object getsingleresult(string sql) 49 { 50 sqlconnection conn = new sqlconnection(connstring); 51 sqlcommand cmd = new sqlcommand(sql, conn); 52 try 53 { 54 conn.open(); 55 return cmd.executescalar(); 56 } 57 catch (exception ex) 58 { 59 60 throw ex; 61 } 62 finally 63 { 64 conn.close(); 65 } 66 } 67 68 /// <summary> 69 /// 返回结果集的查询 70 /// </summary> 71 /// <param name="sql"></param> 72 /// <returns></returns> 73 public static sqldatareader getreader(string sql) 74 { 75 sqlconnection conn = new sqlconnection(connstring); 76 sqlcommand cmd = new sqlcommand(sql, conn); 77 try 78 { 79 conn.open(); 80 return cmd.executereader(commandbehavior.closeconnection); 81 } 82 catch (exception ex) 83 { 84 conn.close(); 85 throw ex; 86 } 87 } 88 89 } 90 }
2.登陆窗体数据访问方法编写:
1 using system.data.sqlclient; 2 using models; 3 4 namespace dal 5 { 6 /// <summary> 7 /// 管理员数据访问类 8 /// </summary> 9 public class sysadminservice 10 { 11 /// <summary> 12 /// 根据账号和密码返回登陆结果的查询, 13 /// </summary> 14 /// <param name="objadmin"></param> 15 /// <returns>返回管理员对象,若为空,则表示账号或密码错误</returns> 16 public sysadmin adminlogin(sysadmin objadmin) 17 { 18 string sql = "select adminname from admins where loginid={0} and loginpwd={1}"; 19 sql = string.format(sql, objadmin.loginid, objadmin.loginpwd); 20 21 sqldatareader objreader = sqlhelper.getreader(sql); 22 if (objreader.read())//从数据库查到结果,则表示登陆账号和密码正确,将管理员姓名封装到对象中,并返回对象,以便以后修改账号密码使用 23 { 24 objadmin.adminname = objreader["adminname"].tostring(); 25 } 26 else objadmin = null;//没查到数据,表示登陆不成功,则清空对象 27 objreader.close(); 28 return objadmin; 29 } 30 } 31 }
3.前台ui逻辑编写(事件+控件)
1 using system; 2 using system.collections.generic; 3 using system.componentmodel; 4 using system.data; 5 using system.drawing; 6 using system.linq; 7 using system.text; 8 using system.windows.forms; 9 using dal; 10 using models; 11 12 13 namespace studentmanager 14 { 15 public partial class frmuserlogin : form 16 { 17 sysadminservice objadminservice = new sysadminservice(); 18 19 public frmuserlogin() 20 { 21 initializecomponent(); 22 } 23 24 25 //登录 26 private void btnlogin_click(object sender, eventargs e) 27 { 28 //[1]数据验证 29 if (this.txtloginid.text.trim().length == 0) 30 { 31 this.lblmsg.text = "请输入登陆账号!"; 32 return; 33 } 34 if (this.txtloginpwd.text.trim().length == 0) 35 { 36 this.lblmsg.text = "请输入登陆密码!"; 37 return; 38 } 39 40 //[2]封装对象 41 sysadmin objadmin = new sysadmin() 42 { 43 loginid = convert.toint32(this.txtloginid.text.trim()), 44 loginpwd = this.txtloginpwd.text.trim() 45 }; 46 //[3]和后台交互,判断登陆信息是否正确 47 try 48 { 49 objadmin = objadminservice.adminlogin(objadmin); 50 if (objadmin != null) 51 { 52 //保存登陆信息 53 program.objcurrentadmin = objadmin; 54 this.dialogresult = dialogresult.ok;//this代表当前窗体 55 this.close(); 56 } 57 else 58 { 59 this.lblmsg.text = "账号或密码错误!"; 60 } 61 } 62 catch (exception ex) 63 { 64 65 messagebox.show("数据访问出现异常,登陆失败!具体原因:"+ex.message); 66 } 67 68 } 69 //关闭 70 private void btnclose_click(object sender, eventargs e) 71 { 72 this.close(); 73 } 74 75 #region 改善用户体验 76 private void txtloginid_keydown(object sender, keyeventargs e) 77 {
//按回车健代替鼠标单击事件 78 if(e.keyvalue==13) 79 { 80 if(this.txtloginid.text.trim().length != 0) 81 { 82 this.txtloginpwd.focus(); 83 } 84 } 85 } 86 87 private void txtloginpwd_keydown(object sender, keyeventargs e) 88 { 89 if(e.keyvalue==13) 90 { 91 btnlogin_click(null,null); 92 } 93 } 94 95 #endregion 96 97 98 } 99 }
推荐阅读
-
想在浏览器中开发类似桌面的应用程序,用什么工具?该怎么解决
-
c# winform窗口一直置顶显示在桌面最上方或最底层的方法
-
c# winform窗口一直置顶显示在桌面最上方或最底层的方法
-
详解C#开发Android应用程序的流程
-
C#开发Android百度地图手机应用程序(多地图展示)
-
C#使用InstallerProjects打包桌面应用程序的完整步骤
-
C# 界面跳转-登陆之后跳转至主窗口
-
C# 强行锁定 第三方 外部 应用程序窗体窗口的分辨率尺寸大小 禁止鼠标拖拽改变窗口大小
-
C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法
-
C#—使用InstallerProjects打包桌面应用程序