好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Winform开发框架之系统重新登录、自动登录实现

Winform开发框架之系统重新登录、自动登录实现

在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理多个用户账号,希望通过不同的账号登录进行管理不同的资料,另一种情况是酒店的换班操作,另一个人接替前面的人进行系统维护管理。这种重新登录其实也是一种友好的操作之一,试想一下,换个账号登录,就需要推出系统,重新寻找运行程序才可以,而且如果系统启动较慢一点的,还需要等待,所以实现重新登录,有时候也是必要的。因此实现这个功能,也是体现我们开发的系统注重细节的表现。

另外,自动登录(其实是接受通过命令行参数进行登录)也是很常见的,有时候,让客户端记住用户的账号密码,我们在后台通过调动命令行方式进行登录,让系统程序接收到相关的参数值即可进行登录了。

1、系统重新登录实现

大致的思路,就是登录系统后,在系统菜单中有一项重新登录的功能入口,单击可以要求客户重新输入密码进行登录,如下所示。

代码实现就是通过把初始化的时候,用户相关的操作放到一个函数里面,保证重新执行这个函数操作就能重新刷新登录用户信息即可。如下所示。

在InitUserRelated函数里面,我们把用户相关的初始化操作放在里面,其中包括显示登录用户信息、用户可操作按钮或者菜单、首页信息等相关项目,代码如下所示。

         ///   <summary> 
         ///   初始化用户相关的系统信息
          ///   </summary> 
         private   void   InitUserRelated()
        {
            ChildWinManagement.LoadMdiForm(  this ,  typeof (FirstPage)); //  欢迎页面 

             #region  初始化系统名称
             try  
            {
                  string  Manufacturer = config.AppConfigGet( "  Manufacturer  "  );
                  string  ApplicationName = config.AppConfigGet( "  ApplicationName  "  );
                  string  AppWholeName =  string .Format( "  {0}-{1}      "  , Manufacturer, ApplicationName);
                Portal.gc.gAppUnit  =  Manufacturer;
                Portal.gc.gAppMsgboxTitle  =  AppWholeName;
                Portal.gc.gAppWholeName  =  AppWholeName;

                  this .Text = AppWholeName +  "        "  ;
                  this .notifyIcon1.BalloonTipText =  AppWholeName;
                  this .notifyIcon1.BalloonTipTitle =  AppWholeName;
                  this .notifyIcon1.Text =  AppWholeName;

                  string  userName =  Portal.gc.LoginInfo.RealName;
                  if  ( string  .IsNullOrEmpty(userName))
                {
                    userName  =  Portal.gc.LoginInfo.Name;
                }
                UserStatus  =  string .Format( "  当前用户:{0}({1})  "  , userName, Portal.gc.RoleInfo.RoleName);
                CommandStatus  =  string .Format( "  欢迎使用 {0}  "  , Portal.gc.gAppWholeName);
            }
              catch   { }

              #endregion  

            InitAuthorizedUI();  //  根据权限屏蔽 
 
            InitSkinGallery();
            UserLookAndFeel.Default.SetSkinStyle(  "  Office 2010 Blue  "  );
        } 

其中 InitAuthorizedUI 就是判断用户有哪些权限的函数,根据权限系统获取到的功能点,在这里对界面元素进行重新刷新,有权限的就显示,没有的就隐藏即可,如下所示。

         ///   <summary> 
         ///   根据权限屏蔽功能
          ///   </summary> 
         private   void   InitAuthorizedUI()
        {
              this .tool_Report.Enabled = Portal.gc.HasFunction( "  Report  "  );
              this .tool_Dict.Enabled = Portal.gc.HasFunction( "  Dictionary  "  );
              this .tool_ItemDetail.Enabled = Portal.gc.HasFunction( "  ItemDetail  "  );
              this .tool_Purchase.Enabled = Portal.gc.HasFunction( "  Purchase  "  );
              this .tool_StockSearch.Enabled = Portal.gc.HasFunction( "  StockSearch  "  );
              this .tool_TakeOut.Enabled = Portal.gc.HasFunction( "  TakeOut  "  );
              this .tool_WareHouse.Enabled = Portal.gc.HasFunction( "  WareHouse  "  );
              //  this.menu_run_systemLog.Enabled = Portal.gc.HasFunction("LoginLog"); 
             this .tool_Settings.Enabled = Portal.gc.HasFunction( "  Parameters  "  );
              this .tool_MonthlyStatistic.Enabled = Portal.gc.HasFunction( "  MonthlyStatistic  "  );
              this .tool_AnnualStatistic.Enabled = Portal.gc.HasFunction( "  AnnualStatistic  "  );
              this .tool_ClearAll.Enabled = Portal.gc.HasFunction( "  ClearAllData  "  );
              this .tool_ImportItemDetail.Enabled = Portal.gc.HasFunction( "  ImportItemDetail  "  );
        } 

