C# Winform程序 使用登录窗体到主窗体 且传登录信息

来源:互联网 发布:excel对比数据 编辑:程序博客网 时间:2024/05/26 07:30

C# Winform程序 使用登录窗体到主窗体 且传登录信息

    看到很多朋友在CSDN中发帖放分求“如何实现登录验证正确后弹出主窗体”的问题。关于这个问题的实现方法,一般很多人都是使用在登录窗体点击“登录”按钮后,通过后台数据验证正确后,把登录窗体隐藏,然后载入主窗体。还有一种做法是以上提问的这些人的一个不太对的一个实现办法(其实是无法实现的),他们的做法是点击“登录”按钮后,调用this.close()方法去把登录窗体关闭,然后实例化主窗体

           frmMain dlg=new frmMain();

           dlg.ShowDialog();

    用以上代码想实现登录后加载主窗体,你可以发现,当点击“登录”按钮后,登录窗体确实是关闭了,然后程序加载主窗体,主窗体是一闪而过,随即又关闭了。这是为什么呢?其实,你调用登录窗体的关闭事件时,把进程给关了,frmMain和frmLogin窗体是同一个进程,所以就出现了以上的一闪而过的现象。

    那么我们如何能够实现验证登录信息正确后加载主窗体呢?我的答案是通过验证返回参数去实现过程控制。

         在程序的类库里定义一个全局变量,如Bool  bLoginOk=false;

         此变量在未作登录时的初始值为false。

    在项目中的Program.cs中,通过先加载frmLogin,点击登录窗体中的“登录”按钮后,在后台查询数据库验证合法性,如果合法,则把bLoginOk赋值true;否则赋值falsse。

    在最后通过判断bLoginOk的值

       if(bLoginOk==true)

       {

           Application.run(frmMain);

       }

       else

          Application.Exit();

    同样可以通过以上的方法实现验证数据库连接参数的准确性。

 

 

在 龙星 项目中 本人就使用到了   例子如下:

 

复制代码
 1     static class Program
2
3 {
4
5 /// <summary>
6 /// 应用程序的主入口点。
7 /// </summary>
8 [STAThread]
9 static void Main()
10 {
11 Application.EnableVisualStyles();
12 Application.SetCompatibleTextRenderingDefault(false);
13 //Application.Run(new Login());
14
15 System.Threading.Mutex mutex = new System.Threading.Mutex(false, "ThisShouldOnlyRunOnce");
16 bool Running = !mutex.WaitOne(0, false);
17 if (!Running
18 {
19 //Application.Run(new Login());
20 Login login = new Login();
21 if (System.Windows.Forms.DialogResult.Cancel == login.ShowDialog())
22 {
23 return;
24 }
25 Main main = new Main();
26 main.ShowDialog();
27 }
28 else
29 {
30 MessageBox.Show("程序已启动!");
31 }
32 }
33 }
复制代码

 

 

全局类:

复制代码
1     public class GlobalClass
2 {
3 public struct User
4 {
5 public string strUsrId;
6 public string strUsrName;
7 };
8 public static User user;
9 }
复制代码

 

 

登录方法:

复制代码
 1         private void CheckIn()
2 {
3 BaseData bd=new BaseData();
4 string strSql = "Select * from [User] Where UserId='" + bd.Replace(this.txt_UserId.Text.Trim()) + "' And PassWord='" + bd.Replace(this.txt_PassWord.Text.Trim())+"'";
5 DataSet ds = new DataSet();
6 ds = SqlHelper.ExecuteDataset(strConn, CommandType.Text, strSql);
7
8 if (ds != null && ds.Tables[0] != null)
9 {
10 if (ds.Tables[0].Rows.Count > 0)
11 {
12 GlobalClass.user.strUsrId = ds.Tables[0].Rows[0]["UserId"].ToString();
13 GlobalClass.user.strUsrName = ds.Tables[0].Rows[0]["UserName"].ToString();
14 this.DialogResult = System.Windows.Forms.DialogResult.OK;
15 this.Close();
16 }
17 else
18 {
19 MessageBox.Show("用户名或密码错误!");
20 }
21 }
22 }
复制代码


 

主要窗体使用:

    public partial class Main : Form

    {

        public Main()

        {

            InitializeComponent();

 

            this.label1.Text = GlobalClass.user.strUsrName;

        }

}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鸡吃大蒜多了怎么办 玖瑰花叶子黄怎么办 羊偷吃腥油和花生饼吃多了怎么办 肉牛眼睛有点变黄少吃东西怎么办 黑坑草鱼不开口怎么办 花生和瓜子受潮皮了怎么办? 菜叶上长了腻虫怎么办 磨辊耐磨层脱落怎么办 磨辊耐磨层小块脱落怎么办 密封胶皮圈松了怎么办 汽筒里胶皮垫密封不严怎么办 磁耦气缸脱磁了怎么办 无杆气缸行程大怎么办 c4d中模型变成线怎么办 内径槽异性需要车一刀怎么办 轴承太紧影响转速怎么办 电动车前轮蝶刹抱死怎么办 摩托三轮车油刹抱死怎么办 手动档汽车离合抱死怎么办 别克gl8后轮吃胎怎么办 扭力梁后轮吃胎怎么办 非独立悬挂吃胎怎么办 货车半轴法兰盘裂纹怎么办 小天才平板裂屏了怎么办 新车撞了个坑怎么办 新车碰了个坑怎么办 汽车顶被砸了个坑怎么办 途观l前减震异响怎么办 锦明8代声音太大怎么办 手机网页无法加载插件怎么办 微信公众号被投诉怎么办 住了酒店的尾房怎么办 喜欢前任的闺蜜怎么办 闺蜜给介绍对象怎么办 喜欢对象的发小怎么办 山东省直医保卡丢失怎么办 高铁票如果错过了怎么办 动车错过了时间怎么办 长途动车错过了怎么办 动车如果错过了怎么办 没有取票错过了怎么办