这个星期有点疯魔了,本想编个小工具把单位OA平台的人员数据和单位数据导出来算数的,但同事们要求多多,最后弄了个通用的工具出来,开发过程给大家分享一下。
老规矩上图
工具共两窗体,一个是登录界面,一个是工作界面
登录界面
工作界面
今天这篇博文先讲登录界面,UI控件一看就明白就不多说了,实现功能讲讲。
从界面可以看出这工具要记录计算机的一些独有信息到一个文件,并读取文件进行判断是否要自动登录,所以要在程序运行目录下建一个Res的文件夹,里面有个Config.xml文件用来保存数据
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Config>
<Title>惠州×××数据导出工具</Title>
<Ico>AppIco</Ico>
<SelectTop>30</SelectTop>
</Config>
<!--以下配置由工具自动生成,请勿进行修改-->
</Root>
这部分需要手工写,可以看到还有个图标设置,还要自己弄个ico到Res文件夹内,改名为AppIco.ico,如果没有,不会出错,不过会显示默认图标而已。
好,基本结构就这样了,用老习惯,把一些通用的代码写到Dll中,项目就有了个DataOperation这个类库,纯自己写的。
先Program.cs这个文件里面弄点手脚,读取Config.xml文件,满足自动登录条件就直接打开工作界面,不满足就打开登录界面。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Xml.Linq;
namespace OADataExportTool
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
try
{
//处理未捕获的异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//检查工具配套的配置文件及DLL文件是否完整,不完整直接退出
if (!File.Exists(@"Res\Config.xml") || !File.Exists(@"Res\AppIco.ico"))
{
MessageBox.Show("导出工具不完整,部分组件丢失。", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
DataOperation.Xml.SetRunFile(null);
Environment.Exit(0);
}
//检查是否满足自动登录条件,不满足就显示登录窗体
string Code = DataOperation.Machine.GetCode();
if (Code != null)//检查获取机器码是否成功
{
XElement XE = XElement.Load(@"Res\Config.xml");
var FindXE = XE.Elements("Machine").Where(P => P.Attribute("Code").Value == Code);
if (FindXE.Count() > 0)//检查是否可以自动登录
{
string ServerIP = FindXE.First().Element("ServerIP").Value;
string Uid = FindXE.First().Element("Uid").Value;
string Pwd = DataOperation.Encryption.DES_Decryp(FindXE.First().Element("Pwd").Value, Uid);
bool AutoLogin = Convert.ToBoolean(FindXE.First().Element("AutoLogin").Value);
if (AutoLogin)
{
if (DataOperation.Sql.TryConnet("master", ServerIP, Uid, Pwd))//尝试连接服务器,连接成功则继续
{
DataOperation.Xml.SetRunFile("Server=" + ServerIP + ";uid=" + Uid + ";pwd=" + Pwd + ";");
Application.Run(new SelectData());
}
else