一.显示登陆窗口

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

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

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

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

  具体代码如下:


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

  1.准备:

    1)数据访问层DAL创建:解决方案→新建项目→类库;

    2)在DAL中创建管理员数据访问类SysAdminService: DAL→右键→类

    3)编写通用数据访问类:负责连接数据库(最基本的格式化SQL语句通用数据访问类),代码如下

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration; namespace DAL
{
/// <summary>
/// 通用数据访问类
/// </summary>
class SQLHelper
{
private static string connString = Common.StringSecurity.DESDecrypt(ConfigurationManager.ConnectionStrings["connString"].ToString());//于数据库连接的字符串(配置文件解密) /// <summary>
/// 执行增、删、改操作
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int Update(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return cmd.ExecuteNonQuery();
}
catch (Exception ex)
{ throw ex;
}
finally
{
conn.Close();
}
} /// <summary>
/// 执行单一结果查询
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static object GetSingleResult(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return cmd.ExecuteScalar();
}
catch (Exception ex)
{ throw ex;
}
finally
{
conn.Close();
}
} /// <summary>
/// 返回结果集的查询
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static SqlDataReader GetReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
conn.Close();
throw ex;
}
} }
}

  2.登陆窗体数据访问方法编写:

 using System.Data.SqlClient;
using Models; namespace DAL
{
/// <summary>
/// 管理员数据访问类
/// </summary>
public class SysAdminService
{
/// <summary>
/// 根据账号和密码返回登陆结果的查询,
/// </summary>
/// <param name="objAdmin"></param>
/// <returns>返回管理员对象,若为空,则表示账号或密码错误</returns>
public SysAdmin AdminLogin(SysAdmin objAdmin)
{
string sql = "select AdminName from Admins where LoginId={0} and LoginPwd={1}";
sql = string.Format(sql, objAdmin.LoginId, objAdmin.LoginPwd); SqlDataReader objReader = SQLHelper.GetReader(sql);
if (objReader.Read())//从数据库查到结果,则表示登陆账号和密码正确,将管理员姓名封装到对象中,并返回对象,以便以后修改账号密码使用
{
objAdmin.AdminName = objReader["AdminName"].ToString();
}
else objAdmin = null;//没查到数据,表示登陆不成功,则清空对象
objReader.Close();
return objAdmin;
}
}
}

  3.前台UI逻辑编写(事件+控件)

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL;
using Models; namespace StudentManager
{
public partial class FrmUserLogin : Form
{
SysAdminService objAdminService = new SysAdminService(); public FrmUserLogin()
{
InitializeComponent();
} //登录
private void btnLogin_Click(object sender, EventArgs e)
{
//[1]数据验证
if (this.txtLoginId.Text.Trim().Length == )
{
this.lblMsg.Text = "请输入登陆账号!";
return;
}
if (this.txtLoginPwd.Text.Trim().Length == )
{
this.lblMsg.Text = "请输入登陆密码!";
return;
} //[2]封装对象
SysAdmin objAdmin = new SysAdmin()
{
LoginId = Convert.ToInt32(this.txtLoginId.Text.Trim()),
LoginPwd = this.txtLoginPwd.Text.Trim()
};
//[3]和后台交互,判断登陆信息是否正确
try
{
objAdmin = objAdminService.AdminLogin(objAdmin);
if (objAdmin != null)
{
//保存登陆信息
Program.objCurrentAdmin = objAdmin;
this.DialogResult = DialogResult.OK;//this代表当前窗体
this.Close();
}
else
{
this.lblMsg.Text = "账号或密码错误!";
}
}
catch (Exception ex)
{ MessageBox.Show("数据访问出现异常,登陆失败!具体原因:"+ex.Message);
} }
//关闭
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
} #region 改善用户体验
private void txtLoginId_KeyDown(object sender, KeyEventArgs e)
{
        //按回车健代替鼠标单击事件
if(e.KeyValue==)
{
if(this.txtLoginId.Text.Trim().Length != )
{
this.txtLoginPwd.Focus();
}
}
} private void txtLoginPwd_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyValue==)
{
btnLogin_Click(null,null);
}
} #endregion }
}

