From 616652a5ae2deb9439ffd3cbb9d972c0a8990bc5 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 09 十二月 2024 08:53:34 +0800
Subject: [PATCH] 修复属性状态

---
 /dev/null                                                                                            |  237 -----------------------------
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs                           |   48 ++++-
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs              |    9 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs      |   19 -
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/01-source/02-tank/00-core/HydroTankViewModel.cs |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs                           |   21 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs      |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs                               |  105 +++++++------
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj                                        |    3 
 9 files changed, 129 insertions(+), 316 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs
index cba2e61..3dcbe0f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs
@@ -63,6 +63,15 @@
         #region 灞炴�ц祴鍊�
 
         /// <summary>
+        /// 鍏佽缂栬緫
+        /// </summary>
+        public bool AllowEdit
+        {
+            get { return this.hydroVisualPropertyCtrl1.AllowEdit; }
+            set { this.hydroVisualPropertyCtrl1.AllowEdit = value; }
+        }
+
+        /// <summary>
         /// 閫夋嫨瀵硅薄
         /// </summary>
         public HydroVisualViewModel SelectedObject
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
index 787d97b..06dcbfc 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -160,6 +160,7 @@
             {
                 _propertyCtrl = new SimulationPropertyCtrl();
                 _propertyCtrl.Dock = DockStyle.Fill;
+                _propertyCtrl.AllowEdit = true;
                 _propertyCtrl.HydroViewEvent += (visual) =>
                 {
                     SelectVisual(visual, eVisualSource.Property);
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
index a8b09e0..2d954f4 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
@@ -179,10 +179,10 @@
         #region 灞炴�ф帶浠�
 
         //灞炴�ф帶浠�
-        private HydroVisualPropertyViewCtrl _propertyCtrl = null;
+        private SimulationPropertyCtrl _propertyCtrl = null;
 
         //鑾峰彇灞炴�ф帶浠�
-        private HydroVisualPropertyViewCtrl GetPropertyCtrl()
+        private SimulationPropertyCtrl GetPropertyCtrl()
         {
             if (_hydroInfo == null)
             {
@@ -190,11 +190,12 @@
             }
             if (_propertyCtrl == null)
             {
-                _propertyCtrl = new HydroVisualPropertyViewCtrl();
+                _propertyCtrl = new SimulationPropertyCtrl();
                 _propertyCtrl.Dock = DockStyle.Fill;
-                _propertyCtrl.HydroViewEvent += (visualViewModel) =>
+                _propertyCtrl.AllowEdit = false;
+                _propertyCtrl.HydroViewEvent += (visual) =>
                 {
-                    SelectVisual(GetVisual(visualViewModel), eVisualSource.Property);
+                    SelectVisual(visual, eVisualSource.Property);
                 };
                 _propertyCtrl.BlinkLinkNodeEvent += async (link, linkNodeCode) =>
                 { //寮鸿皟杩炴帴鑺傜偣
@@ -286,14 +287,6 @@
             _propertyCtrl?.UpdateRows();
         }
 
-        //娓呯悊灞炴�ф帶浠�
-        private void ClearPropertyCtrl()
-        {
-            if (_propertyCtrl != null)
-            {
-                _propertyCtrl.SelectedObject = null;
-            }
-        }
 
         #endregion
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs
index 5377493..4088c6c 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/03-helper/HydroPropStatusHelper.cs
@@ -12,6 +12,27 @@
     /// </summary>
     public class HydroPropStatusHelper
     {
+        private static Dictionary<ePropStatus, Color> _colorDict = new Dictionary<ePropStatus, Color>()
+        {
+            { ePropStatus.Normal,Color.Black},
+            { ePropStatus.Lack,Color.Green},
+            { ePropStatus.Abnormal,Color.Orange},
+            { ePropStatus.Matching,Color.Purple},
+            { ePropStatus.Error,Color.Red}
+        };
+
+        /// <summary>
+        /// 鑾峰彇鐘舵��
+        /// </summary>
+        public static Color GetColor(ePropStatus propStatus)
+        {
+            if (_colorDict.ContainsKey(propStatus))
+            {
+                return _colorDict[propStatus];
+            }
+            return Color.Black;
+        }
+
 
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/01-source/02-tank/00-core/HydroTankViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/01-source/02-tank/00-core/HydroTankViewModel.cs
index 18c5113..84d8f3a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/01-source/02-tank/00-core/HydroTankViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/03-node/01-source/02-tank/00-core/HydroTankViewModel.cs
@@ -115,6 +115,7 @@
         [Display(Name = "瀹圭Н鏇茬嚎")]
         [PropertyOrder(1007)]
         [HydroCurvePro(HydroCurve.Tank, HydroCurveType.CurveVol)]
+        [ShowEditorInView(true)]
         [Browsable(true)]
         public string Curve
         {
@@ -136,6 +137,7 @@
         [Display(Name = "瀹圭Н鏇茬嚎")]
         [PropertyOrder(1008)]
         [HydroCurvePro(HydroCurve.TankVol, HydroCurveType.CurveVol)]
+        [ShowEditorInView(true)]
         [Browsable(false)]
         public string VolCurve { get; set; }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
index ba185b6..6d3d926 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
@@ -59,6 +59,11 @@
 
 
         /// <summary>
+        /// 鍏佽淇敼
+        /// </summary>
+        public bool AllowEdit { get; set; }
+
+        /// <summary>
         /// 缁戝畾瀵硅薄
         /// </summary>
         public HydroVisualViewModel SelectedObject
@@ -70,21 +75,28 @@
             }
             set
             {
-                this.barBtnChangeLink.Visibility = value is HydroLinkViewModel ? BarItemVisibility.Always : BarItemVisibility.Never;
-                this.barBtnMatchingDb.Visibility = value == null ? BarItemVisibility.Never : BarItemVisibility.Always;
-                this.barBtnView.Visibility = value == null ? BarItemVisibility.Never : BarItemVisibility.Always;
-                if (value != null)
-                {
-                    if (value is HydroReservoirViewModel)
-                    {
-                        this.barBtnMatchingDb.Visibility = BarItemVisibility.Never;
-                    }
-                    else if (value is HydroJunctionViewModel)
-                    {
-                        this.barBtnMatchingDb.Visibility = BarItemVisibility.Never;
-                    }
-                }
-                this.propertyGridControl1.SelectedObject = value;
+                SetSelectedObject(value);
+            }
+        }
+
+        //璁剧疆閫夋嫨瀵硅薄
+        private void SetSelectedObject(HydroVisualViewModel vm)
+        {
+            if (this.AllowEdit)
+            {
+                this.barBtnChangeLink.Visibility = vm is HydroLinkViewModel ? BarItemVisibility.Always : BarItemVisibility.Never;
+                this.barBtnMatchingDb.Visibility = vm == null ? BarItemVisibility.Never : BarItemVisibility.Always;
+            }
+            else
+            {
+                this.barBtnMatchingDb.Visibility = BarItemVisibility.Never;
+                this.barBtnChangeLink.Visibility = BarItemVisibility.Never;
+            }
+            this.barBtnView.Visibility = vm == null ? BarItemVisibility.Never : BarItemVisibility.Always;
+            var selectObj = this.propertyGridControl1.SelectedObject as HydroVisualViewModel;
+            this.propertyGridControl1.SelectedObject = vm;
+            if (selectObj == vm)
+            {
                 this.propertyGridControl1.UpdateRows();
             }
         }
@@ -149,10 +161,17 @@
             {
                 return;
             }
+            var realFieldName = fieldName;
             //灞炴�ф弿杩板櫒
             var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
             if (descriptor != null)
             {
+                //鐪熷疄灞炴�у悕绉�
+                var realPropAttri = (HydroRealProAttribute)descriptor.Attributes[typeof(HydroRealProAttribute)];
+                if (realPropAttri != null)
+                {
+                    realFieldName = realPropAttri.RealPropName;
+                }
                 //鍚嶇О
                 var displayNameAttri = (DisplayNameAttribute)descriptor.Attributes[typeof(DisplayNameAttribute)];
                 if (displayNameAttri != null && !string.IsNullOrEmpty(displayNameAttri.DisplayName))
@@ -171,38 +190,10 @@
             var vm = GetPropertyViewModel(e.Row);
             if (vm != null)
             {
-                var propStatus = vm.GetPropStatus(fieldName);
+                var propStatus = vm.GetPropStatus(realFieldName);
                 if (propStatus != null)
                 {
-                    switch (propStatus.PropStatus)
-                    {
-                        case Yw.Hydro.ePropStatus.Error:
-                            {
-                                e.Appearance.ForeColor = Color.Red;
-                            }
-                            break;
-                        case Yw.Hydro.ePropStatus.Normal:
-                            {
-                                e.Appearance.ForeColor = Color.Black;
-                            }
-                            break;
-                        case Yw.Hydro.ePropStatus.Lack:
-                            {
-                                e.Appearance.ForeColor = Color.Green;
-                            }
-                            break;
-                        case Yw.Hydro.ePropStatus.Abnormal:
-                            {
-                                e.Appearance.ForeColor = Color.Orange;
-                            }
-                            break;
-                        case Yw.Hydro.ePropStatus.Matching:
-                            {
-                                e.Appearance.ForeColor = Color.Purple;
-                            }
-                            break;
-                        default: break;
-                    }
+                    e.Appearance.ForeColor = HydroPropStatusHelper.GetColor(propStatus.PropStatus);
                 }
             }
         }
@@ -262,10 +253,28 @@
             }
 
             var descriptor = this.propertyGridControl1.GetPropertyDescriptor(this.propertyGridControl1.FocusedRow);
-            var showEditor = (ShowEditorAttribute)descriptor.Attributes[typeof(ShowEditorAttribute)];
-            if (showEditor != null)
+
+            if (this.AllowEdit)
             {
-                if (!showEditor.ShowEditor)
+                var showEditor = (ShowEditorAttribute)descriptor.Attributes[typeof(ShowEditorAttribute)];
+                if (showEditor != null)
+                {
+                    if (!showEditor.ShowEditor)
+                    {
+                        e.Cancel = true;
+                        return;
+                    }
+                }
+            }
+            else
+            {
+                var showEditorInView = (ShowEditorInViewAttribute)descriptor.Attributes[typeof(ShowEditorInViewAttribute)];
+                if (showEditorInView == null)
+                {
+                    e.Cancel = true;
+                    return;
+                }
+                if (!showEditorInView.ShowEditor)
                 {
                     e.Cancel = true;
                     return;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.Designer.cs
deleted file mode 100644
index 31ab4e1..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.Designer.cs
+++ /dev/null
@@ -1,304 +0,0 @@
-锘縩amespace Yw.WinFrmUI
-{
-    partial class HydroVisualPropertyViewCtrl
-    {
-        /// <summary> 
-        /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆�
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 娓呯悊鎵�鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆�
-        /// </summary>
-        /// <param name="disposing">濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓� true锛涘惁鍒欎负 false銆�</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 缁勪欢璁捐鍣ㄧ敓鎴愮殑浠g爜
-
-        /// <summary> 
-        /// 璁捐鍣ㄦ敮鎸佹墍闇�鐨勬柟娉� - 涓嶈
-        /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广��
-        /// </summary>
-        private void InitializeComponent()
-        {
-            components = new Container();
-            ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroVisualPropertyViewCtrl));
-            DevExpress.Utils.SuperToolTip superToolTip1 = new DevExpress.Utils.SuperToolTip();
-            DevExpress.Utils.ToolTipItem toolTipItem1 = new DevExpress.Utils.ToolTipItem();
-            DevExpress.Utils.SuperToolTip superToolTip2 = new DevExpress.Utils.SuperToolTip();
-            DevExpress.Utils.ToolTipTitleItem toolTipTitleItem1 = new DevExpress.Utils.ToolTipTitleItem();
-            DevExpress.Utils.ToolTipItem toolTipItem2 = new DevExpress.Utils.ToolTipItem();
-            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
-            hydroVisualPropertyDescriptionCtrl1 = new HydroVisualPropertyDescriptionCtrl();
-            propertyGridControl1 = new DevExpress.XtraVerticalGrid.PropertyGridControl();
-            svgImg16 = new DevExpress.Utils.SvgImageCollection(components);
-            layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
-            layoutProperty = new DevExpress.XtraLayout.LayoutControlItem();
-            layoutDescription = new DevExpress.XtraLayout.LayoutControlItem();
-            splitterItem1 = new DevExpress.XtraLayout.SplitterItem();
-            barManager1 = new DevExpress.XtraBars.BarManager(components);
-            bar1 = new DevExpress.XtraBars.Bar();
-            barBtnExpandAll = new DevExpress.XtraBars.BarButtonItem();
-            barBtnCollpseAll = new DevExpress.XtraBars.BarButtonItem();
-            barBtnView = new DevExpress.XtraBars.BarButtonItem();
-            barBtnHelp = new DevExpress.XtraBars.BarButtonItem();
-            barDockControlTop = new DevExpress.XtraBars.BarDockControl();
-            barDockControlBottom = new DevExpress.XtraBars.BarDockControl();
-            barDockControlLeft = new DevExpress.XtraBars.BarDockControl();
-            barDockControlRight = new DevExpress.XtraBars.BarDockControl();
-            ((ISupportInitialize)layoutControl1).BeginInit();
-            layoutControl1.SuspendLayout();
-            ((ISupportInitialize)propertyGridControl1).BeginInit();
-            ((ISupportInitialize)svgImg16).BeginInit();
-            ((ISupportInitialize)layoutControlGroup1).BeginInit();
-            ((ISupportInitialize)layoutProperty).BeginInit();
-            ((ISupportInitialize)layoutDescription).BeginInit();
-            ((ISupportInitialize)splitterItem1).BeginInit();
-            ((ISupportInitialize)barManager1).BeginInit();
-            SuspendLayout();
-            // 
-            // layoutControl1
-            // 
-            layoutControl1.Controls.Add(hydroVisualPropertyDescriptionCtrl1);
-            layoutControl1.Controls.Add(propertyGridControl1);
-            layoutControl1.Dock = DockStyle.Fill;
-            layoutControl1.Location = new Point(0, 28);
-            layoutControl1.Name = "layoutControl1";
-            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(567, 190, 714, 577);
-            layoutControl1.Root = layoutControlGroup1;
-            layoutControl1.Size = new Size(260, 602);
-            layoutControl1.TabIndex = 0;
-            layoutControl1.Text = "layoutControl1";
-            // 
-            // hydroVisualPropertyDescriptionCtrl1
-            // 
-            hydroVisualPropertyDescriptionCtrl1.Location = new Point(2, 502);
-            hydroVisualPropertyDescriptionCtrl1.Name = "hydroVisualPropertyDescriptionCtrl1";
-            hydroVisualPropertyDescriptionCtrl1.Size = new Size(256, 98);
-            hydroVisualPropertyDescriptionCtrl1.TabIndex = 5;
-            // 
-            // propertyGridControl1
-            // 
-            propertyGridControl1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
-            propertyGridControl1.ImageList = svgImg16;
-            propertyGridControl1.Location = new Point(2, 2);
-            propertyGridControl1.Name = "propertyGridControl1";
-            propertyGridControl1.OptionsBehavior.PropertySort = DevExpress.XtraVerticalGrid.PropertySort.NoSort;
-            propertyGridControl1.OptionsView.AllowReadOnlyRowAppearance = DevExpress.Utils.DefaultBoolean.True;
-            propertyGridControl1.OptionsView.ShowFocusedFrame = false;
-            propertyGridControl1.OptionsView.ShowRootLevelIndent = false;
-            propertyGridControl1.RecordWidth = 120;
-            propertyGridControl1.RowHeaderWidth = 80;
-            propertyGridControl1.Size = new Size(256, 490);
-            propertyGridControl1.TabIndex = 4;
-            propertyGridControl1.FocusedRowChanged += propertyGridControl1_FocusedRowChanged;
-            propertyGridControl1.CustomRecordCellEdit += propertyGridControl1_CustomRecordCellEdit;
-            propertyGridControl1.CustomDrawRowHeaderIndent += propertyGridControl1_CustomDrawRowHeaderIndent;
-            propertyGridControl1.CustomDrawRowHeaderCell += propertyGridControl1_CustomDrawRowHeaderCell;
-            propertyGridControl1.CustomDrawRowValueCell += propertyGridControl1_CustomDrawRowValueCell;
-            propertyGridControl1.ShowingEditor += propertyGridControl1_ShowingEditor;
-            propertyGridControl1.CellValueChanged += propertyGridControl1_CellValueChanged;
-            // 
-            // svgImg16
-            // 
-            svgImg16.Add("actions_forbid", "image://svgimages/icon builder/actions_forbid.svg");
-            svgImg16.Add("editnames", "image://svgimages/dashboards/editnames.svg");
-            // 
-            // layoutControlGroup1
-            // 
-            layoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
-            layoutControlGroup1.GroupBordersVisible = false;
-            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutProperty, layoutDescription, splitterItem1 });
-            layoutControlGroup1.Name = "Root";
-            layoutControlGroup1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            layoutControlGroup1.Size = new Size(260, 602);
-            layoutControlGroup1.TextVisible = false;
-            // 
-            // layoutProperty
-            // 
-            layoutProperty.Control = propertyGridControl1;
-            layoutProperty.Location = new Point(0, 0);
-            layoutProperty.Name = "layoutProperty";
-            layoutProperty.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 2, 0);
-            layoutProperty.Size = new Size(260, 492);
-            layoutProperty.TextSize = new Size(0, 0);
-            layoutProperty.TextVisible = false;
-            // 
-            // layoutDescription
-            // 
-            layoutDescription.Control = hydroVisualPropertyDescriptionCtrl1;
-            layoutDescription.Location = new Point(0, 502);
-            layoutDescription.Name = "layoutDescription";
-            layoutDescription.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 0, 2);
-            layoutDescription.Size = new Size(260, 100);
-            layoutDescription.TextSize = new Size(0, 0);
-            layoutDescription.TextVisible = false;
-            // 
-            // splitterItem1
-            // 
-            splitterItem1.AllowHotTrack = true;
-            splitterItem1.Location = new Point(0, 492);
-            splitterItem1.Name = "splitterItem1";
-            splitterItem1.Size = new Size(260, 10);
-            // 
-            // barManager1
-            // 
-            barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { bar1 });
-            barManager1.DockControls.Add(barDockControlTop);
-            barManager1.DockControls.Add(barDockControlBottom);
-            barManager1.DockControls.Add(barDockControlLeft);
-            barManager1.DockControls.Add(barDockControlRight);
-            barManager1.Form = this;
-            barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { barBtnHelp, barBtnExpandAll, barBtnCollpseAll, barBtnView });
-            barManager1.MaxItemId = 18;
-            // 
-            // bar1
-            // 
-            bar1.BarAppearance.Hovered.BorderColor = Color.FromArgb(0, 122, 204);
-            bar1.BarAppearance.Hovered.Options.UseBorderColor = true;
-            bar1.BarAppearance.Pressed.BorderColor = Color.FromArgb(0, 122, 204);
-            bar1.BarAppearance.Pressed.Options.UseBorderColor = true;
-            bar1.BarName = "Tools";
-            bar1.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Top;
-            bar1.DockCol = 0;
-            bar1.DockRow = 0;
-            bar1.DockStyle = DevExpress.XtraBars.BarDockStyle.Top;
-            bar1.FloatLocation = new Point(1899, 679);
-            bar1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { new DevExpress.XtraBars.LinkPersistInfo(barBtnExpandAll), new DevExpress.XtraBars.LinkPersistInfo(barBtnCollpseAll), new DevExpress.XtraBars.LinkPersistInfo(barBtnView), new DevExpress.XtraBars.LinkPersistInfo(barBtnHelp) });
-            bar1.OptionsBar.AllowQuickCustomization = false;
-            bar1.OptionsBar.DrawBorder = false;
-            bar1.OptionsBar.RotateWhenVertical = false;
-            bar1.OptionsBar.UseWholeRow = true;
-            bar1.Text = "Tools";
-            // 
-            // barBtnExpandAll
-            // 
-            barBtnExpandAll.Caption = "鍏ㄩ儴灞曞紑";
-            barBtnExpandAll.Id = 13;
-            barBtnExpandAll.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnExpandAll.ImageOptions.SvgImage");
-            barBtnExpandAll.ImageOptions.SvgImageSize = new Size(20, 20);
-            barBtnExpandAll.Name = "barBtnExpandAll";
-            barBtnExpandAll.ItemClick += barBtnExpandAll_ItemClick;
-            // 
-            // barBtnCollpseAll
-            // 
-            barBtnCollpseAll.Caption = "鍏ㄩ儴鎶樺彔";
-            barBtnCollpseAll.Id = 14;
-            barBtnCollpseAll.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnCollpseAll.ImageOptions.SvgImage");
-            barBtnCollpseAll.ImageOptions.SvgImageSize = new Size(20, 20);
-            barBtnCollpseAll.Name = "barBtnCollpseAll";
-            barBtnCollpseAll.ItemClick += barBtnCollpseAll_ItemClick;
-            // 
-            // barBtnView
-            // 
-            barBtnView.Id = 17;
-            barBtnView.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnView.ImageOptions.SvgImage");
-            barBtnView.Name = "barBtnView";
-            toolTipItem1.Text = "鏌ョ湅";
-            superToolTip1.Items.Add(toolTipItem1);
-            barBtnView.SuperTip = superToolTip1;
-            barBtnView.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
-            barBtnView.ItemClick += barBtnView_ItemClick;
-            // 
-            // barBtnHelp
-            // 
-            barBtnHelp.Caption = "鎻忚堪淇℃伅";
-            barBtnHelp.Id = 2;
-            barBtnHelp.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnHelp.ImageOptions.SvgImage");
-            barBtnHelp.ImageOptions.SvgImageSize = new Size(20, 20);
-            barBtnHelp.Name = "barBtnHelp";
-            toolTipTitleItem1.Appearance.Image = (Image)resources.GetObject("resource.Image");
-            toolTipTitleItem1.Appearance.Options.UseImage = true;
-            toolTipTitleItem1.ImageOptions.Image = (Image)resources.GetObject("resource.Image1");
-            toolTipItem2.LeftIndent = 6;
-            toolTipItem2.Text = "鎻忚堪淇℃伅";
-            superToolTip2.Items.Add(toolTipTitleItem1);
-            superToolTip2.Items.Add(toolTipItem2);
-            barBtnHelp.SuperTip = superToolTip2;
-            barBtnHelp.ItemClick += barBtnHelp_ItemClick;
-            // 
-            // barDockControlTop
-            // 
-            barDockControlTop.CausesValidation = false;
-            barDockControlTop.Dock = DockStyle.Top;
-            barDockControlTop.Location = new Point(0, 0);
-            barDockControlTop.Manager = barManager1;
-            barDockControlTop.Size = new Size(260, 28);
-            // 
-            // barDockControlBottom
-            // 
-            barDockControlBottom.CausesValidation = false;
-            barDockControlBottom.Dock = DockStyle.Bottom;
-            barDockControlBottom.Location = new Point(0, 630);
-            barDockControlBottom.Manager = barManager1;
-            barDockControlBottom.Size = new Size(260, 0);
-            // 
-            // barDockControlLeft
-            // 
-            barDockControlLeft.CausesValidation = false;
-            barDockControlLeft.Dock = DockStyle.Left;
-            barDockControlLeft.Location = new Point(0, 28);
-            barDockControlLeft.Manager = barManager1;
-            barDockControlLeft.Size = new Size(0, 602);
-            // 
-            // barDockControlRight
-            // 
-            barDockControlRight.CausesValidation = false;
-            barDockControlRight.Dock = DockStyle.Right;
-            barDockControlRight.Location = new Point(260, 28);
-            barDockControlRight.Manager = barManager1;
-            barDockControlRight.Size = new Size(0, 602);
-            // 
-            // HydroVisualPropertyViewCtrl
-            // 
-            AutoScaleDimensions = new SizeF(7F, 14F);
-            AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(layoutControl1);
-            Controls.Add(barDockControlLeft);
-            Controls.Add(barDockControlRight);
-            Controls.Add(barDockControlBottom);
-            Controls.Add(barDockControlTop);
-            Name = "HydroVisualPropertyViewCtrl";
-            Size = new Size(260, 630);
-            ((ISupportInitialize)layoutControl1).EndInit();
-            layoutControl1.ResumeLayout(false);
-            ((ISupportInitialize)propertyGridControl1).EndInit();
-            ((ISupportInitialize)svgImg16).EndInit();
-            ((ISupportInitialize)layoutControlGroup1).EndInit();
-            ((ISupportInitialize)layoutProperty).EndInit();
-            ((ISupportInitialize)layoutDescription).EndInit();
-            ((ISupportInitialize)splitterItem1).EndInit();
-            ((ISupportInitialize)barManager1).EndInit();
-            ResumeLayout(false);
-            PerformLayout();
-        }
-
-        #endregion
-
-        private DevExpress.XtraLayout.LayoutControl layoutControl1;
-        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
-        private DevExpress.XtraLayout.LayoutControlItem layoutProperty;
-        private DevExpress.XtraBars.BarDockControl barDockControlTop;
-        private DevExpress.XtraBars.BarDockControl barDockControlBottom;
-        private DevExpress.XtraBars.BarDockControl barDockControlLeft;
-        private DevExpress.XtraBars.BarDockControl barDockControlRight;
-        private DevExpress.XtraLayout.SplitterItem splitterItem1;
-        private DevExpress.XtraBars.BarManager barManager1;
-        private DevExpress.XtraVerticalGrid.PropertyGridControl propertyGridControl1;
-        private DevExpress.XtraBars.BarButtonItem barBtnHelp;
-        private DevExpress.XtraBars.Bar bar1;
-        private DevExpress.XtraBars.BarButtonItem barBtnExpandAll;
-        private DevExpress.XtraBars.BarButtonItem barBtnCollpseAll;
-        private DevExpress.Utils.SvgImageCollection svgImg16;
-        private DevExpress.XtraBars.BarButtonItem barBtnView;
-        private HydroVisualPropertyDescriptionCtrl hydroVisualPropertyDescriptionCtrl1;
-        private DevExpress.XtraLayout.LayoutControlItem layoutDescription;
-    }
-}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.cs
deleted file mode 100644
index 2317462..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.cs
+++ /dev/null
@@ -1,690 +0,0 @@
-锘縰sing DevExpress.XtraBars;
-using DevExpress.XtraEditors;
-using DevExpress.XtraEditors.Controls;
-using DevExpress.XtraEditors.Repository;
-using DevExpress.XtraLayout.Utils;
-using DevExpress.XtraVerticalGrid.Events;
-
-namespace Yw.WinFrmUI
-{
-
-    public partial class HydroVisualPropertyViewCtrl : XtraUserControl
-    {
-        public HydroVisualPropertyViewCtrl()
-        {
-            InitializeComponent();
-            this.layoutControl1.SetupLayoutControl();
-        }
-
-        /// <summary>
-        /// 寮鸿皟杩炴帴鑺傜偣浜嬩欢
-        /// 绗竴涓弬鏁颁负鏈韩Code
-        /// 绗簩涓弬鏁颁负杩炴帴鑺傜偣Code
-        /// </summary>
-        public event Action<HydroLinkViewModel, string> BlinkLinkNodeEvent;
-
-        /// <summary>
-        /// 鏌ョ湅鏋勪欢浜嬩欢
-        /// </summary>
-        public event Action<HydroVisualViewModel> HydroViewEvent;
-
-
-        /// <summary>
-        /// 缁戝畾瀵硅薄
-        /// </summary>
-        public HydroVisualViewModel SelectedObject
-        {
-            get
-            {
-                var vm = this.propertyGridControl1.SelectedObject as HydroVisualViewModel;
-                return vm;
-            }
-            set
-            {
-                this.barBtnView.Visibility = value == null ? BarItemVisibility.Never : BarItemVisibility.Always;
-                this.propertyGridControl1.SelectedObject = value;
-            }
-        }
-
-        /// <summary>
-        /// 閲嶆柊浠庢暟鎹簮涓鍙栨暟鎹紝澶栬鎭㈠鍒氬紑濮嬪姞杞界殑鏍峰瓙
-        /// </summary>
-        public void UpdateData()
-        {
-            this.propertyGridControl1.UpdateData();
-        }
-
-        /// <summary>
-        /// 鏇存柊鏁版嵁锛屾牱寮忎笉鍙�
-        /// </summary>
-        public void UpdateRows()
-        {
-            this.propertyGridControl1.UpdateRows();
-        }
-
-        //鑾峰彇琛岀殑瑙嗗浘瀵硅薄
-        private HydroVisualViewModel GetPropertyViewModel(DevExpress.XtraVerticalGrid.Rows.BaseRow row)
-        {
-            if (row == null)
-            {
-                return default;
-            }
-            if (row.Level <= 1)
-            {
-                return this.SelectedObject;
-            }
-            if (row.ParentRow == null)
-            {
-                return this.SelectedObject;
-            }
-            if (row.ParentRow.Properties.Value is HydroVisualViewModel)
-            {
-                return row.ParentRow.Properties.Value as HydroVisualViewModel;
-            }
-            return GetPropertyViewModel(row.ParentRow);
-        }
-
-        //璁剧疆鎻忚堪鎺т欢鐨勫彲瑙佹��
-        private void SetDescriptionVisible(bool isVisible)
-        {
-            var visible = isVisible ? LayoutVisibility.Always : LayoutVisibility.Never;
-            this.layoutDescription.Visibility = this.splitterItem1.Visibility = visible;
-        }
-
-        //鑷畾涔夊睘鎬eader缂╄繘
-        private void propertyGridControl1_CustomDrawRowHeaderIndent(object sender, CustomDrawRowHeaderIndentEventArgs e)
-        {
-
-        }
-
-        //鑷畾涔夊睘鎬eader鏄剧ず
-        private void propertyGridControl1_CustomDrawRowHeaderCell(object sender, CustomDrawRowHeaderCellEventArgs e)
-        {
-            //瀛楁鍚嶇О
-            var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
-            if (string.IsNullOrEmpty(fieldName))
-            {
-                return;
-            }
-
-            //灞炴�ф弿杩板櫒
-            var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
-            if (descriptor != null)
-            {
-                //鍚嶇О
-                var displayNameAttri = (DisplayNameAttribute)descriptor.Attributes[typeof(DisplayNameAttribute)];
-                if (displayNameAttri != null && !string.IsNullOrEmpty(displayNameAttri.DisplayName))
-                {
-                    e.Caption = displayNameAttri.DisplayName;
-                }
-            }
-
-            //棰滆壊
-            var vm = GetPropertyViewModel(e.Row);
-            if (vm != null)
-            {
-                var propStatus = vm.GetPropStatus(fieldName);
-                if (propStatus != null)
-                {
-                    switch (propStatus.PropStatus)
-                    {
-                        case Yw.Hydro.ePropStatus.Error:
-                            {
-                                e.Appearance.ForeColor = Color.Red;
-                            }
-                            break;
-                        case Yw.Hydro.ePropStatus.Normal:
-                            {
-                                e.Appearance.ForeColor = Color.Black;
-                            }
-                            break;
-                        case Yw.Hydro.ePropStatus.Lack:
-                            {
-                                e.Appearance.ForeColor = Color.Green;
-                            }
-                            break;
-                        case Yw.Hydro.ePropStatus.Abnormal:
-                            {
-                                e.Appearance.ForeColor = Color.Orange;
-                            }
-                            break;
-                        default: break;
-                    }
-                }
-            }
-        }
-
-        //鑷畾涔夊睘鎬у�兼樉绀�
-        private void propertyGridControl1_CustomDrawRowValueCell(object sender, CustomDrawRowValueCellEventArgs e)
-        {
-            //琛屽瓧娈靛悕绉�
-            var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
-            if (string.IsNullOrEmpty(fieldName))
-            {
-                return;
-            }
-            //琛岀被鍨嬪叏鍚嶇О
-            var fullTypeName = e.Row.Properties.RowType.FullName;
-
-            if (fullTypeName == typeof(DateTime).FullName)
-            {
-                e.CellText = ((DateTime)e.Properties.Value).ToString("yyyy-MM-dd HH:mm:ss");
-            }
-            else
-            {
-                var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
-                if (descriptor != null)
-                {
-                    var calcuPropAttri = (HydroCalcuProAttribute)descriptor.Attributes[typeof(HydroCalcuProAttribute)];
-                    if (calcuPropAttri != null)
-                    {
-                        if (e.Properties.Value == null)
-                        {
-                            e.CellText = "灏氭湭璁$畻";
-                            e.Appearance.ForeColor = Color.OrangeRed;
-                        }
-                    }
-                    var displayUnitAttri = (DisplayUnitAttribute)descriptor.Attributes[typeof(DisplayUnitAttribute)];
-                    if (displayUnitAttri != null)
-                    {
-                        if (e.Properties.Value != null)
-                        {
-                            e.CellText = e.Properties.Value.ToString() + " " + displayUnitAttri.Unit;
-                        }
-                    }
-                }
-            }
-        }
-
-        //灞炴�х紪杈戞鐨勬樉绀轰笌鍙栨秷
-        private void propertyGridControl1_ShowingEditor(object sender, CancelEventArgs e)
-        {
-            var rowTypeFullName = this.propertyGridControl1.FocusedRow.Properties.RowType.FullName;
-            var fieldName = this.propertyGridControl1.FocusedRow.Properties.FieldName.Split(new char[] { '.' }).Last();
-
-            if (rowTypeFullName == typeof(Image).FullName)
-            {
-                e.Cancel = true;
-                return;
-            }
-
-            var descriptor = this.propertyGridControl1.GetPropertyDescriptor(this.propertyGridControl1.FocusedRow);
-            var showEditorInView = (ShowEditorInViewAttribute)descriptor.Attributes[typeof(ShowEditorInViewAttribute)];
-            if (showEditorInView == null)
-            {
-                e.Cancel = true;
-                return;
-            }
-            if (!showEditorInView.ShowEditor)
-            {
-                e.Cancel = true;
-                return;
-            }
-        }
-
-        //缂栬緫妗�
-        private void propertyGridControl1_CustomRecordCellEdit(object sender, GetCustomRowCellEditEventArgs e)
-        {
-            var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
-            if (string.IsNullOrEmpty(fieldName))
-            {
-                return;
-            }
-            var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
-            var rowTypeFullName = e.Row.Properties.RowType.FullName;
-            var vm = GetPropertyViewModel(e.Row);
-            if (vm == null)
-            {
-                return;
-            }
-
-            #region bool
-
-            if (rowTypeFullName == typeof(bool).FullName)
-            {
-                var ckEdit = new RepositoryItemCheckEdit();
-                ckEdit.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.Standard;
-                if (e.Row.Properties.ReadOnly == true)
-                {
-                    ckEdit.ReadOnly = true;
-                }
-                e.RepositoryItem = ckEdit;
-            }
-
-            #endregion
-
-            #region 瀵屾枃鏈�
-
-            var attri_multi = (MultiTextAttribute)descriptor.Attributes[typeof(MultiTextAttribute)];
-            if (attri_multi != null)
-            {
-                var memoEdit = new RepositoryItemMemoEdit();
-                if (e.Row.Properties.ReadOnly == true)
-                {
-                    memoEdit.ReadOnly = true;
-                }
-                e.RepositoryItem = memoEdit;
-            }
-
-            #endregion
-
-            #region 鍥剧墖
-
-            if (rowTypeFullName == typeof(Image).FullName)
-            {
-                var picEdit = new RepositoryItemPictureEdit();
-                picEdit.ReadOnly = true;
-                picEdit.NullText = "绌�";
-                e.RepositoryItem = picEdit;
-                e.Row.Expanded = true;
-            }
-
-            #endregion
-
-            #region 鏇茬嚎
-
-            var curvePropAttri = (HydroCurveProAttribute)descriptor.Attributes[typeof(HydroCurveProAttribute)];
-            if (curvePropAttri != null)
-            {
-                var buttonEdit = new RepositoryItemButtonEdit();
-                buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor;
-                buttonEdit.ButtonClick += delegate
-                {
-                    var vm = GetPropertyViewModel(e.Row);
-                    if (vm == null)
-                    {
-                        return;
-                    }
-                    switch (curvePropAttri.CurveType)
-                    {
-                        case HydroCurve.Tank:
-                            {
-
-                            }
-                            break;
-                        case HydroCurve.TankVol:
-                            {
-
-                            }
-                            break;
-                        case HydroCurve.Pump:
-                            {
-
-                            }
-                            break;
-                        case HydroCurve.PumpQH:
-                            {
-
-                            }
-                            break;
-                        case HydroCurve.PumpQP:
-                            {
-                                //var pumpViewModel = vm as HydroPumpViewModel;
-                                //var curveQp = vm.HydroInfo.Curves?.Find(x => x.Code == pumpViewModel.CurveQP);
-                                //var dlg = new SetHydroCurveDlg();
-                                //dlg.ReloadDataEvent += (curveInfo) =>
-                                //{
-                                //    if (vm.HydroInfo.Curves == null)
-                                //    {
-                                //        vm.HydroInfo.Curves = new List<Model.HydroCurveInfo>();
-                                //    }
-                                //    if (curveQp != null)
-                                //    {
-                                //        vm.HydroInfo.Curves.Remove(curveQp);
-                                //    }
-                                //    vm.HydroInfo.Curves.Add(curveInfo);
-                                //    pumpViewModel.CurveQP = curveInfo.Code;
-                                //    UpdateRows();
-                                //};
-                                //dlg.SetBindingData(vm.HydroInfo, curveQp, curvePropAttri.CurveType);
-                                //dlg.ShowDialog();
-                            }
-                            break;
-                        case HydroCurve.PumpQE:
-                            {
-                                //var pumpViewModel = vm as HydroPumpViewModel;
-                                //var curveQe = vm.HydroInfo.Curves?.Find(x => x.Code == pumpViewModel.CurveQE);
-                                //var dlg = new SetHydroCurveDlg();
-                                //dlg.ReloadDataEvent += (curveInfo) =>
-                                //{
-                                //    if (vm.HydroInfo.Curves == null)
-                                //    {
-                                //        vm.HydroInfo.Curves = new List<Model.HydroCurveInfo>();
-                                //    }
-                                //    if (curveQe != null)
-                                //    {
-                                //        vm.HydroInfo.Curves.Remove(curveQe);
-                                //    }
-                                //    vm.HydroInfo.Curves.Add(curveInfo);
-                                //    pumpViewModel.CurveQE = curveInfo.Code;
-                                //    UpdateRows();
-                                //};
-                                //dlg.SetBindingData(vm.HydroInfo, curveQe, curvePropAttri.CurveType);
-                                //dlg.ShowDialog();
-                            }
-                            break;
-                        case HydroCurve.Valve:
-                            {
-
-                            }
-                            break;
-                        case HydroCurve.ValveQL:
-                            {
-
-                            }
-                            break;
-                        default: break;
-                    }
-                };
-                e.RepositoryItem = buttonEdit;
-            }
-
-            #endregion
-
-            #region 妯″紡
-
-            var patternProAttri = (HydroPatternProAttribute)descriptor.Attributes[typeof(HydroPatternProAttribute)];
-            if (patternProAttri != null)
-            {
-                var buttonEdit = new RepositoryItemButtonEdit();
-                buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor;
-                buttonEdit.ButtonClick += delegate
-                {
-                    var vm = GetPropertyViewModel(e.Row);
-                    switch (patternProAttri.PatternType)
-                    {
-                        case HydroPattern.Head:
-                            {
-
-                            }
-                            break;
-                        case HydroPattern.Demand:
-                            {
-
-                            }
-                            break;
-                    }
-                };
-                e.RepositoryItem = buttonEdit;
-            }
-
-            #endregion
-
-            #region 杩炴帴
-
-            if (e.Row.Properties.Value != null)
-            {
-                var linkCodeAttri = (HydroLinkProAttribute)descriptor.Attributes[typeof(HydroLinkProAttribute)];
-                if (linkCodeAttri != null)
-                {
-                    var buttonEdit = new RepositoryItemButtonEdit();
-                    buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor;
-                    buttonEdit.ButtonClick += delegate
-                    {
-                        var vm = GetPropertyViewModel(e.Row);
-                        var vmLink = vm as HydroLinkViewModel;
-                        this.BlinkLinkNodeEvent?.Invoke(vmLink, e.Row.Properties.Value.ToString());
-                    };
-                    e.RepositoryItem = buttonEdit;
-                }
-            }
-
-
-            #endregion
-
-            #region 闃�闂�
-
-            if (vm is HydroValveViewModel valve)
-            {
-                if (fieldName == nameof(HydroValveViewModel.ValveSetting))
-                {
-                    e.Row.Visible = false;
-                }
-                switch (valve.Vmo.ValveType)
-                {
-                    case Yw.Hydro.ValveType.PSV:
-                        {
-                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
-                            {
-                                e.Row.Visible = true;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                        }
-                        break;
-                    case Yw.Hydro.ValveType.PRV:
-                        {
-                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
-                            {
-                                e.Row.Visible = true;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                        }
-                        break;
-                    case Yw.Hydro.ValveType.PBV:
-                        {
-                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
-                            {
-                                e.Row.Visible = true;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                        }
-                        break;
-                    case Yw.Hydro.ValveType.FCV:
-                        {
-                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
-                            {
-                                e.Row.Visible = true;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                        }
-                        break;
-                    case Yw.Hydro.ValveType.TCV:
-                        {
-                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
-                            {
-                                e.Row.Visible = true;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                        }
-                        break;
-                    case Yw.Hydro.ValveType.GPV:
-                        {
-                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
-                            {
-                                e.Row.Visible = true;
-                            }
-                        }
-                        break;
-                    case Yw.Hydro.ValveType.CV:
-                        {
-                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
-                            {
-                                e.Row.Visible = false;
-                            }
-                        }
-                        break;
-                    default: break;
-                }
-            }
-
-
-            #endregion
-
-        }
-
-        //灞炴�у�兼敼鍙�
-        private void propertyGridControl1_CellValueChanged(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e)
-        {
-            //var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
-            //if (string.IsNullOrEmpty(fieldName))
-            //{
-            //    return;
-            //}
-            //var vm = GetPropertyViewModel(e.Row);
-            //if (vm == null)
-            //{
-            //    return;
-            //}
-            //vm.UpdateVmoProperty();
-        }
-
-        //鍏ㄩ儴灞曞紑
-        private void barBtnExpandAll_ItemClick(object sender, ItemClickEventArgs e)
-        {
-            this.propertyGridControl1.ExpandAllRows();
-        }
-
-        //鍏ㄩ儴鎶樺彔
-        private void barBtnCollpseAll_ItemClick(object sender, ItemClickEventArgs e)
-        {
-            this.propertyGridControl1.CollapseAllRows();
-        }
-
-        //鏌ョ湅
-        private void barBtnView_ItemClick(object sender, ItemClickEventArgs e)
-        {
-            var vm = this.SelectedObject;
-            if (vm == null)
-            {
-                return;
-            }
-            this.HydroViewEvent?.Invoke(vm);
-        }
-
-        // 鎻忚堪
-        private void barBtnHelp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
-        {
-            var visible = this.splitterItem1.Visibility == LayoutVisibility.Always ? false : true;
-            SetDescriptionVisible(visible);
-        }
-
-        //鑱氱劍琛屾敼鍙�
-        private void propertyGridControl1_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
-        {
-            if (e.Row == null)
-            {
-                return;
-            }
-            //瀛楁鍚嶇О
-            var fieldName = e.Row.Properties.FieldName.Split(new char[] { '.' }).Last();
-            if (string.IsNullOrEmpty(fieldName))
-            {
-                return;
-            }
-            var vm = GetPropertyViewModel(e.Row);
-            if (vm == null)
-            {
-                return;
-            }
-
-            string caption = string.Empty;
-            string descrition = string.Empty;
-
-
-
-            //灞炴�ф弿杩板櫒
-            var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
-            if (descriptor != null)
-            {
-                //鍚嶇О
-                var displayNameAttri = (DisplayNameAttribute)descriptor.Attributes[typeof(DisplayNameAttribute)];
-                if (displayNameAttri != null && !string.IsNullOrEmpty(displayNameAttri.DisplayName))
-                {
-                    caption = displayNameAttri.DisplayName;
-                }
-
-                //鎻忚堪
-                var descritionAttri = (DescriptionAttribute)descriptor.Attributes[typeof(DescriptionAttribute)];
-                if (descritionAttri != null)
-                {
-                    descrition = descritionAttri.Description;
-                }
-            }
-
-            var propStatus = vm.GetPropStatus(fieldName);
-            this.hydroVisualPropertyDescriptionCtrl1.SetBindingData(caption, descrition, propStatus);
-
-        }
-
-
-    }
-}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.resx
deleted file mode 100644
index c179b22..0000000
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyViewCtrl.resx
+++ /dev/null
@@ -1,237 +0,0 @@
-锘�<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!--
-    Microsoft ResX Schema 
-
-    Version 2.0
-
-    The primary goals of this format is to allow a simple XML format
-    that is mostly human readable. The generation and parsing of the
-    various data types are done through the TypeConverter classes
-    associated with the data types.
-
-    Example:
-
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-
-    There are any number of "resheader" rows that contain simple
-    name/value pairs.
-
-    Each data row contains a name, and value. The row also contains a
-    type or mimetype. Type corresponds to a .NET class that support
-    text/value conversion through the TypeConverter architecture.
-    Classes that don't support this are serialized and stored with the
-    mimetype set.
-
-    The mimetype is used for serialized objects, and tells the
-    ResXResourceReader how to depersist the object. This is currently not
-    extensible. For a given mimetype the value must be set accordingly:
-
-    Note - application/x-microsoft.net.object.binary.base64 is the format
-    that the ResXResourceWriter will generate, however the reader can
-    read any of the formats listed below.
-
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="svgImg16.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>152, 17</value>
-  </metadata>
-  <metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-  <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
-  <data name="barBtnExpandAll.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALACAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iRXhwYW5kX0ZpZWxkIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3
-        IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuQmxhY2t7ZmlsbDojNzI3Mjcy
-        O30KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8
-        cG9seWdvbiBwb2ludHM9IjE0LDYgMTAsNiAxMCwyIDYsMiA2LDYgMiw2IDIsMTAgNiwxMCA2LDE0IDEw
-        LDE0IDEwLDEwIDE0LDEwICIgY2xhc3M9IkdyZWVuIiAvPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8
-        cGF0aCBkPSJNMjIsNmgxMHYySDIyVjZ6IE0yMiwxMmgxMHYtMkgyMlYxMnogTTIyLDIwaDEwdi0ySDIy
-        VjIweiBNMjIsMjRoMTB2LTJIMjJWMjR6IiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4NCiAgPHBhdGgg
-        ZD0iTTE4LDJoMTR2MkgxOFYyeiBNMTgsMTZoMTR2LTJIMThWMTZ6IE0xOCwyOGgxNHYtMkgxOFYyOHoi
-        IGNsYXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="barBtnCollpseAll.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAIcCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iQ29sbGFwc2VfRmllbGQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpu
-        ZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3Mjcy
-        NzI7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8
-        cmVjdCB4PSIyIiB5PSI2IiB3aWR0aD0iMTIiIGhlaWdodD0iNCIgY2xhc3M9IlJlZCIgLz4NCiAgPGcg
-        Y2xhc3M9InN0MCI+DQogICAgPHBhdGggZD0iTTIyLDZoMTB2MkgyMlY2eiBNMjIsMTJoMTB2LTJIMjJW
-        MTJ6IE0yMiwyMGgxMHYtMkgyMlYyMHogTTIyLDI0aDEwdi0ySDIyVjI0eiIgY2xhc3M9IkJsYWNrIiAv
-        Pg0KICA8L2c+DQogIDxwYXRoIGQ9Ik0xOCwyaDE0djJIMThWMnogTTE4LDE2aDE0di0ySDE4VjE2eiBN
-        MTgsMjhoMTR2LTJIMThWMjh6IiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L
-</value>
-  </data>
-  <data name="barBtnView.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAADUCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
-        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
-        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
-        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IlNlbmQiPg0KICAgIDxwb2x5Z29uIHBvaW50cz0iMiwy
-        MCA4LDIyLjQgMjQsMTAgMTIsMjQgMTIsMzAgMTYuMywyNS43IDIyLDI4IDMwLDIgICIgY2xhc3M9IkJs
-        dWUiIC8+DQogIDwvZz4NCjwvc3ZnPgs=
-</value>
-  </data>
-  <data name="barBtnHelp.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABsDAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
-        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
-        MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
-        Y2l0eTowLjU7fQoJLnN0MXtkaXNwbGF5Om5vbmU7fQoJLnN0MntkaXNwbGF5OmlubGluZTtmaWxsOiMw
-        MzlDMjM7fQoJLnN0M3tkaXNwbGF5OmlubGluZTtmaWxsOiNEMTFDMUM7fQoJLnN0NHtkaXNwbGF5Omlu
-        bGluZTtmaWxsOiM3MjcyNzI7fQo8L3N0eWxlPg0KICA8ZyBpZD0iQWJvdXQiPg0KICAgIDxwYXRoIGQ9
-        Ik0xNiwyQzguMywyLDIsOC4zLDIsMTZzNi4zLDE0LDE0LDE0czE0LTYuMywxNC0xNFMyMy43LDIsMTYs
-        MnogTTE2LDZjMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJzLTItMC45LTItMiAgIFMxNC45LDYsMTYs
-        NnogTTIwLDI0aC04di0yaDJ2LThoLTJ2LTJoMmg0djEwaDJWMjR6IiBjbGFzcz0iQmx1ZSIgLz4NCiAg
-        PC9nPg0KPC9zdmc+Cw==
-</value>
-  </data>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="resource.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACR0RVh0VGl0
-        bGUAQ29tbWVudDtUb29sdGlwO0hpbnQ7VGlwO0Nsb3Vk08HbyQAAAm9JREFUOE91k0lMU1EUhm8QJ6xY
-        QIWlW4kL3GAoGIIaF7rRDQsFBUUKBLFaQIK0FlocVpo40DQyU1rKIIQhYNR0oVgtpWUSlCJpcGhNQMRo
-        dPV77nsPUkBv8uX/z7nn/vct3mW0QohQYqPEJmKzxBZiKxEmsY2QSfC9EFbR4rEb2kZhaB2TGCGoto1A
-        T17PtWUEFTYPaBblLW6UW90orXs5SAFhTGN2w7P0B57vIm6JYc6iiCuIIcL57TdKGpyggB2sqNYJFzXa
-        ZxZFvBLB9Zq+/ctPqEyDPCCC5T14AUfgF5omFiTmBTWPB9fzUk2etN+3hAt37TwgiqXdfornvh8wDQeQ
-        VeNC3JVOQVf7oRVvcgVge7uAVH0fD9jJUvUD6KTkW8/moCjpwdxnPw5d7/+vNzzxwTjox4mybh6wi53U
-        9sLi/opr3bM4/dCBg5o+nDU5kW58LfgM7qtEn258g9LuD7hj/4RjxY95wG52vKQL1a/8KOzwQtszi8oB
-        n6CcG3Sbtpc8UUleQ8rnKvt9OHK5lQdEs6PqDtyzf0SB9Z2IbWrFX1zRKcEv12VdM0jOt/KAGJZSYMNN
-        urWYkovbvLjaMY0iUj6Y2zQpoGwUtcAyhcLWaaht76HIMYtfkJBVa0/KtSAppxmJHGUzEpRmpKgsUNZN
-        4lzdBDGG7PpxJKusiD/fKLD/1H0HBcgJ4V8Pl4oIIpKICd+XaTysbkdm9SgyCEVOA7bHptfQ3h6+T/D5
-        UKbT6dZBiz8wefSBS6bE/GbEZ9dDtjftEfWiiA2rZoOLYKSQSHmcskoWe8b4r8PC3NpGMPwAsfyU1x3W
-        6XTsLy5SM69xQkG9AAAAAElFTkSuQmCC
-</value>
-  </data>
-  <data name="resource.Image1" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACR0RVh0VGl0
-        bGUAQ29tbWVudDtUb29sdGlwO0hpbnQ7VGlwO0Nsb3Vk08HbyQAAAm9JREFUOE91k0lMU1EUhm8QJ6xY
-        QIWlW4kL3GAoGIIaF7rRDQsFBUUKBLFaQIK0FlocVpo40DQyU1rKIIQhYNR0oVgtpWUSlCJpcGhNQMRo
-        dPV77nsPUkBv8uX/z7nn/vct3mW0QohQYqPEJmKzxBZiKxEmsY2QSfC9EFbR4rEb2kZhaB2TGCGoto1A
-        T17PtWUEFTYPaBblLW6UW90orXs5SAFhTGN2w7P0B57vIm6JYc6iiCuIIcL57TdKGpyggB2sqNYJFzXa
-        ZxZFvBLB9Zq+/ctPqEyDPCCC5T14AUfgF5omFiTmBTWPB9fzUk2etN+3hAt37TwgiqXdfornvh8wDQeQ
-        VeNC3JVOQVf7oRVvcgVge7uAVH0fD9jJUvUD6KTkW8/moCjpwdxnPw5d7/+vNzzxwTjox4mybh6wi53U
-        9sLi/opr3bM4/dCBg5o+nDU5kW58LfgM7qtEn258g9LuD7hj/4RjxY95wG52vKQL1a/8KOzwQtszi8oB
-        n6CcG3Sbtpc8UUleQ8rnKvt9OHK5lQdEs6PqDtyzf0SB9Z2IbWrFX1zRKcEv12VdM0jOt/KAGJZSYMNN
-        urWYkovbvLjaMY0iUj6Y2zQpoGwUtcAyhcLWaaht76HIMYtfkJBVa0/KtSAppxmJHGUzEpRmpKgsUNZN
-        4lzdBDGG7PpxJKusiD/fKLD/1H0HBcgJ4V8Pl4oIIpKICd+XaTysbkdm9SgyCEVOA7bHptfQ3h6+T/D5
-        UKbT6dZBiz8wefSBS6bE/GbEZ9dDtjftEfWiiA2rZoOLYKSQSHmcskoWe8b4r8PC3NpGMPwAsfyU1x3W
-        6XTsLy5SM69xQkG9AAAAAElFTkSuQmCC
-</value>
-  </data>
-</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs
index 5f6ca18..ce6cd35 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs
@@ -1012,36 +1012,43 @@
             {
                 if (!string.IsNullOrEmpty(matching.MatchingModelType))
                 {
+                    visual.UpdatePropStatus(nameof(visual.ModelType), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     visual.ModelType = matching.MatchingModelType;
                     result = true;
                 }
                 if (!string.IsNullOrEmpty(matching.MatchingDbId))
                 {
+                    visual.UpdatePropStatus(nameof(visual.DbId), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     visual.DbId = matching.MatchingDbId;
                     result = true;
                 }
                 if (matching.MatchingMinLevel.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.MinLevel), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     visual.MinLevel = matching.MatchingMinLevel.Value;
                     result = true;
                 }
                 if (matching.MatchingMaxLevel.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.MaxLevel), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     visual.MaxLevel = matching.MatchingMaxLevel.Value;
                     result = true;
                 }
                 if (matching.MatchingDN.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.DN), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     visual.DN = matching.MatchingDN.Value;
                     result = true;
                 }
                 if (matching.MatchingMinVol.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.MinVol), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     visual.MinVol = matching.MatchingMinVol.Value;
                     result = true;
                 }
                 if (matching.MatchingOverFlow.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.OverFlow), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     visual.OverFlow = matching.MatchingOverFlow.Value;
                     result = true;
                 }
@@ -1941,41 +1948,49 @@
             {
                 if (!string.IsNullOrEmpty(matching.MatchingModelType))
                 {
+                    visual.UpdatePropStatus(nameof(visual.ModelType), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.ModelType}");
                     visual.ModelType = matching.MatchingModelType;
                     result = true;
                 }
                 if (!string.IsNullOrEmpty(matching.MatchingDbId))
                 {
+                    visual.UpdatePropStatus(nameof(visual.DbId), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.DbId}");
                     visual.DbId = matching.MatchingDbId;
                     result = true;
                 }
                 if (matching.MatchingRatedQ.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.RatedQ), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.RatedQ}");
                     visual.RatedQ = matching.MatchingRatedQ.Value;
                     result = true;
                 }
                 if (matching.MatchingRatedH.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.RatedH), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.RatedH}");
                     visual.RatedH = matching.MatchingRatedH.Value;
                     result = true;
                 }
                 if (matching.MatchingRatedP.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.RatedP), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.RatedP}");
                     visual.RatedP = matching.MatchingRatedP.Value;
                     result = true;
                 }
                 if (matching.MatchingRatedN.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.RatedN), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.RatedN}");
                     visual.RatedN = matching.MatchingRatedN.Value;
                     result = true;
                 }
                 if (matching.MatchingRatedHz.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.RatedHz), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.RatedHz}");
                     visual.RatedHz = matching.MatchingRatedHz.Value;
                     result = true;
                 }
                 if (matching.MatchingCurrentHz.HasValue)
                 {
+                    visual.UpdatePropStatus(nameof(visual.SpeedRatio), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇锛屽師濮嬫暟鎹�:{visual.SpeedRatio}");
                     visual.SpeedRatio = matching.MatchingCurrentHz.Value / visual.RatedHz;
                     result = true;
                 }
@@ -2000,6 +2015,7 @@
                             hydroInfo.Curves = new List<Yw.Model.HydroCurveInfo>();
                         }
                         hydroInfo.Curves.Add(curveqh);
