Przeglądaj źródła

添加站点回退功能

callm 6 dni temu
rodzic
commit
1591d91e0b

+ 42 - 0
UAS_MES_YDCY/.workbuddy/memory/2026-09-10.md

@@ -0,0 +1,42 @@
+# 2026-09-10
+
+## 新增界面 Make_StepType(FunctionCode/Make)
+
+- 需求:在 Make 目录新增一个界面,含「序列号」带标题输入框 + 一个从 `steptype` 表取值的下拉框。
+- 产出文件:
+  - `FunctionCode/Make/Make_StepType.cs`(`namespace UAS_MES_NEW.Make`,继承 `Form`)
+  - `FunctionCode/Make/Make_StepType.Designer.cs`
+  - `FunctionCode/Make/Make_StepType.resx`(拷贝自 Make_SplitBoard.resx 空模板)
+- `UAS_MES_YDCY.csproj` 已注册:2 个 `<Compile>`(.cs 带 `<SubType>Form</SubType>`,.Designer.cs 带 `<DependentUpon>`)+ 1 个 `<EmbeddedResource>`。
+- 绑定方式(与仓库现有写法一致):
+  `dh.ExecuteSql("select STP_CODE,STP_NAME from steptype order by STP_CODE","select")` → `ComboBox.DataSource` + `DisplayMember=STP_NAME` / `ValueMember=STP_CODE`,并插入「请选择」空白行。
+- 约定确认:`steptype` 表值字段 `STP_CODE`、显示字段 `STP_NAME`(用户确认;最初误写成 st_code/st_name,已修正)。
+- 若要出现在左侧导航菜单,需在数据库 `CS$SYSNAVATION` 表插入一行,`sn_classname` 填 `Make.Make_StepType`(运行时按 `UAS_MES_NEW.` + sn_classname 反射创建),权限配 `CS$USERGROUPPOWER`。代码侧无需改动。
+
+## 环境限制
+
+- 该项目为 .NET Framework + packages.config 老工程,`dotnet build` 在 NuGet restore 阶段报 `Value cannot be null (Parameter 'path1')`;沙箱拦截 MSBuild.exe/csc.exe,因此无法在本地跑编译验证,只能人工核对 API。
+
+## 后续调整(Make_StepType)
+
+- 字段修正:`steptype` 表用 `STP_CODE`(值)/ `STP_NAME`(显示),SQL、`NewRow` 赋值、`DisplayMember`/`ValueMember` 全部同步。
+- 交互调整:删除「查询」按钮(`SearchBtn`),查询逻辑移入 `sncode_KeyDown` 的 Enter 分支——扫码回车即校验「序列号非空 + 工序类型已选」并执行查询,完成后 `sncode.Clear()` 保持焦点便于连续扫码。这是本项目的通用扫码交互范式(同 Make_OutBoxSnCheck)。
+- 布局对齐:标签与输入框统一为 `微软雅黑 14F`,按垂直中心对齐(标签 autoSize 高 32、输入框高 40,中心同高);两行中心 y=86 / y=176,行距 90;两个输入框左边缘统一 x=192。要点:标题与输入框字号必须一致,否则视觉上会明显错位。
+
+## 布局经验(WinForms 手工摆控件)
+
+- `Label.AutoSize = true` 时写进 Designer 的 Size 只是设计期快照,运行时按字体度量重算,因此**只靠 Location 对齐**——按中心对齐要算 `labelTop + labelHeight/2 == inputTop + inputHeight/2`。
+- `ComboBox` 在 `DropDownList` 样式下**高度由字体决定,Size.Height 会被忽略**,Top 有效;对齐时按估高 33~36(14F 微软雅黑)定位即可,误差 ≤1px。
+
+## 业务逻辑(SN 回车查询链)
+
+`sncode_KeyDown` Enter 分支(保留「SN 非空 + 工序类型已选」两个限制)之后:
+
+1. `select ms_id,ms_craftcode,ms_prodcode from makeserial where ms_sncode='<SN>'` → 取 `msId` / `craftCode` / `prodCode`。
+2. `select cd_stepcode from craft left join craftdetail on cd_crid=cr_id where cr_code='<craftCode>' and cr_prodcode='<prodCode>' and CD_STEPTYPE='<STP_CODE>' order by cd_detno` → 第一行即 `cd_detno` 最小的 `cd_stepcode`。
+3. 回写:`update makeserial set ms_nextstepcode='<cdStepCode>' where ms_id='<msId>'`(`ExecuteSql(..., "update")`,与仓库 `Make_ColorBoxWeigh` 等既有写法一致)。
+4. 结果存入字段 `cdStepCode` 并输出到 OperateResult。
+
+关联关系已确认:`craftdetail.cd_crid = craft.cr_id`;`craft.cr_code = makeserial.ms_craftcode and craft.cr_prodcode = makeserial.ms_prodcode`(与 `LogicHandler.cs:716` 现有写法一致)。
+
+已把「UAS MES WinForms 新增界面」的完整流程沉淀为技能 `~/.workbuddy/skills/uas-mes-winforms-form/SKILL.md`。