c#桌面应用程序开发--登陆窗口的更多相关文章

  1. Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX

    一.窗口类结构体简介 窗口类结构体包含了窗口的各种参数信息.比如:窗口的图标.菜单栏.背景颜色.窗口的消息处理等等. 窗口类结构体有两个:WNDCLASS(早期版本) 和 WNDCLASSEX(新版本 ...

  2. Electron与WEB桌面应用程序开发及其它

    这几天在构思项目,研究了一下Electron,记录下来. 说起WEB桌面程序,当前最火的就是Electron了. Electron的架构用一句话总结,就是一个main.js进程加上一个或数个chrom ...

  3. QtQuick桌面应用程序开发指南 4)动态管理Note对象_B 5)加强外观 6)许多其他的改进

    4.2.2 Stateless(不管状态)JavaScript库 为了让开发轻松点, 使用一个JavaScript接口来和数据库交互是个好主意, 它在QML中提供了方便的方法; 在QtCreator中 ...

  4. QtQuick桌面应用程序开发指导 3)达到UI而功能_B 4)动态管理Note物_A

    3.2 把Page Item和Marker Item绑定 之前我们实现了PagePanel组件, 使用了三个state来切换Page组件的opacity属性; 这一步我们会使用Marker和Marke ...

  5. C语言Windows程序开发—Windows窗口样式与常用控件样式【第04天】

    (一)Windows窗口(MDICLIENT)样式介绍 /* Windows窗口样式 */ WS_BORDER //带有边框的窗口 WS_CAPTION //带有标题栏的窗口 WS_CHILD //子 ...

  6. Win32 程序开发:创建一个应用程序窗口

    一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSN ...

  7. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  8. Visual Studio 2012 开发环境配置+控制台工具+桌面应用程序

    一.界面布局视图设置 1.窗口的布局.控制台窗口运行恢复到开发环境的设置方法 也可以保存好设好的个性化设置,导入设置: 2.视图|服务器资源管理器(sever explorer) 可以访问数据源.服务 ...

  9. Python3的桌面程序开发利器:Eric6的环境搭建、使用

    本文旨在通过一个简单的demo,介绍基于Python3.PyQT5的环境下开发桌面应用程序的一种方案,当然开发Python的桌面应用程序不止是PyQT 这一种方案,还可以使用Python自带的Tkin ...

随机推荐

  1. python exec内置表达式--exec()

    exec obj功能: exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码.obj 是 要执行的表达式.exec 返回值永远为 Non ...

  2. Python numpy函数:reshape()

    reshape()函数用于改变数组对象的形状: import numpy as np a = np.array([1,2,3,4,5,6,7,8]) #转换成2D数组 b = a.reshape((2 ...

  3. 讯为开发板的最小LINUX系统烧写及U盘的挂载及卸载

    fdisk -c 0 fatformat mmc 0:1ext3format mmc 0:2ext3format mmc 0:3ext3format mmc 0:4 fastboot fastboot ...

  4. IIS:配置参数

    ylbtech-IIS:配置参数 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   ...

  5. spring学习六

    1: @Valid 注解    @NotNull(message="名字不能为空") private String userName; @Max(value=120,message ...

  6. Centos 7.2 安装稳定版 nginx

    1. 创建适用于RHEL/CentOS系统的安装源文件,位置为: /etc/yum.repos.d/nginx.repo , 并写入以下内容: [nginx] name=nginx repo base ...

  7. delphi 面向对象实用技能教学二(封装)

    面向对象编程手法,是一项综合技能,单独把谁拿出来说都不合适.本次重写 TSimpleThread ,使其能在 D7 下运行. 基于 TSimpleThread ,重磅推出 TSimpleUI.ExeP ...

  8. SPARC T4 RAID Setup (ZT)

    http://www.confignotes.com/2013/09/sparc-t4-raid-setup/ How to configure a RAID volume with the inte ...

  9. 10-30SQLserver基础--(备份和还原、分离和附加数据库)、语句查询操作

    一.数据库是一个大容量的存储数据的仓库,为了保证数据完整性,防止一些数据的意外丢失等情况,需要对数据进行备份和还原. 备份数据不影响数据库的正常运行. 1.备份.还原数据库 首先对数据库进行备份,操作 ...

  10. 问题:C#属性;结果:c# 属性

    c# 属性 属性:get { //读属性代码 } set { //写属性代码 } public class Person{private string name;public string Name{ ...