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对象属性的存取,从而实现一些非常巧妙的组合应用。