lixiaojun
2024-12-02 8486fdaaf94faddbf7e475c660726f9a71b72a4b
修复phart问题
已修改9个文件
已添加6个文件
926 ■■■■■ 文件已修改
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatCtrl.Designer.cs 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatCtrl.cs 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatCtrl.resx 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.Designer.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/10-working/02-visual/03-pump/SetHydroPumpWorkingDlg.Designer.cs 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/10-working/02-visual/03-pump/SetHydroPumpWorkingDlg.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/10-working/02-visual/03-pump/SetHydroPumpWorkingDlg.resx 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListItemStateViewModel.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.Designer.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.resx 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatCtrl.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
namespace HStation.WinFrmUI
{
    partial class SimulationPumpFeatCtrl
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Component Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
            hydroPumpListStateEditCtrl1 = new HydroPumpListStateEditCtrl();
            Root = new DevExpress.XtraLayout.LayoutControlGroup();
            layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
            splitterItem1 = new DevExpress.XtraLayout.SplitterItem();
            panelControl1 = new PanelControl();
            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
            pumpOperationChart1 = new Yw.WinFrmUI.Phart.PumpOperationChart();
            ((ISupportInitialize)layoutControl1).BeginInit();
            layoutControl1.SuspendLayout();
            ((ISupportInitialize)Root).BeginInit();
            ((ISupportInitialize)layoutControlGroup1).BeginInit();
            ((ISupportInitialize)layoutControlItem1).BeginInit();
            ((ISupportInitialize)splitterItem1).BeginInit();
            ((ISupportInitialize)panelControl1).BeginInit();
            panelControl1.SuspendLayout();
            ((ISupportInitialize)layoutControlItem3).BeginInit();
            SuspendLayout();
            //
            // layoutControl1
            //
            layoutControl1.Controls.Add(panelControl1);
            layoutControl1.Controls.Add(hydroPumpListStateEditCtrl1);
            layoutControl1.Dock = DockStyle.Fill;
            layoutControl1.Location = new Point(0, 0);
            layoutControl1.Name = "layoutControl1";
            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(1055, 304, 650, 400);
            layoutControl1.Root = Root;
            layoutControl1.Size = new Size(952, 597);
            layoutControl1.TabIndex = 0;
            layoutControl1.Text = "layoutControl1";
            //
            // hydroPumpListStateEditCtrl1
            //
            hydroPumpListStateEditCtrl1.Location = new Point(0, 22);
            hydroPumpListStateEditCtrl1.Name = "hydroPumpListStateEditCtrl1";
            hydroPumpListStateEditCtrl1.Size = new Size(217, 575);
            hydroPumpListStateEditCtrl1.TabIndex = 4;
            //
            // Root
            //
            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
            Root.GroupBordersVisible = false;
            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlGroup1, splitterItem1, layoutControlItem3 });
            Root.Name = "Root";
            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
            Root.Size = new Size(952, 597);
            Root.TextVisible = false;
            //
            // layoutControlGroup1
            //
            layoutControlGroup1.GroupStyle = DevExpress.Utils.GroupStyle.Title;
            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1 });
            layoutControlGroup1.Location = new Point(0, 0);
            layoutControlGroup1.Name = "layoutControlGroup1";
            layoutControlGroup1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
            layoutControlGroup1.Size = new Size(217, 597);
            layoutControlGroup1.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
            layoutControlGroup1.Text = "水泵列表";
            //
            // layoutControlItem1
            //
            layoutControlItem1.Control = hydroPumpListStateEditCtrl1;
            layoutControlItem1.Location = new Point(0, 0);
            layoutControlItem1.Name = "layoutControlItem1";
            layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
            layoutControlItem1.Size = new Size(217, 575);
            layoutControlItem1.TextSize = new Size(0, 0);
            layoutControlItem1.TextVisible = false;
            //
            // splitterItem1
            //
            splitterItem1.AllowHotTrack = true;
            splitterItem1.Location = new Point(217, 0);
            splitterItem1.Name = "splitterItem1";
            splitterItem1.Size = new Size(10, 597);
            //
            // panelControl1
            //
            panelControl1.BorderStyle = BorderStyles.Simple;
            panelControl1.Controls.Add(pumpOperationChart1);
            panelControl1.Location = new Point(227, 0);
            panelControl1.Name = "panelControl1";
            panelControl1.Padding = new Padding(1);
            panelControl1.Size = new Size(725, 597);
            panelControl1.TabIndex = 7;
            //
            // layoutControlItem3
            //
            layoutControlItem3.Control = panelControl1;
            layoutControlItem3.Location = new Point(227, 0);
            layoutControlItem3.Name = "layoutControlItem3";
            layoutControlItem3.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
            layoutControlItem3.Size = new Size(725, 597);
            layoutControlItem3.TextSize = new Size(0, 0);
            layoutControlItem3.TextVisible = false;
            //
            // pumpOperationChart1
            //
            pumpOperationChart1.Dock = DockStyle.Fill;
            pumpOperationChart1.LineNameVisible = true;
            pumpOperationChart1.LineVisible = false;
            pumpOperationChart1.Location = new Point(3, 3);
            pumpOperationChart1.Margin = new Padding(2, 2, 2, 2);
            pumpOperationChart1.Name = "pumpOperationChart1";
            pumpOperationChart1.Size = new Size(719, 591);
            pumpOperationChart1.TabIndex = 0;
            //
            // SimulationPumpFeatCtrl
            //
            AutoScaleDimensions = new SizeF(7F, 14F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(layoutControl1);
            Name = "SimulationPumpFeatCtrl";
            Size = new Size(952, 597);
            ((ISupportInitialize)layoutControl1).EndInit();
            layoutControl1.ResumeLayout(false);
            ((ISupportInitialize)Root).EndInit();
            ((ISupportInitialize)layoutControlGroup1).EndInit();
            ((ISupportInitialize)layoutControlItem1).EndInit();
            ((ISupportInitialize)splitterItem1).EndInit();
            ((ISupportInitialize)panelControl1).EndInit();
            panelControl1.ResumeLayout(false);
            ((ISupportInitialize)layoutControlItem3).EndInit();
            ResumeLayout(false);
        }
        #endregion
        private DevExpress.XtraLayout.LayoutControl layoutControl1;
        private HydroPumpListStateEditCtrl hydroPumpListStateEditCtrl1;
        private DevExpress.XtraLayout.LayoutControlGroup Root;
        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
        private DevExpress.XtraLayout.SplitterItem splitterItem1;
        private PanelControl panelControl1;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
        private Yw.WinFrmUI.Phart.PumpOperationChart pumpOperationChart1;
    }
}
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatCtrl.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Yw.Geometry;
using Yw.Pump;
using Yw.WinFrmUI.Phart;
namespace HStation.WinFrmUI
{
    public partial class SimulationPumpFeatCtrl : DevExpress.XtraEditors.XtraUserControl
    {
        public SimulationPumpFeatCtrl()
        {
            InitializeComponent();
            this.layoutControl1.SetupLayoutControl();
            this.hydroPumpListStateEditCtrl1.SelectedChangedEvent += HydroPumpListStateEditCtrl1_SelectedChangedEvent;
        }
        /// <summary>
        ///
        /// </summary>
        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
        {
            this.hydroPumpListStateEditCtrl1.SetBindingData(hydroInfo);
        }
        private void HydroPumpListStateEditCtrl1_SelectedChangedEvent(HydroPumpListItemStateViewModel obj)
        {
            var vm = CreateViewModel(obj);
            this.pumpOperationChart1.SetBindingData(vm);
        }
        //创建
        private PumpOperationViewModel CreateViewModel(HydroPumpListItemStateViewModel state)
        {
            var vm = new PumpOperationViewModel();
            vm.Id = state.Code;
            vm.Name = state.Name;
            vm.RatedQ = state.Vmo.RatedQ.HasValue ? state.Vmo.RatedQ.Value : 0;
            vm.RatedH = state.Vmo.RatedH.HasValue ? state.Vmo.RatedH.Value : 0;
            vm.RatedP = state.Vmo.RatedP;
            vm.RatedN = state.Vmo.RatedN.HasValue ? state.Vmo.RatedN.Value : 0;
            vm.RatedHz = state.Vmo.RatedHz;
            vm.CurrentHz = state.CurrentHz;
            vm.CurrentN = Math.Round(state.CurrentHz / state.Vmo.RatedHz * vm.RatedN, 1);
            vm.CurrentStatus = state.RunStatus;
            var curveqh = state.HydroInfo.Curves?.Find(x => x.Code == state.Vmo.CurveQH);
            if (curveqh != null)
            {
                var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
                if (qh_pts != null && qh_pts.Count > 3)
                {
                    vm.CurveQH = new CubicSpline2d(qh_pts);
                    var qh_current_pts = qh_pts.GetQHPointListByN(state.Vmo.RatedHz, state.CurrentHz);
                    vm.CurrentCurveQH = new CubicSpline2d(qh_current_pts);
                }
            }
            var curveqp = state.HydroInfo.Curves?.Find(x => x.Code == state.Vmo.CurveQP);
            if (curveqp != null)
            {
                var qppts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
                if (qppts != null && qppts.Count > 3)
                {
                    vm.CurveQP = new CubicSpline2d(qppts);
                    var sqppts = qppts.GetQHPointListByN(state.Vmo.RatedHz, state.CurrentHz);
                    vm.CurrentCurveQP = new CubicSpline2d(sqppts);
                }
            }
            var curveqe = state.HydroInfo.Curves?.Find(x => x.Code == state.Vmo.CurveQE);
            if (curveqe != null)
            {
                var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
                if (qepts != null && qepts.Count > 3)
                {
                    vm.CurveQE = new CubicSpline2d(qepts);
                    var sqepts = qepts.GetQHPointListByN(state.Vmo.RatedHz, state.CurrentHz);
                    vm.CurrentCurveQE = new CubicSpline2d(sqepts);
                }
            }
            return vm;
        }
    }
}
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatCtrl.resx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
<?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>
</root>
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.Designer.cs
@@ -31,7 +31,7 @@
            ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl();
            ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
            ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
            hydroPumpListStateGridCtrl1 = new HydroPumpListStateEditCtrl();
            simulationPumpFeatCtrl1 = new SimulationPumpFeatCtrl();
            ((ISupportInitialize)ribbon).BeginInit();
            SuspendLayout();
            // 
