摘要:PropertyGrid 當參數設置頁面
這可以偷懶不用自己拉參數設定畫面 , 直接使用微軟的 Property 設定UI
使用方式幾點要注意 , 用法可以給參考 JEDI315System這隻裡面的 cls.EDI315Setting
我目前遇到的限制
1. memo 型的欄位只會做一個按鈕[...] 按下去後跳出另一個畫面來輸入 , 還沒辦法把 RichEditBox 直接替換原來的 TextBox , 應該是可以不過還沒仔細到網路上找解決方案
2. 這個 Class 裡的變數可以是 int , String , Enum , DateTime , Color , Font , Point 這些可以在 VS.NET 中看到的型別 , 但是不支持 類中類(屬性本身是一個自訂義的類)不是不能做,而是真的要這樣做的話會很麻煩,要寫一堆額外的程式來處理,而必要反而把事情複雜化
3. 一定要有 Get, Set 才會被讀取
[Category("EDI 315 Encoder"), Description("EDI 315 Sender ID."), Bindable(BindableSupport.No), DesignOnly(false)]
public string SenderID { get; set; }
如果要有預設值 , 現在.NET4.5編輯器只能寫成這樣 , 沒有更簡單的寫法 , 不用再試了
private string receiverIDIdent = "ZZ";
[Category("EDI 315 Encoder"), Description("EDI 315 Receiver ID Qualifier "), Bindable(BindableSupport.No), DesignOnly(false)]
public string ReceiverIDIdent
{
get { return receiverIDIdent; }
set { receiverIDIdent = value; }
}
4. 我寫了個制式的共用的 ClientConfigLib.dll , 固名思義就是適合 Client 用的 , 裡面有標準的 frmGeneralParamSettingDialog.cs 這是一個單純設定頁面 , 有寫好的轉出轉入功能 , 是我自訂的副檔名 , 使用的時候直接像這樣呼叫就可以
///
/// 物件編輯畫面, 並且把物件存在Client 端 , 只要屬性有封裝 {get;set;} 就會顯示
///
///
傳入的Class ///
系統中辨識的唯一值, 會用這唯一值來存檔 public static void myGeneralParamDialog(object obj, string sIdentifier ,string sFormText = "Param Setting")
也有無畫面直接呼叫的 , 注意識別字在整個Application 裡面不能重複 , 參數會被轉換成Table 存在底下路徑 , 而識別碼就是TableName , 我路徑特別選在 APP 路徑, 也就是如果用ClickOne 改版也不會被覆蓋
//系統預設定義檔路徑
public static string sConfigFile = Application.CommonAppDataPath + @"\config\AppGeneralParam.xml";
5. 目前為了簡化設計和方便直接使用 , 所以沒有撰寫支持一個Table 存好幾筆同類 Class 的參數 , 因為我沒有想到甚麼情況會這樣, 而且一但這樣處理, 讀出來的Rows 有好幾個要怎麼分辨哪個是哪個..., 所以現在都是一個識別碼一個Table ,裡面一筆資料而已 , 我是用Class 讀取 屬性名稱的技術做的, 把屬性名稱變成欄位名, 每個屬性就是一個欄位 , 然後組成 一個DataTable 然後再合併到 參數Dataset 裡面最後存成上面的 xml , 背後用到的 Class to Table , Table To Class 在PublicLib.cs 裡面有寫