顶者有分!WinForms登录窗体如何自动登录 当勾选自动登录的复选框,下次登录加载登录窗体时自动显示账号和密码,不用点击登录按钮自动运行显示主窗体 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用App.config存储你的用户名和密码(最好加密)。同时app.config里存储是否自动登陆的标志。如果用户设置为自动登陆下次只需打开窗体,就与数据库进行连接,并进行页面跳转。 用户名和密码已经用过App.config,可以自动显示我想实现的功能是不按登录按钮能自动登录~ App.config中就多存储一个字段,比如说AutoLogin=true,检查完这个字段后就自动在Form的复选框上打勾并完成自动登录。 已经填好了那在Form_Load里调用按钮click事件不就完了? Form_Load(object sende....){if(自动登录标志){btnLogin_Click(sender,e);//登录按钮点击事件}} using System;using System.Collections.Generic;using System.Text;using System.Xml;using System.IO;namespace IM{ public class SystemConfig { #region"基本操作函数" /// <summary> /// 得到程序工作目录 /// </summary> /// <returns></returns> private static string GetWorkDirectory() { try { return Path.GetDirectoryName(typeof(SystemConfig).Assembly.Location); } catch { return System.Windows.Forms.Application.StartupPath; } } /// <summary> /// 判断字符串是否为空串 /// </summary> /// <param name="szString">目标字符串</param> /// <returns>true:为空串;false:非空串</returns> private static bool IsEmptyString(string szString) { if (szString == null) return true; if (szString.Trim() == string.Empty) return true; return false; } /// <summary> /// 创建一个制定根节点名的XML文件 /// </summary> /// <param name="szFileName">XML文件</param> /// <param name="szRootName">根节点名</param> /// <returns>bool</returns> private static bool CreateXmlFile(string szFileName, string szRootName) { if (szFileName == null || szFileName.Trim() == "") return false; if (szRootName == null || szRootName.Trim() == "") return false; XmlDocument clsXmlDoc = new XmlDocument(); clsXmlDoc.AppendChild(clsXmlDoc.CreateXmlDeclaration("1.0", "GBK", null)); clsXmlDoc.AppendChild(clsXmlDoc.CreateNode(XmlNodeType.Element, szRootName, "")); try { clsXmlDoc.Save(szFileName); return true; } catch { return false; } } /// <summary> /// 从XML文件获取对应的XML文档对象 /// </summary> /// <param name="szXmlFile">XML文件</param> /// <returns>XML文档对象</returns> private static XmlDocument GetXmlDocument(string szXmlFile) { if (IsEmptyString(szXmlFile)) return null; if (!File.Exists(szXmlFile)) return null; XmlDocument clsXmlDoc = new XmlDocument(); try { clsXmlDoc.Load(szXmlFile); } catch { return null; } return clsXmlDoc; } /// <summary> /// 将XML文档对象保存为XML文件 /// </summary> /// <param name="clsXmlDoc">XML文档对象</param> /// <param name="szXmlFile">XML文件</param> /// <returns>bool:保存结果</returns> private static bool SaveXmlDocument(XmlDocument clsXmlDoc, string szXmlFile) { if (clsXmlDoc == null) return false; if (IsEmptyString(szXmlFile)) return false; try { if (File.Exists(szXmlFile)) File.Delete(szXmlFile); } catch { return false; } try { clsXmlDoc.Save(szXmlFile); } catch { return false; } return true; } /// <summary> /// 获取XPath指向的单一XML节点 /// </summary> /// <param name="clsRootNode">XPath所在的根节点</param> /// <param name="szXPath">XPath表达式</param> /// <returns>XmlNode</returns> private static XmlNode SelectXmlNode(XmlNode clsRootNode, string szXPath) { if (clsRootNode == null || IsEmptyString(szXPath)) return null; try { return clsRootNode.SelectSingleNode(szXPath); } catch { return null; } } /// <summary> /// 获取XPath指向的XML节点集 /// </summary> /// <param name="clsRootNode">XPath所在的根节点</param> /// <param name="szXPath">XPath表达式</param> /// <returns>XmlNodeList</returns> private static XmlNodeList SelectXmlNodes(XmlNode clsRootNode, string szXPath) { if (clsRootNode == null || IsEmptyString(szXPath)) return null; try { return clsRootNode.SelectNodes(szXPath); } catch { return null; } } /// <summary> /// 创建一个XmlNode并添加到文档 /// </summary> /// <param name="clsParentNode">父节点</param> /// <param name="szNodeName">结点名称</param> /// <returns>XmlNode</returns> private static XmlNode CreateXmlNode(XmlNode clsParentNode, string szNodeName) { try { XmlDocument clsXmlDoc = null; if (clsParentNode.GetType() != typeof(XmlDocument)) clsXmlDoc = clsParentNode.OwnerDocument; else clsXmlDoc = clsParentNode as XmlDocument; XmlNode clsXmlNode = clsXmlDoc.CreateNode(XmlNodeType.Element, szNodeName, string.Empty); if (clsParentNode.GetType() == typeof(XmlDocument)) { clsXmlDoc.LastChild.AppendChild(clsXmlNode); } else { clsParentNode.AppendChild(clsXmlNode); } return clsXmlNode; } catch { return null; } } /// <summary> /// 设置指定节点中指定属性的值 /// </summary> /// <param name="parentNode">XML节点</param> /// <param name="szAttrName">属性名</param> /// <param name="szAttrValue">属性值</param> /// <returns>bool</returns> private static bool SetXmlAttr(XmlNode clsXmlNode, string szAttrName, string szAttrValue) { if (clsXmlNode == null) return false; if (IsEmptyString(szAttrName)) return false; if (IsEmptyString(szAttrValue)) szAttrValue = string.Empty; XmlAttribute clsAttrNode = clsXmlNode.Attributes.GetNamedItem(szAttrName) as XmlAttribute; if (clsAttrNode == null) { XmlDocument clsXmlDoc = clsXmlNode.OwnerDocument; if (clsXmlDoc == null) return false; clsAttrNode = clsXmlDoc.CreateAttribute(szAttrName); clsXmlNode.Attributes.Append(clsAttrNode); } clsAttrNode.Value = szAttrValue; return true; } #endregion #region"配置文件的读取和写入" private static string CONFIG_FILE = "SystemConfig.xml"; /// <summary> /// 读取指定的配置文件中指定Key的值 /// </summary> /// <param name="szKeyName">读取的Key名称</param> /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param> /// <returns>Key值</returns> public static int GetConfigData(string szKeyName, int nDefaultValue) { string szValue = GetConfigData(szKeyName, nDefaultValue.ToString()); try { return int.Parse(szValue); } catch { return nDefaultValue; } } /// <summary> /// 读取指定的配置文件中指定Key的值 /// </summary> /// <param name="szKeyName">读取的Key名称</param> /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param> /// <returns>Key值</returns> public static float GetConfigData(string szKeyName, float fDefaultValue) { string szValue = GetConfigData(szKeyName, fDefaultValue.ToString()); try { return float.Parse(szValue); } catch { return fDefaultValue; } } /// <summary> /// 读取指定的配置文件中指定Key的值 /// </summary> /// <param name="szKeyName">读取的Key名称</param> /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param> /// <returns>Key值</returns> public static bool GetConfigData(string szKeyName, bool bDefaultValue) { string szValue = GetConfigData(szKeyName, bDefaultValue.ToString()); try { return bool.Parse(szValue); } catch { return bDefaultValue; } } /// <summary> /// 读取指定的配置文件中指定Key的值 /// </summary> /// <param name="szKeyName">读取的Key名称</param> /// <param name="szDefaultValue">指定的Key不存在时,返回的值</param> /// <returns>Key值</returns> public static string GetConfigData(string szKeyName, string szDefaultValue) { string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE); if (!File.Exists(szConfigFile)) { return szDefaultValue; } XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile); if (clsXmlDoc == null) return szDefaultValue; string szXPath = string.Format(".//key[@name='{0}']", szKeyName); XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath); if (clsXmlNode == null) { return szDefaultValue; } XmlNode clsValueAttr = clsXmlNode.Attributes.GetNamedItem("value"); if (clsValueAttr == null) return szDefaultValue; return clsValueAttr.Value; } /// <summary> /// 保存指定Key的值到指定的配置文件中 /// </summary> /// <param name="szKeyName">要被修改值的Key名称</param> /// <param name="szValue">新修改的值</param> public static bool WriteConfigData(string szKeyName, string szValue) { string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE); if (!File.Exists(szConfigFile)) { if (!CreateXmlFile(szConfigFile, "SystemConfig")) return false; } XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile); string szXPath = string.Format(".//key[@name='{0}']", szKeyName); XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath); if (clsXmlNode == null) { clsXmlNode = CreateXmlNode(clsXmlDoc, "key"); } if (!SetXmlAttr(clsXmlNode, "name", szKeyName)) return false; if (!SetXmlAttr(clsXmlNode, "value", szValue)) return false; // return SaveXmlDocument(clsXmlDoc, szConfigFile); } #endregion }}这是我的类文件,请问哪里要作出修改??? APPCONFIGXML注册表都可以写注册表的好处是程序被拷贝到别的机器,不能自动登录 登陆页面加checkbox1登陆页面载入时判断更改checkbox1的值。在checkBox1_CheckedChanged事件里判断是否选中,如果选中(把你登陆按钮的代码写成方法在此调用)执行登陆代码。否则什么也不做。不知道这样写,算不算已经给你代码了 注意:在checkbox1_CheckedChanged事件里,先屏蔽你登陆窗体上按钮。 private void login_Load(object sender, EventArgs e) { //从App.config提取用户名,密码。 //提取登陆标志进行判断。如真,更改checkbox1的值 }private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (this.checkBox1.Checked) { //屏蔽所有按钮 //执行登陆 //登陆失败后启用所有按钮,更改checkbox1的值为false } } 你可以弄个Cookie吗...写到指定盘的文本文档中也行.到时候读取... private void LoginForm_Load(object sender, EventArgs e) { chkSavePwd.Checked = true; //读取 this.txtID.Text = SystemConfig.GetConfigData("UserID", string.Empty); this.txtPwd.Text = SystemConfig.GetConfigData("Password", string.Empty); chkAutoLogin.Checked = true; this.Hide(); } private void chkAutoLogin_CheckedChanged(object sender, EventArgs e) { if (chkAutoLogin.Checked) { GetLogin(); this.Hide(); } }//单击“登录”按钮时,设置登录名和登录密码 private void btnLogin_Click(object sender, EventArgs e) { GetLogin(); } private void GetLogin() { //如果验证通过,显示主窗体,并将登录窗体设为不可见 if (ValidateInput()) { isValidUser = ValidateUser(int.Parse(txtID.Text), txtPwd.Text, ref message); if (isValidUser) //用户验证成功 { //将输入的登录名保存到静态变量中 UserHelper.ID = int.Parse(txtID.Text); //将输入的登录密码保存到静态变量中 UserHelper.LoginPwd = txtPwd.Text; //显示主窗体 MainForm mf = new MainForm(); mf.Show(); this.Visible = false; //将登录窗体隐藏 } else //用户验证失败 { MessageBox.Show(message, "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error); } } if (chkSavePwd.Checked) { //保存 SystemConfig.WriteConfigData("UserID", this.txtID.Text.Trim()); SystemConfig.WriteConfigData("Password", this.txtPwd.Text.Trim()); } } UserHelper.ID = int.Parse(txtID.Text); //将输入的登录密码保存到静态变量中 UserHelper.LoginPwd = txtPwd.Text; //显示主窗体this.Visible = false; MainForm mf = new MainForm(); mf.Show(); 在LOAD判断,如果选了自动登录,就直接在程序里点击登录按钮就OK了 App.config 好像在VS 2008中 用得少了 FTP服务器没有密码,ftpwebrequest怎么设置 三个同名文本框怎么获得内容【100分】 如何添加ToolBar 本人新手,问几个问题,请各位教一下.谢谢了. C#中事务处理的问题 项目发布 为什么在aspx页中不能正确显示中文,而在其它页比如HTM中能正确显示? 高手请进(关于pop3乱码) 《C#精髓》中的简单例子,为什么出错? 关于动画载入的高分求救(100)。 DevExpress的gridcontrol样式问题 如何用WMI查询键盘的设备ID,仿照cpuID但是不行
如果用户设置为自动登陆下次只需打开窗体,就与数据库进行连接,并进行页面跳转。
我想实现的功能是不按登录按钮能自动登录~
{
if(自动登录标志)
{
btnLogin_Click(sender,e);//登录按钮点击事件
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;namespace IM
{
public class SystemConfig
{
#region"基本操作函数"
/// <summary>
/// 得到程序工作目录
/// </summary>
/// <returns></returns>
private static string GetWorkDirectory()
{
try
{
return Path.GetDirectoryName(typeof(SystemConfig).Assembly.Location);
}
catch
{
return System.Windows.Forms.Application.StartupPath;
}
}
/// <summary>
/// 判断字符串是否为空串
/// </summary>
/// <param name="szString">目标字符串</param>
/// <returns>true:为空串;false:非空串</returns>
private static bool IsEmptyString(string szString)
{
if (szString == null)
return true;
if (szString.Trim() == string.Empty)
return true;
return false;
}
/// <summary>
/// 创建一个制定根节点名的XML文件
/// </summary>
/// <param name="szFileName">XML文件</param>
/// <param name="szRootName">根节点名</param>
/// <returns>bool</returns>
private static bool CreateXmlFile(string szFileName, string szRootName)
{
if (szFileName == null || szFileName.Trim() == "")
return false;
if (szRootName == null || szRootName.Trim() == "")
return false; XmlDocument clsXmlDoc = new XmlDocument();
clsXmlDoc.AppendChild(clsXmlDoc.CreateXmlDeclaration("1.0", "GBK", null));
clsXmlDoc.AppendChild(clsXmlDoc.CreateNode(XmlNodeType.Element, szRootName, ""));
try
{
clsXmlDoc.Save(szFileName);
return true;
}
catch
{
return false;
}
} /// <summary>
/// 从XML文件获取对应的XML文档对象
/// </summary>
/// <param name="szXmlFile">XML文件</param>
/// <returns>XML文档对象</returns>
private static XmlDocument GetXmlDocument(string szXmlFile)
{
if (IsEmptyString(szXmlFile))
return null;
if (!File.Exists(szXmlFile))
return null;
XmlDocument clsXmlDoc = new XmlDocument();
try
{
clsXmlDoc.Load(szXmlFile);
}
catch
{
return null;
}
return clsXmlDoc;
} /// <summary>
/// 将XML文档对象保存为XML文件
/// </summary>
/// <param name="clsXmlDoc">XML文档对象</param>
/// <param name="szXmlFile">XML文件</param>
/// <returns>bool:保存结果</returns>
private static bool SaveXmlDocument(XmlDocument clsXmlDoc, string szXmlFile)
{
if (clsXmlDoc == null)
return false;
if (IsEmptyString(szXmlFile))
return false;
try
{
if (File.Exists(szXmlFile))
File.Delete(szXmlFile);
}
catch
{
return false;
}
try
{
clsXmlDoc.Save(szXmlFile);
}
catch
{
return false;
}
return true;
} /// <summary>
/// 获取XPath指向的单一XML节点
/// </summary>
/// <param name="clsRootNode">XPath所在的根节点</param>
/// <param name="szXPath">XPath表达式</param>
/// <returns>XmlNode</returns>
private static XmlNode SelectXmlNode(XmlNode clsRootNode, string szXPath)
{
if (clsRootNode == null || IsEmptyString(szXPath))
return null;
try
{
return clsRootNode.SelectSingleNode(szXPath);
}
catch
{
return null;
}
} /// <summary>
/// 获取XPath指向的XML节点集
/// </summary>
/// <param name="clsRootNode">XPath所在的根节点</param>
/// <param name="szXPath">XPath表达式</param>
/// <returns>XmlNodeList</returns>
private static XmlNodeList SelectXmlNodes(XmlNode clsRootNode, string szXPath)
{
if (clsRootNode == null || IsEmptyString(szXPath))
return null;
try
{
return clsRootNode.SelectNodes(szXPath);
}
catch
{
return null;
}
} /// <summary>
/// 创建一个XmlNode并添加到文档
/// </summary>
/// <param name="clsParentNode">父节点</param>
/// <param name="szNodeName">结点名称</param>
/// <returns>XmlNode</returns>
private static XmlNode CreateXmlNode(XmlNode clsParentNode, string szNodeName)
{
try
{
XmlDocument clsXmlDoc = null;
if (clsParentNode.GetType() != typeof(XmlDocument))
clsXmlDoc = clsParentNode.OwnerDocument;
else
clsXmlDoc = clsParentNode as XmlDocument;
XmlNode clsXmlNode = clsXmlDoc.CreateNode(XmlNodeType.Element, szNodeName, string.Empty);
if (clsParentNode.GetType() == typeof(XmlDocument))
{
clsXmlDoc.LastChild.AppendChild(clsXmlNode);
}
else
{
clsParentNode.AppendChild(clsXmlNode);
}
return clsXmlNode;
}
catch
{
return null;
}
} /// <summary>
/// 设置指定节点中指定属性的值
/// </summary>
/// <param name="parentNode">XML节点</param>
/// <param name="szAttrName">属性名</param>
/// <param name="szAttrValue">属性值</param>
/// <returns>bool</returns>
private static bool SetXmlAttr(XmlNode clsXmlNode, string szAttrName, string szAttrValue)
{
if (clsXmlNode == null)
return false;
if (IsEmptyString(szAttrName))
return false;
if (IsEmptyString(szAttrValue))
szAttrValue = string.Empty;
XmlAttribute clsAttrNode = clsXmlNode.Attributes.GetNamedItem(szAttrName) as XmlAttribute;
if (clsAttrNode == null)
{
XmlDocument clsXmlDoc = clsXmlNode.OwnerDocument;
if (clsXmlDoc == null)
return false;
clsAttrNode = clsXmlDoc.CreateAttribute(szAttrName);
clsXmlNode.Attributes.Append(clsAttrNode);
}
clsAttrNode.Value = szAttrValue;
return true;
}
#endregion
#region"配置文件的读取和写入"
private static string CONFIG_FILE = "SystemConfig.xml";
/// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static int GetConfigData(string szKeyName, int nDefaultValue)
{
string szValue = GetConfigData(szKeyName, nDefaultValue.ToString());
try
{
return int.Parse(szValue);
}
catch
{
return nDefaultValue;
}
} /// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static float GetConfigData(string szKeyName, float fDefaultValue)
{
string szValue = GetConfigData(szKeyName, fDefaultValue.ToString());
try
{
return float.Parse(szValue);
}
catch
{
return fDefaultValue;
}
} /// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static bool GetConfigData(string szKeyName, bool bDefaultValue)
{
string szValue = GetConfigData(szKeyName, bDefaultValue.ToString());
try
{
return bool.Parse(szValue);
}
catch
{
return bDefaultValue;
}
} /// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static string GetConfigData(string szKeyName, string szDefaultValue)
{
string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE);
if (!File.Exists(szConfigFile))
{
return szDefaultValue;
} XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile);
if (clsXmlDoc == null)
return szDefaultValue; string szXPath = string.Format(".//key[@name='{0}']", szKeyName);
XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath);
if (clsXmlNode == null)
{
return szDefaultValue;
} XmlNode clsValueAttr = clsXmlNode.Attributes.GetNamedItem("value");
if (clsValueAttr == null)
return szDefaultValue;
return clsValueAttr.Value;
} /// <summary>
/// 保存指定Key的值到指定的配置文件中
/// </summary>
/// <param name="szKeyName">要被修改值的Key名称</param>
/// <param name="szValue">新修改的值</param>
public static bool WriteConfigData(string szKeyName, string szValue)
{
string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE);
if (!File.Exists(szConfigFile))
{
if (!CreateXmlFile(szConfigFile, "SystemConfig"))
return false;
}
XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile); string szXPath = string.Format(".//key[@name='{0}']", szKeyName);
XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath);
if (clsXmlNode == null)
{
clsXmlNode = CreateXmlNode(clsXmlDoc, "key");
}
if (!SetXmlAttr(clsXmlNode, "name", szKeyName))
return false;
if (!SetXmlAttr(clsXmlNode, "value", szValue))
return false;
//
return SaveXmlDocument(clsXmlDoc, szConfigFile);
}
#endregion
}
}
这是我的类文件,请问哪里要作出修改???
XML
注册表都可以写注册表的好处是程序被拷贝到别的机器,不能自动登录
private void login_Load(object sender, EventArgs e)
{
//从App.config提取用户名,密码。
//提取登陆标志进行判断。如真,更改checkbox1的值
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (this.checkBox1.Checked)
{
//屏蔽所有按钮
//执行登陆
//登陆失败后启用所有按钮,更改checkbox1的值为false
}
}
private void LoginForm_Load(object sender, EventArgs e)
{
chkSavePwd.Checked = true;
//读取
this.txtID.Text = SystemConfig.GetConfigData("UserID", string.Empty);
this.txtPwd.Text = SystemConfig.GetConfigData("Password", string.Empty);
chkAutoLogin.Checked = true;
this.Hide();
} private void chkAutoLogin_CheckedChanged(object sender, EventArgs e)
{
if (chkAutoLogin.Checked)
{
GetLogin();
this.Hide();
}
}
//单击“登录”按钮时,设置登录名和登录密码
private void btnLogin_Click(object sender, EventArgs e)
{
GetLogin();
} private void GetLogin()
{
//如果验证通过,显示主窗体,并将登录窗体设为不可见
if (ValidateInput())
{
isValidUser = ValidateUser(int.Parse(txtID.Text), txtPwd.Text, ref message); if (isValidUser) //用户验证成功
{
//将输入的登录名保存到静态变量中
UserHelper.ID = int.Parse(txtID.Text);
//将输入的登录密码保存到静态变量中
UserHelper.LoginPwd = txtPwd.Text;
//显示主窗体
MainForm mf = new MainForm();
mf.Show(); this.Visible = false; //将登录窗体隐藏
}
else //用户验证失败
{
MessageBox.Show(message, "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} if (chkSavePwd.Checked)
{
//保存
SystemConfig.WriteConfigData("UserID", this.txtID.Text.Trim());
SystemConfig.WriteConfigData("Password", this.txtPwd.Text.Trim());
}
}
//将输入的登录密码保存到静态变量中
UserHelper.LoginPwd = txtPwd.Text;
//显示主窗体
this.Visible = false;
MainForm mf = new MainForm();
mf.Show();