C#中如何全局访问UserInfo类存储的登录用户字段值
方案1:使用静态全局实例(最符合你全局调用的需求)
这个方案不需要改现有窗体的传参逻辑,整个应用任意模块都能直接读取用户信息。
- 先修改
UserInfo类,添加静态全局属性:
namespace MYCUSTOMAPP { class UserInfo { // 新增静态全局实例,整个应用共享 public static UserInfo Current { get; set; } public string userId; public string userType; public string userName; public string userUserName; public string userPhone; public string userIdCard; } }
- 修改登录逻辑,赋值后把实例挂到静态属性上:
找到你登录代码里创建loggedUser的部分,加一行赋值:
// Add logged user info to `UserInfo` class UserInfo loggedUser = new UserInfo(); loggedUser.userId = result.GetValue(result.GetOrdinal("Id")).ToString(); loggedUser.userName = result.GetValue(result.GetOrdinal("Name")).ToString(); loggedUser.userType = result.GetValue(result.GetOrdinal("UserType")).ToString(); loggedUser.userUserName = result.GetValue(result.GetOrdinal("UserName")).ToString(); loggedUser.userPhone = result.GetValue(result.GetOrdinal("Phone")).ToString(); loggedUser.userIdCard = result.GetValue(result.GetOrdinal("IdCard")).ToString(); // 新增这行,把当前登录用户存到全局静态属性 UserInfo.Current = loggedUser; MainWindow mainWindow = new MainWindow(); this.Hide(); mainWindow.ShowDialog(); Show();
- 在
MainWindow里直接取值即可:
// 任意地方都可以这么拿用户信息 string userId = UserInfo.Current.userId; string userName = UserInfo.Current.userName;
方案2:构造函数传参(适合不想用静态变量的场景)
如果你不需要全应用随处调用,只需要在MainWindow里用,可以用构造参数传递的方式:
- 给
MainWindow添加带参数的构造函数:
public partial class MainWindow : Form { // 存当前登录用户信息 public UserInfo LoggedUser { get; set; } // 原有无参构造函数保留 public MainWindow() { InitializeComponent(); } // 新增带UserInfo参数的构造函数 public MainWindow(UserInfo user) : this() { LoggedUser = user; } }
- 登录时创建MainWindow的时候传入实例:
// 把原来的MainWindow mainWindow = new MainWindow();改成下面这行 MainWindow mainWindow = new MainWindow(loggedUser);
- MainWindow里取值:
string userId = LoggedUser.userId;
注意事项
两种方案都只在应用运行期间有效,关闭程序后数据就会清空,符合你不需要每次查库的需求。如果需要持久化存储登录状态(比如下次打开不用重新登录),可以搭配本地配置文件、注册表等方式存储加密后的用户信息。
内容的提问来源于stack exchange,提问作者mafortis
相关产品推荐
相关产品推荐