+                        visual.UpdatePropStatus(nameof(visual.CurveQH), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇");
                         visual.CurveQH = curveqh.Code;
                         result = true;
                     }
@@ -2031,6 +2047,7 @@
                             hydroInfo.Curves = new List<Yw.Model.HydroCurveInfo>();
                         }
                         hydroInfo.Curves.Add(curveqp);
+                        visual.UpdatePropStatus(nameof(visual.CurveQP), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇");
                         visual.CurveQP = curveqp.Code;
                         result = true;
                     }
@@ -2062,6 +2079,7 @@
                             hydroInfo.Curves = new List<Yw.Model.HydroCurveInfo>();
                         }
                         hydroInfo.Curves.Add(curveqe);
+                        visual.UpdatePropStatus(nameof(visual.CurveQE), ePropStatus.Matching, $"閫氳繃鍩虹鏁版嵁鍖归厤淇");
                         visual.CurveQE = curveqe.Code;
                         result = true;
                     }
@@ -2128,38 +2146,38 @@
             {
                 if (!string.IsNullOrEmpty(matching.MatchingModelType))
                 {
-                    visual.ModelType = matching.MatchingModelType;
                     visual.UpdatePropStatus(nameof(visual.ModelType), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                    visual.ModelType = matching.MatchingModelType;
                     result = true;
                 }
                 if (!string.IsNullOrEmpty(matching.MatchingDbId))
                 {
-                    visual.DbId = matching.MatchingDbId;
                     visual.UpdatePropStatus(nameof(visual.DbId), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                    visual.DbId = matching.MatchingDbId;
                     result = true;
                 }
                 if (!string.IsNullOrEmpty(matching.MatchingMaterial))
                 {
-                    visual.Material = matching.MatchingMaterial;
                     visual.UpdatePropStatus(nameof(visual.Material), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                    visual.Material = matching.MatchingMaterial;
                     result = true;
                 }
                 if (matching.MatchingDiameter.HasValue)
                 {
-                    visual.Diameter = matching.MatchingDiameter.Value;
                     visual.UpdatePropStatus(nameof(visual.Diameter), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                    visual.Diameter = matching.MatchingDiameter.Value;
                     result = true;
                 }
                 if (matching.MatchingMinorLoss.HasValue)
                 {
-                    visual.MinorLoss = matching.MatchingMinorLoss.Value;
                     visual.UpdatePropStatus(nameof(visual.MinorLoss), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                    visual.MinorLoss = matching.MatchingMinorLoss.Value;
                     result = true;
                 }
                 if (matching.MatchingValveType.HasValue)
                 {
-                    visual.ValveType = HydroValveTypeEnumHelper.GetValveTypeCode(matching.MatchingValveType.Value);
                     visual.UpdatePropStatus(nameof(visual.ValveType), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                    visual.ValveType = HydroValveTypeEnumHelper.GetValveTypeCode(matching.MatchingValveType.Value);
                     result = true;
                 }
                 switch (visual.ValveType)
@@ -2168,8 +2186,8 @@
                         {
                             if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                             {
-                                visual.ValveSetting = matching.MatchingValveSetting;
                                 visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                                visual.ValveSetting = matching.MatchingValveSetting;
                                 result = true;
                             }
                         }
@@ -2178,8 +2196,8 @@
                         {
                             if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                             {
-                                visual.ValveSetting = matching.MatchingValveSetting;
                                 visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                                visual.ValveSetting = matching.MatchingValveSetting;
                                 result = true;
                             }
                         }
@@ -2188,8 +2206,8 @@
                         {
                             if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                             {
-                                visual.ValveSetting = matching.MatchingValveSetting;
                                 visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                                visual.ValveSetting = matching.MatchingValveSetting;
                                 result = true;
                             }
                         }
@@ -2198,8 +2216,8 @@
                         {
                             if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                             {
-                                visual.ValveSetting = matching.MatchingValveSetting;
                                 visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
+                                visual.ValveSetting = matching.MatchingValveSetting;
                                 result = true;
                             }
                         }
@@ -2437,31 +2455,31 @@
                 if (!string.IsNullOrEmpty(matching.MatchingModelType))
                 {
                     visual.ModelType = matching.MatchingModelType;
-                    visual.UpdatePropStatus(nameof(visual.ModelType), ePropStatus.Normal, "鍖归厤淇");
+                    visual.UpdatePropStatus(nameof(visual.ModelType), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     result = true;
                 }
                 if (!string.IsNullOrEmpty(matching.MatchingDbId))
                 {
                     visual.DbId = matching.MatchingDbId;
-                    visual.UpdatePropStatus(nameof(visual.DbId), ePropStatus.Normal, "鍖归厤淇");
+                    visual.UpdatePropStatus(nameof(visual.DbId), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     result = true;
                 }
                 if (!string.IsNullOrEmpty(matching.MatchingMaterial))
                 {
                     visual.Material = matching.MatchingMaterial;
-                    visual.UpdatePropStatus(nameof(visual.Material), ePropStatus.Normal, "鍖归厤淇");
+                    visual.UpdatePropStatus(nameof(visual.Material), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     result = true;
                 }
                 if (matching.MatchingDiameter.HasValue)
                 {
                     visual.Diameter = matching.MatchingDiameter.Value;
-                    visual.UpdatePropStatus(nameof(visual.Diameter), ePropStatus.Normal, "鍖归厤淇");
+                    visual.UpdatePropStatus(nameof(visual.Diameter), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     result = true;
                 }
                 if (matching.MatchingMinorLoss.HasValue)
                 {
                     visual.MinorLoss = matching.MatchingMinorLoss.Value;
-                    visual.UpdatePropStatus(nameof(visual.MinorLoss), ePropStatus.Normal, "鍖归厤淇");
+                    visual.UpdatePropStatus(nameof(visual.MinorLoss), ePropStatus.Matching, "閫氳繃鍩虹鏁版嵁鍖归厤淇");
                     result = true;
                 }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
index f82c272..16f1b9a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
@@ -62,9 +62,6 @@
 		<Compile Update="02-model\HydroModelMgrPage.cs">
 			<SubType>UserControl</SubType>
 		</Compile>
-		<Compile Update="05-property\HydroVisualPropertyViewCtrl.cs">
-			<SubType>UserControl</SubType>
-		</Compile>
 		<Compile Update="05-property\HydroVisualPropertyCtrl.cs">
 			<SubType>UserControl</SubType>
 		</Compile>

--
Gitblit v1.9.3