+ 38 - 0
UAS_MES_YDCY/.workbuddy/memory/MEMORY.md

@@ -0,0 +1,38 @@
+# UAS_MES_YDCY 项目约定
+
+## 技术栈
+- WinForms,.NET Framework,老式 csproj + packages.config;数据库为 Oracle。
+- 主程序集输出名 `UAS_MES_NEW.exe`(在 `bin/Debug/`)。
+
+## 新增一个功能界面(标准步骤)
+1. 在 `FunctionCode/<模块>/` 下建 3 个文件:`Xxx.cs`、`Xxx.Designer.cs`、`Xxx.resx`。
+   - resx 直接 `cp` 一个现有空模板(如 `Make_SplitBoard.resx`,5817 字节)即可。
+2. `namespace UAS_MES_NEW.<模块>`,class 继承 `Form`。
+3. Designer 风格:`FormBorderStyle = None`、`Tag = "<模块>!<类名>"`、`AutoScaleDimensions(8F,15F)` + `AutoScaleMode.Font`。
+4. csproj 三处注册(缺一不可):
+   - `<Compile Include="...\Xxx.cs"><SubType>Form</SubType></Compile>`
+   - `<Compile Include="...\Xxx.Designer.cs"><DependentUpon>Xxx.cs</DependentUpon></Compile>`
+   - `<EmbeddedResource Include="...\Xxx.resx"><DependentUpon>Xxx.cs</DependentUpon></EmbeddedResource>`
+5. 菜单:无需改代码。左侧导航由数据库驱动——`CS$SYSNAVATION`(`sn_classname` 填 `模块.类名`,`sn_displayname` 为菜单名,`sn_module` 为分组名,`sn_caller` 为权限 Caller,`sn_using=1`),权限在 `CS$USERGROUPPOWER`。运行时按 `Assembly.GetExecutingAssembly().CreateInstance("UAS_MES_NEW." + sn_classname)` 反射开窗。
+
+## 界面通用写法(从现有代码提炼)
+- 字段:`AutoSizeFormClass asc = new AutoSizeFormClass();`、`DataHelper dh;`、`DataTable dt;`
+- `Load` 事件:`asc.controllInitializeSize(this);` → `dh = SystemInf.dh;` → 初始化数据 → `xxx.Focus();`
+- `SizeChanged` 事件:`asc.controlAutoSize(this);`
+- 日志面板:`OperateResult.AppendText(">>提示\n", Color.Black)` / `("<<错误\n", Color.Red, 控件)`(`RichTextAutoBottom`,含 (string,Color) 与 (string,Color,Control) 两个重载)
+
+## 常用自定义控件(`UAS_MES_NEW.CustomControl.*`)
+- SN/条码输入:`TextBoxWithIcon.SnCollectionBox`(继承 `EnterTextBox`,额外属性 `AllPower/ID/Power/Str/Str1/Str2`)
+- 工单输入(带放大镜 DbFind):`TextBoxWithIcon.MaCodeSearchTextBox`,配 `TableName/SelectField/SetValueField/FormName/Condition`
+- 按钮:`ButtonUtil.NormalButton`(未设 NormalImage/DownImage/MoveImage 时自动取 `Properties.Resources` 默认图)
+- 结果面板:`RichText.RichTextAutoBottom`
+- 自适应:`PublicMethod.AutoSizeFormClass`(internal,同程序集内可用)
+
+## 数据访问
+- `dh.ExecuteSql(sql, "select")` 返回 `DataTable`;`dh.getFieldDataByCondition(表, 字段, 条件)` 返回单值。
+- 表命名:工序表 `step`(`st_code`/`st_name`),工序类型表 `steptype`(`STP_CODE`/`STP_NAME`,注意是 STP_ 前缀)。
+- SQL 多为拼字符串 + Oracle 函数(`nvl`、`ROWNUM`、`DUAL`)。
+
+## 已知环境限制
+- 无法本地编译验证:`dotnet build` 卡在 NuGet restore;沙箱拦截 MSBuild.exe / csc.exe。
+- 改代码后需在 Visual Studio 中手动编译确认。

