Winform界面中实现菜单列表的动态个性化配置管理方法

2019-12-30 18:38:34王冬梅

这个配置管理组件SettingsProvider.net使用起来也是比较方便的,可以选择存储在本地的对象,也可以选择存储在数据库的存储对象。

首先我们先定义一个存储的参数类,这个是使用这个组件所必须的存储对象信息,如下代码所示。


/// <summary>
 /// 用来控制人员管理显示菜单的参数配置
 /// </summary>
 public class UserMenuParameter
 {
  [DefaultValue("")]
  [Description("用户ID")]
  public string UserID { get; set; }
  
  
  [Description("用户设置可见的菜单")]
  public Dictionary<string, bool> VisibleDict { get; set; }
 }

需要获取或存储这个对象信息的时候,我们初始化几个管理类,如下代码所示。


//参数存储所需的相关对象
private SettingsProvider settings;
private ISettingsStorage store;
private UserMenuParameter parameter;

然后在配置管理界面窗体里面,初始化这几个对象,如下代码所示。


// PortableStorage: 在运行程序目录创建一个setting的文件记录参数数据
// DatabaseStorage:在数据库TB_UserParameter表存储用户配置参数
store = new DatabaseStorage(LoginUserInfo.ID);
settings = new SettingsProvider(store);
parameter = settings.GetSettings<UserMenuParameter>();

这样我们就可以根据用户的ID,获取对应记录的信息并转换为相关的对象了,如果我们需要把修改的信息写会到存储介质里面,代码如下所示。


try
   {
    parameter = settings.GetSettings<UserMenuParameter>();
    parameter.VisibleDict = dict;
    parameter.UserID = LoginUserInfo.ID;
    settings.SaveSettings<UserMenuParameter>(parameter);

    ProcessDataSaved(sender, e);//触发外部事件

    this.DialogResult = System.Windows.Forms.DialogResult.OK;
   }
   catch (Exception ex)
   {
    LogHelper.Error(ex);
    MessageDxUtil.ShowError(ex.Message);
    return;
   }

2)配置管理界面的实现

解决了参数的获取及存储功能后,我们需要编写一个界面来管理用户的菜单配置,也就是我们前面介绍的菜单配置管理界面。

Winform,菜单列表,动态,个性化,配置

我们这个界面的定义代码如下所示。

Winform,菜单列表,动态,个性化,配置

其中参数的数据存储就是应用了前面介绍的代码,这里需要根据用户的配置项初始化树形菜单的显示处理,通过InitTree的函数实现菜单的显示。

在显示菜单前,我们先介绍一下功能菜单显示的规则,仅当参数存在对应记录,并且该记录显式设置不可见,菜单才不可见,否则默认菜单是可以看到的。