原諒我再次浪費首頁的淨土,我是想得到點大家的意見,如果覺得有問題,我馬上撤下首頁放新手區。
最近一直想寫個架構,可惜沒有時間。架構的目的就是簡化開發,解決一些繁瑣的操作,封裝一些實用的功能。
現在把幾個小功能封裝了一下(針對WinForm),共用給大家,而且對架構如果有什麼意見請留言提出。
暫時解決問題如下:
1.多視窗管理(應用程式啟動時載入所有視窗執行個體,可以直接通過一個字串操控表單執行個體)
2.保證視窗執行個體單一(每個視窗的執行個體只被載入一次,保證不會重複調用,浪費記憶體。)
3.多表單之間資料共用(在表單1設定的一個值,在其他表單同樣可以得到)
使用方式:
1.每個表單必須繼承 Custom.BaseForm
2.修改應用程式入口代碼如下
Program
static class Program
{
/// <summary>
/// 應用程式的主進入點。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//得到所有表單的執行個體
Custom.BaseForm.BaseForms = Custom.SessionFactory.getForms();
//設定程式主啟動表單
Custom.BaseForm.MainForm = "UI.Form1";
Application.Run(Custom.SessionFactory.LoadMainForm());
}
}
在主表單運行前需要載入所有表單執行個體,並且設定應用程式的主表單全類名(包括命名空間)
只需要兩個步驟就可以使用本架構,不需要做任何設定檔。
Custom.BaseForm 中提供了一個靜態屬性BaseForms,類型Dictionary<string, BaseForm>,通過此屬性可以得到一個表單的執行個體,代碼如下:
得到表單執行個體
private void button1_Click(object sender, EventArgs e)
{
BaseForms["Form2"].Show();
}
通過一個字串名稱就可以得到一個執行個體,這樣方便在應用程式中動態調用,而不是採用以往的寫入程式碼方式。
BaseForm類提供了setAttribute和getAttribute方法,setAttribute可以以索引值對方式儲存值,這個值可以在應用程式任何一個繼承自BaseForm中被調用。代碼如下:
Code
//設定一個屬性,此屬性可以在任何表單訪問
this.setAttribute("say", "Hello,i am form1");
儲存鍵與值為Object類型,取值方式如下。
取值
string str=this.getAttribute("say").toString();
為了保證表單執行個體的單一性,而且還能保證點擊表單退出(右上方的X)時能夠及時釋放資源,所以重寫了System.Windows.Forms.Form的Dispose(bool disposing)方法。這樣可以保證被Show出的表單資源及時釋放並且能夠保證下次繼續調用。而點擊應用程式主表單退出時則關閉應用程式。
介紹寫的比較粗糙,給大家發個使用例子,如果有問題和意見請留言!
案例下載:http://files.cnblogs.com/dirain/CustomTest.rar
意見反饋及擴充交流群:63864931