这样封装好后,我们需要重新登录就方便了,我们在重新登录的菜单操作里面,实现代码如下所示。

         private   void  btnRelogin_ItemClick( object   sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
              if  (MessageDxUtil.ShowYesNoAndWarning( "  您确定需要重新登录吗?  " ) !=  DialogResult.Yes)
                  return  ;


            Portal.gc.MainDialog.Hide();

            Login dlg  =  new   Login();
            dlg.StartPosition  =  FormStartPosition.CenterScreen;
              if  (DialogResult.OK ==  dlg.ShowDialog())
            {
                  if   (dlg.bLogin)
                { 
                     CloseAllDocuments();
                    InitUserRelated();
                }

            }
            dlg.Dispose();
            Portal.gc.MainDialog.Show();
        } 

实现上面的操作过程,基本上就完成了重新登录的操作了。

2、系统自动登录实现

系统自动登录有时候很必要,在用户自己绝对信任的电脑上,自动登录对用户来说,很方便友好的,君不见,QQ如此、旺旺如此等等。其实实现思路就是通过给exe执行文件传递登录参数即可,必要时登录的参数值还可以进行加密,给第三方进行运行调用,以前就做过一个在Web上自动启动桌面程序Visio应用软件的操作,其实原理就是一样,通过传递参数给执行文件实现的。

         [STAThread]
          static   void  Main( string  [] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(  false  );

              if  (args.Length >  0  )
            {
                LoginByArgs(args);
            }
              else  
            {
                LoginNormal(args);
            }
        } 

        ///   <summary> 
         ///   使用参数化登录
          ///   </summary> 
         ///   <param name="args"></param> 
         private   static   void  LoginByArgs( string  [] args)
        {
            CommandArgs commandArgs  =  CommandLine.Parse(args);
              if  (commandArgs.ArgPairs.Count >  0  )
            {
                  #region  获取用户参数
                 string  userName =  string  .Empty;
                  string  identity =  string  .Empty;
                  foreach  (KeyValuePair< string ,  string > pair  in   commandArgs.ArgPairs)
                {
                      if  ( "  U  "  .Equals(pair.Key, StringComparison.OrdinalIgnoreCase))
                    {
                        userName  =  pair.Value;
                    }
                      if  ( "  P  "  .Equals(pair.Key, StringComparison.OrdinalIgnoreCase))
                    {
                        identity  =  pair.Value;
                    }
                } 
                  #endregion 

                 if  (! string .IsNullOrEmpty(userName) && ! string  .IsNullOrEmpty(identity))
                {
                      bool  bLogin =  Portal.gc.LoginByIdentity(userName.Trim(), identity);
                      if   (bLogin)
                    {
                        ShowMainDialog();
                    }
                      else  
                    {
                        LoginNormal(args);
                    }
                }
            }
        } 

有时候,即使觉得用户不需要通过命令行登录,那么我们自己为了避免开发过程中,启动程序时候,总是需要输入用户账号密码的问题,也可以使用模拟自动登录的方式解决。

我们只需要在项目的属性里面输入内置的用户名密码,这样我们测试起来就不用登录那么麻烦了。

以上就是Winform开发框架中对于系统重新登录以及系统自动登录(命令行登录)的思想思路及方式,欢迎大家提供更好的思路及技巧,或者进行探讨,谢谢支持。

主要研究技术:代码生成工具、Visio二次开发、送水管理软件等共享软件开发
专注于 Winform开发框架 、WCF开发框架的研究及应用。
  转载请注明出处:
撰写人:伍华聪   http://HdhCmsTestiqidi测试数据  
    

 

标签:  Winform开发框架

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Winform开发框架之系统重新登录、自动登录实现的详细内容...

  阅读:41次