@@ -58,20 +58,20 @@
            ribbonPageGroup1.Name = "ribbonPageGroup1";
            ribbonPageGroup1.Text = "ribbonPageGroup1";
            // 
            // hydroPumpListStateGridCtrl1
            // simulationPumpFeatCtrl1
            // 
            hydroPumpListStateGridCtrl1.Dock = DockStyle.Left;
            hydroPumpListStateGridCtrl1.Location = new Point(0, 32);
            hydroPumpListStateGridCtrl1.Name = "hydroPumpListStateGridCtrl1";
            hydroPumpListStateGridCtrl1.Size = new Size(295, 601);
            hydroPumpListStateGridCtrl1.TabIndex = 1;
            simulationPumpFeatCtrl1.Dock = DockStyle.Fill;
            simulationPumpFeatCtrl1.Location = new Point(0, 32);
            simulationPumpFeatCtrl1.Name = "simulationPumpFeatCtrl1";
            simulationPumpFeatCtrl1.Size = new Size(996, 601);
            simulationPumpFeatCtrl1.TabIndex = 3;
            // 
            // SimulationPumpFeatDlg
            // 
            AutoScaleDimensions = new SizeF(7F, 14F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(996, 633);
            Controls.Add(hydroPumpListStateGridCtrl1);
            Controls.Add(simulationPumpFeatCtrl1);
            Controls.Add(ribbon);
            FormBorderStyle = FormBorderStyle.SizableToolWindow;
            Name = "SimulationPumpFeatDlg";
@@ -89,6 +89,6 @@
        private DevExpress.XtraBars.Ribbon.RibbonControl ribbon;
        private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
        private HydroPumpListStateEditCtrl hydroPumpListStateGridCtrl1;
        private SimulationPumpFeatCtrl simulationPumpFeatCtrl1;
    }
}
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/02-feat/SimulationPumpFeatDlg.cs
@@ -10,7 +10,7 @@
        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
        {
            this.hydroPumpListStateGridCtrl1.SetBindingData(hydroInfo);
            this.simulationPumpFeatCtrl1.SetBindingData(hydroInfo);
        }
WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
@@ -199,6 +199,9 @@
    <Compile Update="03-simulation\11-pump\01-parallel\SimulationPumpParallelCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="03-simulation\11-pump\02-feat\SimulationPumpFeatCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="03-simulation\XhsProjectSimulationMgrPage.cs">
      <SubType>UserControl</SubType>
    </Compile>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/10-working/02-visual/03-pump/SetHydroPumpWorkingDlg.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
namespace Yw.WinFrmUI
{
    partial class SetHydroPumpWorkingDlg
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            components = new Container();
            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
            generalOkAndCancelCtrl1 = new GeneralOkAndCancelCtrl();
            txtCurrentHz = new DevExpress.XtraEditors.TextEdit();
            imgCmbLinkStatus = new DevExpress.XtraEditors.ImageComboBoxEdit();
            Root = new DevExpress.XtraLayout.LayoutControlGroup();
            layoutControlItem10 = new DevExpress.XtraLayout.LayoutControlItem();
            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
            dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(components);
            ((ISupportInitialize)layoutControl1).BeginInit();
            layoutControl1.SuspendLayout();
            ((ISupportInitialize)txtCurrentHz.Properties).BeginInit();
            ((ISupportInitialize)imgCmbLinkStatus.Properties).BeginInit();
            ((ISupportInitialize)Root).BeginInit();
            ((ISupportInitialize)layoutControlItem10).BeginInit();
            ((ISupportInitialize)layoutControlItem2).BeginInit();
            ((ISupportInitialize)layoutControlItem1).BeginInit();
            ((ISupportInitialize)dxErrorProvider1).BeginInit();
            SuspendLayout();
            //
            // layoutControl1
            //
            layoutControl1.Controls.Add(generalOkAndCancelCtrl1);
            layoutControl1.Controls.Add(txtCurrentHz);
            layoutControl1.Controls.Add(imgCmbLinkStatus);
            layoutControl1.Dock = DockStyle.Fill;
            layoutControl1.Location = new Point(0, 0);
            layoutControl1.Name = "layoutControl1";
            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(670, 266, 650, 400);
            layoutControl1.Root = Root;
            layoutControl1.Size = new Size(385, 74);
            layoutControl1.TabIndex = 1;
            layoutControl1.Text = "layoutControl1";
            //
            // generalOkAndCancelCtrl1
            //
            generalOkAndCancelCtrl1.ButtonCancelMaxSize = new Size(100, 26);
            generalOkAndCancelCtrl1.ButtonCancelMinSize = new Size(100, 26);
            generalOkAndCancelCtrl1.ButtonOkMaxSize = new Size(100, 26);
            generalOkAndCancelCtrl1.ButtonOkMinSize = new Size(100, 26);
            generalOkAndCancelCtrl1.Location = new Point(12, 36);
            generalOkAndCancelCtrl1.Name = "generalOkAndCancelCtrl1";
            generalOkAndCancelCtrl1.Size = new Size(361, 26);
            generalOkAndCancelCtrl1.TabIndex = 3;
            //
            // txtCurrentHz
            //
            txtCurrentHz.Location = new Point(258, 12);
            txtCurrentHz.Name = "txtCurrentHz";
            txtCurrentHz.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.False;
            txtCurrentHz.Properties.DisplayFormat.FormatString = "{0}hz";
            txtCurrentHz.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom;
            txtCurrentHz.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
            txtCurrentHz.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
            txtCurrentHz.Properties.NullValuePrompt = "hz";
            txtCurrentHz.Size = new Size(115, 20);
            txtCurrentHz.StyleController = layoutControl1;
            txtCurrentHz.TabIndex = 2;
            //
            // imgCmbLinkStatus
            //
            imgCmbLinkStatus.Location = new Point(76, 12);
            imgCmbLinkStatus.Name = "imgCmbLinkStatus";
            imgCmbLinkStatus.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo) });
            imgCmbLinkStatus.Size = new Size(114, 20);
            imgCmbLinkStatus.StyleController = layoutControl1;
            imgCmbLinkStatus.TabIndex = 0;
            //
            // Root
            //
            Root.AppearanceItemCaption.Options.UseTextOptions = true;
            Root.AppearanceItemCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
            Root.GroupBordersVisible = false;
            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem10, layoutControlItem2, layoutControlItem1 });
            Root.Name = "Root";
            Root.Size = new Size(385, 74);
            Root.TextVisible = false;
            //
            // layoutControlItem10
            //
            layoutControlItem10.Control = imgCmbLinkStatus;
            layoutControlItem10.Location = new Point(0, 0);
            layoutControlItem10.Name = "layoutControlItem10";
            layoutControlItem10.Size = new Size(182, 24);
            layoutControlItem10.Text = "开机状态:";
            layoutControlItem10.TextSize = new Size(52, 14);
            //
            // layoutControlItem2
            //
            layoutControlItem2.Control = generalOkAndCancelCtrl1;
            layoutControlItem2.Location = new Point(0, 24);
            layoutControlItem2.Name = "layoutControlItem2";
            layoutControlItem2.Size = new Size(365, 30);
            layoutControlItem2.TextSize = new Size(0, 0);
            layoutControlItem2.TextVisible = false;
            //
            // layoutControlItem1
            //
            layoutControlItem1.Control = txtCurrentHz;
            layoutControlItem1.Location = new Point(182, 0);
            layoutControlItem1.Name = "layoutControlItem1";
            layoutControlItem1.Size = new Size(183, 24);
            layoutControlItem1.Text = "设定频率:";
            layoutControlItem1.TextSize = new Size(52, 14);
            //
            // dxErrorProvider1
            //
            dxErrorProvider1.ContainerControl = this;
            //
            // SetHydroPumpWorkingDlg
            //
            AutoScaleDimensions = new SizeF(7F, 14F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(385, 74);
            Controls.Add(layoutControl1);
            MaximizeBox = false;
            Name = "SetHydroPumpWorkingDlg";
            StartPosition = FormStartPosition.CenterParent;
            Text = "设置";
            ((ISupportInitialize)layoutControl1).EndInit();
            layoutControl1.ResumeLayout(false);
            ((ISupportInitialize)txtCurrentHz.Properties).EndInit();
            ((ISupportInitialize)imgCmbLinkStatus.Properties).EndInit();
            ((ISupportInitialize)Root).EndInit();
            ((ISupportInitialize)layoutControlItem10).EndInit();
            ((ISupportInitialize)layoutControlItem2).EndInit();
            ((ISupportInitialize)layoutControlItem1).EndInit();
            ((ISupportInitialize)dxErrorProvider1).EndInit();
            ResumeLayout(false);
        }
        #endregion
        private DevExpress.XtraLayout.LayoutControl layoutControl1;
        private DevExpress.XtraLayout.LayoutControlGroup Root;
        private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
        private DevExpress.XtraEditors.ImageComboBoxEdit imgCmbLinkStatus;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem10;
        private DevExpress.XtraEditors.TextEdit txtCurrentHz;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
        private GeneralOkAndCancelCtrl generalOkAndCancelCtrl1;
        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/10-working/02-visual/03-pump/SetHydroPumpWorkingDlg.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
