FoxOne---一個快速高效的BS框架--WEB控件屬性編輯器

FoxOne---一個快速高效的BS框架--(1)html

FoxOne---一個快速高效的BS框架--(2)git

FoxOne---一個快速高效的BS框架--(3)github

FoxOne---一個快速高效的BS框架--(4)框架

FoxOne---一個快速高效的BS框架--WEB控件屬性編輯器編輯器

FoxOne---一個快速高效的BS框架--數據訪問(Dao)post

FoxOne---一個快速高效的BS框架--生成增刪改查設計

 

咱們都知道,VS中有個WEBFORM的控件屬性編輯器,可以自動反射控件的各個屬性,而且根據屬性的類型出現相應的編輯控件,例如:orm

1.布爾類型,對應下拉框,裏面的選項出現 是 和 否htm

2.枚舉類型,對應下拉框,裏面的選項出現的是枚舉的各個值blog

3.string類型和int類型,出現的都是輸入框

對於除String和值類型以外的其它類型的屬性,支持得就不太好了,須要手動去實現本身的UITypeEditor,而且用Attribute的方式聲明到屬性中。

若是不聲明自定義複雜類型對應的Editor,那麼結果將以下面的User屬性:

只是給了一個慘白的輸入框,沒什麼實際意義,只是想告訴你這個屬性我識別到了,無能爲力。。。

 

顯然我不可能讓每一個實現了自定義控件的人都去實現一次UITypeEditor,因此我決定基於VS控件屬性編輯器的基礎之上,增長對其它類型的支持,包括:

1.全部繼承自IControl接口的接口類型;

2.全部實現自IControl接口的類型及其子類;

3.泛型列表屬性(IList<T>),不過類型T也只能是實現了IControl或其實現類的子類;

效果是這樣的:

上面的截圖是Table控件的各個屬性,其中String和值類型的屬性出如今「表格組件」那一欄,其它類型的屬性分別出如今各個選項卡中,有接口,有複雜類型,也有泛型列表類型;

其中,對於泛型列表類型,出現的編輯頁面以下:

點擊這個頁面的」新增「時,出現的是對TableColumn類型的編輯;

 

對於自定義的複雜類型,效果以下:

 

對於接口類型的屬性,出現以下編輯頁:

注意上圖中出現的五個供選擇的數據源是實現了IListDataSource的類型,只要是實現了特定的接口,無需一一註冊也會被自動識別到(固然那個擴展是出如今你後來新建的工程的話,那工程的Assembly仍是要註冊一下的)

固然也能夠用特定的Attribute去聲明屬性須要特定的編輯控件,或者數據源,或者是否出如今編輯器中。

例如:

對於」數據表數據源「,在編輯它的屬性時,表名是能夠直接選擇,而不用手動填寫的,但屬性類型是String的,這是由於:

在代碼中,我用FormFieldAttribute聲明瞭這個屬性須要用下拉框,而且用FunctionDataSourceAttribute聲明這個下拉框的數據源來自AllTableDataSource。

這樣的話,這個控件屬性編輯器就很靈活了。。

對於這樣的設計,實現中有四點是比較關鍵的:

1.對於控件屬性類型的反射識別,對於不一樣的類型出現不一樣的編輯頁面;

2.控件的系列化;

3.系列化以後結果的存儲,其父子關係的關聯;

4.控件的反系列化;

在接下來的文章中,我將繼續就這4點展開敘述。。

若是有興趣的能夠加入羣裏來交流一下,羣號:581523872

 

github:https://github.com/gameking0124/FoxOne

相關文章
相關標籤/搜索