欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#桌面应用程序开发--登陆窗口

程序员文章站 2022-09-24 10:39:00
一.显示登陆窗口 应用程序入口点为Main方法,因此在Main方法中创建登陆窗体。 1)创建登陆窗体(登陆窗体UI已提前创建好); 2)显示窗体,以模式对话框的形式显示,并赋值给result; 3)判断窗体的返回值是否为OK,若是,则显示主窗体,(窗体的对话框结果在相应的窗体中设置,已达到逻辑处理, ......

一.显示登陆窗口

  应用程序入口点为main方法,因此在main方法中创建登陆窗体。

    1)创建登陆窗体(登陆窗体ui已提前创建好);

    2)显示窗体,以模式对话框的形式显示,并赋值给result;

    3)判断窗体的返回值是否为ok,若是,则显示主窗体,(窗体的对话框结果在相应的窗体中设置,已达到逻辑处理,登陆验证的效果),否则退出程序;

  具体代码如下:

c#桌面应用程序开发--登陆窗口


二.登陆窗体数据访问方法的编写

  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 }