PropertyGrid 當參數設置頁面

  • 231
  • 0

摘要: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 裡面有寫