UIContext -- 自动保存/恢复窗体控件的属性值

UIContext,是本人在编程实践中用于在Winform窗体程序中用于保存用户的个性化配置信息的工具类。

主要用于保存和恢复窗体(Form)中的一些控件的属性。比如:

典型应用是某个文本框的默认值,用户希望下次进入后,该文本框还是最后一次输入的内容。

 或者用户选择了下拉列表中某一项作为一个相对固定的选择,下一次他就不需要再作重复选择,UIContext自动帮他恢复这一选项。

下面列出UIContext主要的方法或属性:

属性或方法

 说明

public UIContext(object contextObject)

构造函数

public staticstring UserDataDir

保存用户个人配置的文件夹

public void Load(string propertyName)

从配置中获取并设置本窗体的指定控件的属性值

public void Load(string propertyName,string defaultValue)

从配置中获取并设置本窗体的指定控件的属性值,如果为空则设置默认值

public void Save()

将本对象的用户配置值保存到内存中

public staticvoid LoadAllFromPersistent()

将应用程序所有上下文配置加载到内存

public staticvoid SaveAllToPersistent()

将配置持久化保存到Xml文件中

public static void LoadContext(UIContext context, string contextSettings) 通过控件的属性名称列表自动恢复属性值或字段值

用法示例:

    public partial class FormTest : FormGeneral
    {
        //假定这是一个窗体内的控件
        public TextEdit textEdit1 = new TextEdit();

        public FormTest()
        {
            InitializeComponent();

            //在程序运行开始时,从配置文件加载所有配置
            UIContext.LoadAllFromPersistent();

            //定义本窗体的用户配置对象
            UIContext context = new UIContext(this);

            //从配置中恢复属性的值,如果配置文件没有值,则默认值为abc
          context.Load("textEdit1.Text=abc");

            //在程序运行过程中,用户操作改变了值
            textEdit1.Text = "def";

          //保存用户输入的值到配置中, 事实上,这一步可以省略
          //因为,UIContext对象会自动判断它的上下文对象类型,如果是窗体,则会在窗体关闭时自动执行这一方法。
            context.Save();

            //程序运行结束前,保存所有用户配置到文件
            UIContext.SaveAllToPersistent();
        }
}

总的说来,使用此类经过以上代码所述的6个步骤。 但是,我们可以利用窗体基类进行进一步的封装,比如:

public partial class FormGeneral : DevExpress.XtraEditors.XtraForm
{
       /// <summary>
       /// 用于保存窗体状态的上下文对象
        /// </summary>
        protected UIContext Context;

        public FormGeneral()
        {
           	InitializeComponent();
 		Context = new UIContext(this);
	}

	/// <summary>
        /// 通过上下文字符串设置本窗体的属性值或字段值
        /// </summary>
        protected void LoadContext(string contextSettings)
        {
            if (String.IsNullOrEmpty(contextSettings)) return;
            UIContext.LoadContext(Context, contextSettings);
        }
}


这样,当其他的窗体继承自FormGeneral时,就可以很方便地恢复在配置中的各个控件的属性值了:

protcted void Form_Load(object sender, EventArgs e)
{
	LoadContext("控件名.属性名;控件名2.属性名2;....");
}


也就是说,经过适当的封装,在最终的子窗体里面,程序员要做的只是调用LoadContext方法,参数是将本窗体控件名和属性名罗列出来,用;号分隔就可以了。其他的事,UIContext都帮你做了。比如:

            LoadContext(@"cbxDays.SelectedIndex=6
                            tabShowType.SelectedTabPageIndex
                            ctrlClassTree1.FocusedClassId"
                );


以上的代码中,cbxDays是一个下拉列表控件,tabShowType是一个选项卡控件,而ctrlClassTree1是一个用户控件,有一个属性FocusedClassId.

UIContext将自动恢复这些控件的属性到上一次保存后的值。并在窗体关闭时再次保存用户的选择项。

如果各位觉得这个UIContext还有一点用处,请顶贴。我将发实现的源码。

虽然此工具类处理窗体是最典型的应用,它也可以处理其他任何object对象属性的存取,从而实现一些非常巧妙的组合应用。

猜你喜欢

转载自blog.csdn.net/bwangel/article/details/8083328
今日推荐