+ 127 - 0
UAS_MES_YDCY/FunctionCode/Make/Make_StepType.Designer.cs

@@ -0,0 +1,127 @@
+namespace UAS_MES_NEW.Make
+{
+    partial class Make_StepType
+    {
+        /// <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()
+        {
+            this.sncode_label = new System.Windows.Forms.Label();
+            this.sncode = new UAS_MES_NEW.CustomControl.TextBoxWithIcon.SnCollectionBox();
+            this.steptype_label = new System.Windows.Forms.Label();
+            this.steptype = new System.Windows.Forms.ComboBox();
+            this.OperateResult = new UAS_MES_NEW.CustomControl.RichText.RichTextAutoBottom();
+            this.SuspendLayout();
+            // 
+            // sncode_label
+            // 
+            this.sncode_label.AutoSize = true;
+            this.sncode_label.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.sncode_label.Location = new System.Drawing.Point(68, 70);
+            this.sncode_label.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+            this.sncode_label.Name = "sncode_label";
+            this.sncode_label.Size = new System.Drawing.Size(84, 32);
+            this.sncode_label.TabIndex = 0;
+            this.sncode_label.Text = "序列号";
+            // 
+            // sncode
+            // 
+            this.sncode.AllPower = null;
+            this.sncode.BackColor = System.Drawing.Color.White;
+            this.sncode.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.sncode.ID = null;
+            this.sncode.Location = new System.Drawing.Point(192, 66);
+            this.sncode.Margin = new System.Windows.Forms.Padding(4);
+            this.sncode.Name = "sncode";
+            this.sncode.Power = null;
+            this.sncode.Size = new System.Drawing.Size(420, 40);
+            this.sncode.Str = null;
+            this.sncode.Str1 = null;
+            this.sncode.Str2 = null;
+            this.sncode.TabIndex = 1;
+            this.sncode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.sncode_KeyDown);
+            // 
+            // steptype_label
+            // 
+            this.steptype_label.AutoSize = true;
+            this.steptype_label.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.steptype_label.Location = new System.Drawing.Point(68, 160);
+            this.steptype_label.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+            this.steptype_label.Name = "steptype_label";
+            this.steptype_label.Size = new System.Drawing.Size(112, 32);
+            this.steptype_label.TabIndex = 2;
+            this.steptype_label.Text = "工序类型";
+            // 
+            // steptype
+            // 
+            this.steptype.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.steptype.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.steptype.FormattingEnabled = true;
+            this.steptype.Location = new System.Drawing.Point(192, 158);
+            this.steptype.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.steptype.Name = "steptype";
+            this.steptype.Size = new System.Drawing.Size(420, 36);
+            this.steptype.TabIndex = 3;
+            // 
+            // OperateResult
+            // 
+            this.OperateResult.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.OperateResult.Location = new System.Drawing.Point(680, 54);
+            this.OperateResult.Margin = new System.Windows.Forms.Padding(4);
+            this.OperateResult.Name = "OperateResult";
+            this.OperateResult.Size = new System.Drawing.Size(660, 690);
+            this.OperateResult.TabIndex = 5;
+            this.OperateResult.Text = "";
+            // 
+            // Make_StepType
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1400, 800);
+            this.Controls.Add(this.steptype);
+            this.Controls.Add(this.steptype_label);
+            this.Controls.Add(this.sncode);
+            this.Controls.Add(this.sncode_label);
+            this.Controls.Add(this.OperateResult);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            this.Margin = new System.Windows.Forms.Padding(4);
+            this.Name = "Make_StepType";
+            this.Tag = "Make!StepType";
+            this.Text = "工序类型维护";
+            this.Load += new System.EventHandler(this.Make_StepType_Load);
+            this.SizeChanged += new System.EventHandler(this.Make_StepType_SizeChanged);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+        private System.Windows.Forms.Label sncode_label;
+        private CustomControl.TextBoxWithIcon.SnCollectionBox sncode;
+        private System.Windows.Forms.Label steptype_label;
+        private System.Windows.Forms.ComboBox steptype;
+        private CustomControl.RichText.RichTextAutoBottom OperateResult;
+    }
+}

