UIContext -- 自動儲存/恢復窗體控制元件的屬性值
UIContext,是本人在程式設計實踐中用於在Winform窗體程式中用於儲存使用者的個性化配置資訊的工具類。
主要用於儲存和恢復窗體(Form)中的一些控制元件的屬性。比如:
典型應用是某個文字框的預設值,使用者希望下次進入後,該文字框還是最後一次輸入的內容。
或者使用者選擇了下拉列表中某一項作為一個相對固定的選擇,下一次他就不需要再作重複選擇,UIContext自動幫他恢復這一選項。
下面列出UIContext主要的方法或屬性:
屬性或方法 |
說明 |
public |
建構函式 |
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物件屬性的存取,從而實現一些非常巧妙的組合應用。