c#桌面应用程序开发--登陆窗口
一.显示登陆窗口
应用程序入口点为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#桌面应用程序开发--登陆窗口的更多相关文章
- Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX
一.窗口类结构体简介 窗口类结构体包含了窗口的各种参数信息.比如:窗口的图标.菜单栏.背景颜色.窗口的消息处理等等. 窗口类结构体有两个:WNDCLASS(早期版本) 和 WNDCLASSEX(新版本 ...
- Electron与WEB桌面应用程序开发及其它
这几天在构思项目,研究了一下Electron,记录下来. 说起WEB桌面程序,当前最火的就是Electron了. Electron的架构用一句话总结,就是一个main.js进程加上一个或数个chrom ...
- QtQuick桌面应用程序开发指南 4)动态管理Note对象_B 5)加强外观 6)许多其他的改进
4.2.2 Stateless(不管状态)JavaScript库 为了让开发轻松点, 使用一个JavaScript接口来和数据库交互是个好主意, 它在QML中提供了方便的方法; 在QtCreator中 ...
- QtQuick桌面应用程序开发指导 3)达到UI而功能_B 4)动态管理Note物_A
3.2 把Page Item和Marker Item绑定 之前我们实现了PagePanel组件, 使用了三个state来切换Page组件的opacity属性; 这一步我们会使用Marker和Marke ...
- C语言Windows程序开发—Windows窗口样式与常用控件样式【第04天】
(一)Windows窗口(MDICLIENT)样式介绍 /* Windows窗口样式 */ WS_BORDER //带有边框的窗口 WS_CAPTION //带有标题栏的窗口 WS_CHILD //子 ...
- Win32 程序开发:创建一个应用程序窗口
一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSN ...
- electron之Windows下使用 html js css 开发桌面应用程序
1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...
- Visual Studio 2012 开发环境配置+控制台工具+桌面应用程序
一.界面布局视图设置 1.窗口的布局.控制台窗口运行恢复到开发环境的设置方法 也可以保存好设好的个性化设置,导入设置: 2.视图|服务器资源管理器(sever explorer) 可以访问数据源.服务 ...
- Python3的桌面程序开发利器:Eric6的环境搭建、使用
本文旨在通过一个简单的demo,介绍基于Python3.PyQT5的环境下开发桌面应用程序的一种方案,当然开发Python的桌面应用程序不止是PyQT 这一种方案,还可以使用Python自带的Tkin ...
随机推荐
- Azure VMSS ---- PowerShell创建标准镜像的VMSS集群
VMSS的创建可以采用Portal.Powershell.Azure CLI或者Template. 但目前Portal创建有很多限制,本文将介绍如何用PowerShell来创建VMSS的集群. 具体的 ...
- laravel redis的使用
学习源头: https://www.cnblogs.com/redirect/p/6185228.html
- 如何安装搜索引擎Elasticsearch?
最近工作中要用到搜索引擎,由于目前用的搜索引擎是LeanCloud 提供的 ,不太好用,不支持范围等搜索,而且每天还收费30元,请求次数也有限制.基于这些原因,我们只好在自己的服务器上部署搜索引擎了. ...
- 怎么让eclipse调试的时候不进入 class文件中去
Eclipse -> Window ->Preferences ->Java ->Debug "Suspend execution on uncaught excep ...
- SOAP webserivce 和 RESTful webservice 对比及区别
简单对象访问协议(Simple Object Access Protocol,SOAP)是一种基于 XML 的协议,可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传 ...
- 浅析Java中的深拷贝和浅拷
浅析Java中的深拷贝和浅拷贝 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: in ...
- 分析诊断工具之一:MYSQL性能查看(多指标)
网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...
- 第八课 go的条件语句
1 if ... else package main import "fmt" func main() { flag:= { fmt.Println("flag > ...
- Jlink flash 烧录HEX 程序
一般Jlink版本 和 Jag(硬件)最好匹配 安装Jlink 时,IAR的工具包也可以顺带安装. 有源码: IAR 可以自动选择CPU型号,代码直接Download and debug https: ...
- Java学习之SpringMVC零配置实践
概述:本实践主要是对SpringMVC的主要功能做了一个大概的体验,将原来的SpringMVC的大量配置改成用SpringBoot进行集成,做到了零XML配置,本次实践分为两个部分,一部分为基本功能实 ...