namespace Yw.WinFrmUI
{
    public partial class SetHydroPumpWorkingDlg : DevExpress.XtraEditors.XtraForm
    {
        public SetHydroPumpWorkingDlg()
        {
            InitializeComponent();
            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
            this.layoutControl1.SetupLayoutControl();
            this.generalOkAndCancelCtrl1.OkEvent += GeneralOkAndCancelCtrl1_OkEvent;
            InitialLinkStatus();
        }
        /// <summary>
        /// é‡è½½æ•°æ®äº‹ä»¶
        /// </summary>
        public event Action<HydroWorkingPumpViewModel> ReloadDataEvent;
        private HydroWorkingPumpViewModel _working = null;//工况
        /// <summary>
        /// ç»‘定数据
        /// </summary>
        public void SetBindingData(Yw.Model.HydroPumpInfo visual)
        {
            if (visual == null)
            {
                return;
            }
            var working = new HydroWorkingPumpViewModel(visual);
            SetBindingData(working);
        }
        /// <summary>
        /// ç»‘定数据
        /// </summary>
        public void SetBindingData(HydroWorkingPumpViewModel working)
        {
            _working = working;
            this.imgCmbLinkStatus.EditValue = working.LinkStatus;
            this.txtCurrentHz.EditValue = working.CurrentHz;
        }
        //初始化管段状态
        private void InitialLinkStatus()
        {
            this.imgCmbLinkStatus.Properties.BeginUpdate();
            this.imgCmbLinkStatus.Properties.Items.Clear();
            this.imgCmbLinkStatus.Properties.Items.Add(HydroLinkStatusHelper.GetStatusName(Yw.Hydro.LinkStatus.Open), Yw.Hydro.LinkStatus.Open, -1);
            this.imgCmbLinkStatus.Properties.Items.Add(HydroLinkStatusHelper.GetStatusName(Yw.Hydro.LinkStatus.Closed), Yw.Hydro.LinkStatus.Closed, -1);
            this.imgCmbLinkStatus.Properties.EndUpdate();
        }
        //验证
        private bool Valid()
        {
            this.dxErrorProvider1.ClearErrors();
            if (this.imgCmbLinkStatus.EditValue == null)
            {
                this.dxErrorProvider1.SetError(this.imgCmbLinkStatus, "必选项");
                return false;
            }
            if (this.txtCurrentHz.EditValue == null)
            {
                this.dxErrorProvider1.SetError(this.txtCurrentHz, "必填项");
                return false;
            }
            return true;
        }
        //确定
        private void GeneralOkAndCancelCtrl1_OkEvent()
        {
            if (_working == null)
            {
                return;
            }
            if (!Valid())
            {
                return;
            }
            _working.LinkStatus = this.imgCmbLinkStatus.EditValue.ToString();
            _working.CurrentHz = double.Parse(this.txtCurrentHz.EditValue.ToString());
            this.ReloadDataEvent?.Invoke(_working);
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/10-working/02-visual/03-pump/SetHydroPumpWorkingDlg.resx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
<?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="dxErrorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
</root>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListItemStateViewModel.cs
@@ -20,7 +20,7 @@
        /// <summary>
        /// 
        /// </summary>
        public HydroPumpListItemStateViewModel(Yw.Model.HydroPumpInfo rhs)
        public HydroPumpListItemStateViewModel(Yw.Model.HydroPumpInfo rhs, Yw.Model.HydroModelInfo hydroInfo)
        {
            this.Code = rhs.Code;
            this.Name = rhs.Name;
@@ -38,6 +38,7 @@
            this.Description = rhs.Description;
            this.Vmo = rhs;
            this.HydroInfo = hydroInfo;
        }
        /// <summary>
@@ -80,5 +81,10 @@
        /// vmo
        /// </summary>
        public Yw.Model.HydroPumpInfo Vmo { get; set; }
        /// <summary>
        ///
        /// </summary>
        public Yw.Model.HydroModelInfo HydroInfo { get; set; }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.Designer.cs
@@ -29,6 +29,8 @@
        private void InitializeComponent()
        {
            components = new Container();
            DevExpress.Utils.SimpleContextButton simpleContextButton1 = new DevExpress.Utils.SimpleContextButton();
            ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroPumpListStateEditCtrl));
            DevExpress.XtraEditors.TableLayout.ItemTemplateBase itemTemplateBase1 = new DevExpress.XtraEditors.TableLayout.ItemTemplateBase();
            DevExpress.XtraEditors.TableLayout.TableColumnDefinition tableColumnDefinition1 = new DevExpress.XtraEditors.TableLayout.TableColumnDefinition();
            DevExpress.XtraEditors.TableLayout.TableColumnDefinition tableColumnDefinition2 = new DevExpress.XtraEditors.TableLayout.TableColumnDefinition();
@@ -49,6 +51,14 @@
            // 
            // imageListBoxControl1
            // 
            simpleContextButton1.AlignmentOptions.Panel = DevExpress.Utils.ContextItemPanel.Center;
            simpleContextButton1.AlignmentOptions.Position = DevExpress.Utils.ContextItemPosition.Far;
            simpleContextButton1.Id = new Guid("ee22239a-6899-40f3-bbe4-7a30d39c9f1d");
            simpleContextButton1.ImageOptionsCollection.ItemNormal.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("resource.SvgImage");
            simpleContextButton1.ImageOptionsCollection.ItemNormal.SvgImageSize = new Size(24, 24);
            simpleContextButton1.Name = "simpleContextButton1";
            simpleContextButton1.ToolTip = "设置";
            imageListBoxControl1.ContextButtons.Add(simpleContextButton1);
            imageListBoxControl1.DataSource = hydroPumpListItemStateViewModelBindingSource;
            imageListBoxControl1.Dock = DockStyle.Fill;
            imageListBoxControl1.ItemHeight = 34;
@@ -60,7 +70,7 @@
            tableColumnDefinition1.Length.Value = 40D;
            tableColumnDefinition2.Length.Value = 210D;
            tableColumnDefinition3.Length.Type = DevExpress.XtraEditors.TableLayout.TableDefinitionLengthType.Pixel;
            tableColumnDefinition3.Length.Value = 66D;
            tableColumnDefinition3.Length.Value = 80D;
            itemTemplateBase1.Columns.Add(tableColumnDefinition1);
            itemTemplateBase1.Columns.Add(tableColumnDefinition2);
            itemTemplateBase1.Columns.Add(tableColumnDefinition3);
@@ -82,13 +92,15 @@
            templatedItemElement3.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
            templatedItemElement3.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
            templatedItemElement3.Text = "CurrentHz";
            templatedItemElement3.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
            templatedItemElement3.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleLeft;
            itemTemplateBase1.Elements.Add(templatedItemElement1);
            itemTemplateBase1.Elements.Add(templatedItemElement2);
            itemTemplateBase1.Elements.Add(templatedItemElement3);
            itemTemplateBase1.Name = "template1";
            itemTemplateBase1.Rows.Add(tableRowDefinition1);
            imageListBoxControl1.Templates.Add(itemTemplateBase1);
            imageListBoxControl1.SelectedValueChanged += imageListBoxControl1_SelectedValueChanged;
            imageListBoxControl1.ContextButtonClick += imageListBoxControl1_ContextButtonClick;
            // 
            // HydroPumpListStateEditCtrl
            // 
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.cs
@@ -19,6 +19,11 @@
            InitializeComponent();
        }
        /// <summary>
        /// é€‰æ‹©æ”¹å˜äº‹ä»¶
        /// </summary>
        public event Action<HydroPumpListItemStateViewModel> SelectedChangedEvent;
        private BindingList<HydroPumpListItemStateViewModel> _allBindingList = null;
        /// <summary>
@@ -26,15 +31,15 @@
        /// </summary>
        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
        {
            SetBindingData(hydroInfo?.Pumps);
            SetBindingData(hydroInfo?.Pumps, hydroInfo);
        }
        /// <summary>
        /// ç»‘定数据
        /// </summary>
        public void SetBindingData(List<Yw.Model.HydroPumpInfo> allPumpList)
        public void SetBindingData(List<Yw.Model.HydroPumpInfo> allPumpList, Yw.Model.HydroModelInfo hydroInfo)
        {
            var list = allPumpList?.Select(x => new HydroPumpListItemStateViewModel(x)).ToList();
            var list = allPumpList?.Select(x => new HydroPumpListItemStateViewModel(x, hydroInfo)).ToList();
            SetBindingData(list);
        }
@@ -49,6 +54,60 @@
            this.hydroPumpListItemStateViewModelBindingSource.ResetBindings(false);
        }
        /// <summary>
        /// èŽ·å–å·¥å†µåˆ—è¡¨
        /// </summary>
        public List<HydroWorkingPumpViewModel> GetWorkingList()
        {
            return _allBindingList?.Select(x => new HydroWorkingPumpViewModel()
            {
                Code = x.Code,
                LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed,
                CurrentHz = x.CurrentHz
            }).ToList();
        }
        //
        private void imageListBoxControl1_ContextButtonClick(object sender, DevExpress.Utils.ContextItemClickEventArgs e)
        {
            var vm = e.DataItem as HydroPumpListItemStateViewModel;
            if (vm == null)
            {
                return;
            }
            var working = new HydroWorkingPumpViewModel()
            {
                Code = vm.Code,
                LinkStatus = vm.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed,
                CurrentHz = vm.CurrentHz
            };
            var dlg = new SetHydroPumpWorkingDlg();
            dlg.ReloadDataEvent += (rhs) =>
            {
                vm.RunStatus = rhs.LinkStatus == Yw.Hydro.PumpStatus.Open;
                vm.CurrentHz = rhs.CurrentHz;
                this.hydroPumpListItemStateViewModelBindingSource.ResetBindings(false);
            };
            dlg.SetBindingData(working);
            dlg.ShowDialog();
        }
        //选择改变
        private void imageListBoxControl1_SelectedValueChanged(object sender, EventArgs e)
        {
            if (_allBindingList == null || _allBindingList.Count < 1)
            {
                return;
            }
            var item = this.imageListBoxControl1.SelectedItem;
            var vm = item as HydroPumpListItemStateViewModel;
            if (vm == null)
            {
                return;
            }
            this.SelectedChangedEvent?.Invoke(vm);
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/HydroPumpListStateEditCtrl.resx
@@ -120,4 +120,34 @@
  <metadata name="hydroPumpListItemStateViewModelBindingSource.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="resource.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABwFAAAC77u/
        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3
        RDc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9CgkuR3JlZW57ZmlsbDojMDM5QzIzO30KCS5zdDB7b3Bh
        Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tm
        aWxsOiNGRkIxMTU7fQo8L3N0eWxlPg0KICA8ZyAvPg0KICA8ZyBpZD0iUmVuYW1lXzFfIj4NCiAgICA8
        cGF0aCBkPSJNMi4xLDE2aDIuMmwwLjYtMi4zaDMuMkw4LjgsMTZIMTFMNy44LDZINS40TDIuMSwxNnog
        TTYuNCw4LjdjMC4xLTAuMywwLjEtMC42LDAuMS0wLjloMC4xICAgYzAsMC4zLDAuMSwwLjYsMC4xLDAu
        OWwxLDMuM0g1LjRMNi40LDguN3ogTTE3LjUsMTAuNmMwLjYtMC4yLDEuMS0wLjUsMS41LTAuOWMwLjQt
        MC40LDAuNi0wLjksMC42LTEuNGMwLTAuNy0wLjMtMS4zLTAuOS0xLjcgICBDMTguMSw2LjIsMTcuMSw2
        LDE1LjksNkgxMnY5LjlWMTZoNGMxLjIsMCwyLjItMC4yLDIuOS0wLjhDMTkuNywxNC42LDIwLDE0LDIw
        LDEzYzAtMC42LTAuMi0xLjItMC43LTEuNiAgIEMxOC45LDExLDE4LjMsMTAuNywxNy41LDEwLjZ6IE0x
        NC40LDcuN2gwLjljMS4xLDAsMS43LDAuNCwxLjcsMS4xYzAsMC40LTAuMSwwLjctMC40LDAuOUMxNi40
        LDkuOSwxNiwxMCwxNS41LDEwaC0xLjFWNy43eiAgICBNMTcsMTMuOGMtMC4zLDAuMi0wLjgsMC40LTEu
        MywwLjRoLTEuM3YtMi42aDEuM2MwLjUsMCwwLjksMC4xLDEuMywwLjNjMC4zLDAuMiwwLjUsMC42LDAu
        NSwwLjlDMTcuNSwxMy4zLDE3LjQsMTMuNiwxNywxMy44eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxw
        YXRoIGQ9Ik0yNywxOWwtOCw4bC00LTRsOC04TDI3LDE5eiBNMjgsMThsMS43LTEuN2MwLjQtMC40LDAu
        NC0xLDAtMS4zTDI3LDEyLjNjLTAuNC0wLjQtMS0wLjQtMS4zLDBMMjQsMTRMMjgsMTh6ICAgIE0xNCwy
        NHY0aDRMMTQsMjR6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
  </data>
</root>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
@@ -146,6 +146,9 @@
        <Compile Update="06-visual\19-compressor\SetHydroCompressorListDlg.cs">
            <SubType>Form</SubType>
        </Compile>
        <Compile Update="10-working\02-visual\03-pump\SetHydroPumpWorkingDlg.cs">
          <SubType>Form</SubType>
        </Compile>
        <Compile Update="10-working\02-visual\05-resistanse\SetHydroWorkingResistanceCtrl.cs">
            <SubType>UserControl</SubType>
        </Compile>
WinFrmUI/Yw.WinFrmUI.Phart.Core/Yw.WinFrmUI.Phart.Core.csproj
@@ -51,7 +51,7 @@
  <ItemGroup>
    <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
    <PackageReference Include="NPOI" Version="2.7.1" />
    <PackageReference Include="Yw.Pump.Core" Version="3.1.2" />
    <PackageReference Include="Yw.Pump.Core" Version="3.1.5" />
  </ItemGroup>
  <ItemGroup>