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

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

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 { }#endregionInitAuthorizedUI();//根据权限屏蔽
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;}} #endregionif (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(identity)){bool bLogin = Portal.gc.LoginByIdentity(userName.Trim(), identity);if (bLogin){ShowMainDialog();}else{LoginNormal(args);}}}}

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

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

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

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之系统重新登录、自动登录实现,如需转载请自行联系原博主。

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

  1. 用Python+Selenium来测试登录自动登录163邮箱

    用Python+Selenium来测试登录自动登录163邮箱 1 准备条件 2 程序说明 3 代码 1 准备条件 ① windows系统(也许你是Linux,Mac,自行选择) ②安装了Anacond ...

  2. 智能玩具 数据采集 首页展示 注册 登录 自动登录 二维码图片

    玩具需求分析 1.语音实时通讯 - 让玩具成为孩子与父母之间沟通的桥梁 分支 建立幼儿社交圈2.积极正面幼教内容 - 让玩具能够播放 父母选定的儿歌,故事,百科,英语- 通过语音识别内容名称 玩具可以 ...

  3. C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试...

    我们想要达到的目的是模拟600个客户端的消息提醒功能,当然我们没有600个电脑可以拿来测试,我们只有4-5台电脑可以用来测试,那我们就想办法在一个电脑上执行100来个客户端,用不通的帐户登录,模拟60 ...

  4. win10系统怎么设置自动登录?

    有时为了系统安全,我们会给电脑设置登录密码,但是每次电脑开机或者唤醒睡眠时都需要输入密码,这就非常麻烦,怎么能让电脑自动登录呢?下面就来看看具体的教程. win10系统自动登录方法设置 1.首先打开W ...

  5. Linux下使用expect实现跳板机自动跳转/免密登录/自动登录(转)

    shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:&quo ...

  6. 嵌入式系统笔记之自动登录

    1.首先要搞明白你的系统是如何运行的 如我的板子是6ull-S板,它的启动过程是这样,启动后会加载 /etc/inittab 文件,inittab文件是init进程的配置文件,init是linux的0 ...

  7. linux系统无需设置密码自动登录用户

    cd /etc/lightdm/在lightdm.conf文件中, 修改 autologin-user = root 则主机开机时,免密码登录root用户

  8. 账户注销完自动登录账户,并且不需要再点击屏幕的账户头像

    今天遇到一个客户,提出了一个比较特殊的需求.他要求账户注销完可以自动登录账户,并且不需要再次点击屏幕,让一切都自动化. 首先我们来做第一步, 如何自动登录 1.在开始菜单搜索框输入 "net ...

  9. 网站1周内自动登录功能实现

    在很多比较大型的网址例如:CSDN,大家在登录时候会有一个[下次自动登录]的功能,该功能与我们的1周内自动登录功能基本类似.所谓的自动登录无非就是,绕过登录界 面,自动登录到系统主页. 自动登录的原理 ...

最新文章

  1. 阿里巴巴开源限流降级神器Sentinel大规模生产级应用实践
  2. hls fifo_【FCCM2020】HLS 高手对比 Verilog 高手,到底输哪了?
  3. Jmeter添加断言
  4. Servlet中的生命周期方法
  5. 『中级篇』Docker Cloud自动构建 Docker image(55)
  6. restful是什么
  7. PHP微信公众平台源码 支持多账号 仿pigcms 小猪微信 已经修改完毕 完整可用
  8. java.Net.UnknownHostException异常
  9. android studio abc_list_selector_disabled_holo_light.9.png报错
  10. 黑苹果完整安装教程,内含后续系统优化
  11. new115.com dz.html,超实用的HTML代码段(赵荣娇)
  12. autocad application 版本
  13. Excel应用-使用VBA自动绘制所有适用类型的Excel图表(代码及效果图)
  14. c语言将时速转换成配速,都是速度指标,为何跑步用“配速”而非“时速”?3个原因请明白...
  15. IOS 后台执行 播放音乐
  16. leetcode之雪糕的最大数量(C++)
  17. Oracle日期函數
  18. seo优化什么意思?
  19. 电脑重装系统可能会遇到的几个问题
  20. MySQL 总是差八个小时,如何破?

热门文章

  1. [20150113]关于oracle的存储结构.txt
  2. py_innodb_page_info.py 脚本下载
  3. Linux如何编译安装源码包软件
  4. WAV文件C++分析与显示
  5. [转载]在SQL Server数据库之间进行数据导入导出,OPENDATASOURCE
  6. Dubbo 在maven项目中的应用
  7. 零基础的前端开发初学者应如何系统地学习?
  8. mysql数据库使用
  9. 防止在iOS设备中的Safari将数字识别为电话号码
  10. 我的WEB之路(一)-2.JAVA学习路线