+ 127 - 0
UAS_MES_YDCY/FunctionCode/Make/Make_StepType.cs

@@ -0,0 +1,127 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Windows.Forms;
+using UAS_MES_NEW.DataOperate;
+using UAS_MES_NEW.Entity;
+using UAS_MES_NEW.PublicMethod;
+
+namespace UAS_MES_NEW.Make
+{
+    public partial class Make_StepType : Form
+    {
+        AutoSizeFormClass asc = new AutoSizeFormClass();
+
+        DataHelper dh;
+
+        DataTable dt;
+
+        //查询结果:craftdetail 中 cd_detno 最小的 cd_stepcode
+        string cdStepCode = "";
+
+        //查询结果:makeserial 中的主键、工艺编号与产品编号
+        string msId = "";
+        string craftCode = "";
+        string prodCode = "";
+
+        public Make_StepType()
+        {
+            InitializeComponent();
+        }
+
+        private void Make_StepType_Load(object sender, EventArgs e)
+        {
+            asc.controllInitializeSize(this);
+            dh = SystemInf.dh;
+            //加载工序类型下拉框
+            BindStepType();
+            //聚焦序列号输入框
+            sncode.Focus();
+            OperateResult.AppendText(">>请输入序列号\n", Color.Black);
+        }
+
+        private void Make_StepType_SizeChanged(object sender, EventArgs e)
+        {
+            asc.controlAutoSize(this);
+        }
+
+        /// <summary>
+        /// 绑定工序类型下拉框,数据来源:steptype 表
+        /// STP_CODE 为值字段,STP_NAME 为显示字段
+        /// </summary>
+        private void BindStepType()
+        {
+            dt = (DataTable)dh.ExecuteSql("select STP_CODE,STP_NAME from steptype order by STP_CODE", "select");
+            //插入一个空白选项,允许用户不选择
+            DataRow dr = dt.NewRow();
+            dr["STP_CODE"] = "";
+            dr["STP_NAME"] = "请选择";
+            dt.Rows.InsertAt(dr, 0);
+
+            steptype.DataSource = dt;
+            steptype.DisplayMember = "STP_NAME";
+            steptype.ValueMember = "STP_CODE";
+            steptype.SelectedIndex = 0;
+        }
+
+        /// <summary>
+        /// 序列号输入框,回车后执行查询
+        /// </summary>
+        private void sncode_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode != Keys.Enter)
+                return;
+
+            string stepTypeCode = steptype.SelectedValue == null ? "" : steptype.SelectedValue.ToString();
+            string stepTypeName = steptype.Text;
+
+            //限制一:序列号不能为空
+            if (sncode.Text.Trim() == "")
+            {
+                OperateResult.AppendText("<<序列号不能为空\n", Color.Red, sncode);
+                return;
+            }
+            //限制二:必须选择工序类型
+            if (stepTypeCode == "")
+            {
+                OperateResult.AppendText("<<请选择工序类型\n", Color.Red, steptype);
+                steptype.Focus();
+                return;
+            }
+
+            string sn = sncode.Text.Trim();
+
+            //一、按序列号取 makeserial 的主键、工艺编号与产品编号
+            DataTable dtSn = (DataTable)dh.ExecuteSql("select ms_id,ms_craftcode,ms_prodcode from makeserial where ms_sncode='" + sn + "'", "select");
+            if (dtSn.Rows.Count == 0)
+            {
+                OperateResult.AppendText("<<" + sn + "不存在\n", Color.Red, sncode);
+                sncode.Clear();
+                sncode.Focus();
+                return;
+            }
+            msId = dtSn.Rows[0]["ms_id"].ToString();
+            craftCode = dtSn.Rows[0]["ms_craftcode"].ToString();
+            prodCode = dtSn.Rows[0]["ms_prodcode"].ToString();
+
+            //二、按工艺编号+产品编号+工序类型取 craftdetail 明细,cd_detno 升序取第一条即最小的 cd_stepcode
+            DataTable dtStep = (DataTable)dh.ExecuteSql("select cd_stepcode from craft left join craftdetail on cd_crid=cr_id where cr_code='" + craftCode + "' and cr_prodcode='" + prodCode + "' and CD_STEPTYPE='" + stepTypeCode + "' order by cd_detno", "select");
+            if (dtStep.Rows.Count == 0)
+            {
+                cdStepCode = "";
+                OperateResult.AppendText("<<" + sn + "未找到工序类型为" + stepTypeName + "的工序\n", Color.Red, sncode);
+                sncode.Clear();
+                sncode.Focus();
+                return;
+            }
+            cdStepCode = dtStep.Rows[0]["cd_stepcode"].ToString();
+
+            //三、把查到的工序编号回写到 makeserial 的下道工序字段(用主键 ms_id 更新)
+            dh.ExecuteSql("update makeserial set ms_nextstepcode='" + cdStepCode + "' where ms_id='" + msId + "'", "update");
+
+            OperateResult.AppendText("<<" + sn + "执行" + stepTypeName + ",下一工序为" + cdStepCode + "\n", Color.Green, sncode);
+            sncode.Clear();
+            sncode.Focus();
+        }
+    }
+}

+ 120 - 0
UAS_MES_YDCY/FunctionCode/Make/Make_StepType.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>

+ 9 - 0
UAS_MES_YDCY/UAS_MES_YDCY.csproj

@@ -1174,6 +1174,12 @@
     <Compile Include="FunctionCode\Make\Make_SplitBoard.Designer.cs">
       <DependentUpon>Make_SplitBoard.cs</DependentUpon>
     </Compile>
+    <Compile Include="FunctionCode\Make\Make_StepType.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FunctionCode\Make\Make_StepType.Designer.cs">
+      <DependentUpon>Make_StepType.cs</DependentUpon>
+    </Compile>
     <Compile Include="FunctionCode\Make\Make_TestCollection.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -2150,6 +2156,9 @@
     <EmbeddedResource Include="FunctionCode\Make\Make_SplitBoard.resx">
       <DependentUpon>Make_SplitBoard.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="FunctionCode\Make\Make_StepType.resx">
+      <DependentUpon>Make_StepType.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="FunctionCode\Make\Make_TestCollection.resx">
       <DependentUpon>Make_TestCollection.cs</DependentUpon>
     </EmbeddedResource>