【C#】代码解析--截取整个方法函数

系列文章

【C#】代码解析--打印数据集

本文链接:https://blog.csdn.net/youcheng_ge/article/details/131431829

【C#】代码解析--截取整个方法函数

本文链接:https://blog.csdn.net/youcheng_ge/article/details/109817809

前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

一、问题描述

根据某一行代码,截取所在方法函数的所有代码内容,以花括号结尾。

二、解决方案

找到外层花括号,要成对。

三、软件开发(源码)

3.1 被调函数(核心)

创建类GetMethod.cs,复制以下代码:

using System.IO;
using System.Text;

namespace ConsoleApp1
{
    public class GetMethod
    {
        /// <summary>
        /// 截取整个方法函数
        /// </summary>
        /// <param name="a_strPath">文件全路径</param>
        /// <param name="a_intStartLineNo">代码行号</param>
        /// <returns></returns>
        public string GetMethodContent(string a_strPath, int a_intStartLineNo)
        {
            string[] l_ArrayCodeContent = File.ReadAllLines(a_strPath);
            StringBuilder l_sbMethod = new StringBuilder();
            int l_intFlag = 0;

            for (int l_intCodeLine = a_intStartLineNo - 1; l_intCodeLine < l_ArrayCodeContent.Length; l_intCodeLine++)
            {
                string l_oneline = l_ArrayCodeContent[l_intCodeLine].ToString();

                if (l_oneline.Contains("{")) l_intFlag--;
                if (l_oneline.Contains("}")) l_intFlag++;

                if (l_intFlag == 0 && l_intCodeLine != a_intStartLineNo - 1)
                {
                    l_sbMethod.AppendLine(l_oneline);
                    break;
                }
                else
                {
                    l_sbMethod.AppendLine(l_oneline);
                }
            }
            return l_sbMethod.ToString();
        }
    }
}

3.2 调用函数

控制台程序,主方法里,实例化类,再调用,输出方法至桌面 输出.txt文件中。

        static void Main(string[] args)
        {
            GetMethod getMethod = new GetMethod();
            File.WriteAllText(@"C:\Users\YS\Desktop\输出.txt", getMethod.GetMethodContent(@"C:\Users\YS\Desktop\01-钨条打标.cs",256));
        }

四、项目展示

4.1 测试类文件

以下仅仅是测试文件,代码不需要理解,我们主要测试能否读取方法内容。


#region 预定义

//系统自带
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text.RegularExpressions;
using System.Windows.Forms;

//自定义
using BaseClass_NameSpace;
using GlobalClass_NameSpace;

#endregion


//空间内容: 鼎禄MES系统客户端
//空间版本: 0.0.0.1
//创建人: gyc
//修改时间: 2023.03.03
//============================================================================================
//注意事项
//  1.  
//  2.  
//============================================================================================
namespace MES_Client
{
    //类的内容: 仓库管理 - 钨条打标
    //类的版本: 0.0.0.1
    //创建人: gyc
    //修改时间: 2023.03.03
    //============================================================================================
    //注意事项
    //  1.  
    //  2.  
    //============================================================================================
    public partial class PCForm_Store_TBarPrint : SubForm
    {

        #region 系统属性

        //钨条信息保存
        public DataTable Dt_TBarInfoSave;

        #endregion


        #region 系统方法


        //函数内容: 构造函数
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        public PCForm_Store_TBarPrint()
        {
            //窗体初始化
            InitializeComponent();
        }


        //函数内容: 尺寸变化
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        private void PCForm_Store_TBarPrint_Resize(object sender, EventArgs e)
        {
            //数据输入,录入(左上角)
            panelControl_Data_Input.Left = 0;
            panelControl_Data_Input.Top = 0;
            panelControl_Data_Input.Width = this.Width / 2 - 2 * MIN_GAP;
            panelControl_Data_Input.Height = BTN_AddRow.Bottom + 20;

            //数据输入,提交(左中角)
            panelControl_Data_Submit.Left = 0;
            panelControl_Data_Submit.Height = 80;
            panelControl_Data_Submit.Top = this.Height - panelControl_Data_Submit.Height;
            panelControl_Data_Submit.Width = panelControl_Data_Input.Width;

            //数据输入,表格(左下角)
            SidePanel_Data_Table.Left = 0;
            SidePanel_Data_Table.Top = panelControl_Data_Input.Bottom + 4 * MIN_GAP;
            SidePanel_Data_Table.Width = panelControl_Data_Input.Width;
            SidePanel_Data_Table.Height = this.Height - panelControl_Data_Input.Height - panelControl_Data_Submit.Height - 8 * MIN_GAP;

            //数据查询(右侧)
            SidePanel_Right.Left = panelControl_Data_Input.Right + 4 * MIN_GAP;
            SidePanel_Right.Top = 0;
            SidePanel_Right.Width = this.Width - panelControl_Data_Input.Width - 4 * MIN_GAP;
            SidePanel_Right.Height = this.Height;

            //存货信息表
            baseGridControl_U8MaterialInfo.Height = this.Height / 2;

        }


        //函数内容: 控件位置变化,打标备注
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        private void baseDataInput_Remark_LocationResize(object sender, EventArgs e)
        {
            //添加行
            BTN_AddRow.Width = GlobalConst.BUTTON_WIDTH;
            BTN_AddRow.Height = GlobalConst.BUTTON_HEIGHT;
            BTN_AddRow.Left = baseDataInput_Remark.Right - BTN_AddRow.Width;
            BTN_AddRow.Top = baseDataInput_Remark.Bottom + 10;

            //删除行
            BTN_DeleteRow.Width = GlobalConst.BUTTON_WIDTH;
            BTN_DeleteRow.Height = GlobalConst.BUTTON_HEIGHT;
            BTN_DeleteRow.Left = BTN_AddRow.Left - BTN_DeleteRow.Width - 10;
            BTN_DeleteRow.Top = BTN_AddRow.Top;
        }


        //函数内容: 控件位置变化,提交面板
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        private void panelControl_Data_Submit_LocationChanged(object sender, EventArgs e)
        {
            //关联U8
            checkEdit_U8.Left = baseDataInput_Remark.Left;
            checkEdit_U8.Top = 15;

            //采购订单
            BTN_U8.Left = checkEdit_U8.Right + 20;
            BTN_U8.Top = checkEdit_U8.Top;
            BTN_U8.Width = GlobalConst.BUTTON_WIDTH;
            BTN_U8.Height = GlobalConst.BUTTON_HEIGHT;

            //清空数据按钮
            BTN_Clean.Left = BTN_DeleteRow.Left;
            BTN_Clean.Top = 15;
            BTN_Clean.Width = BTN_U8.Width;
            BTN_Clean.Height = BTN_U8.Height;

            //提交数据按钮
            BTN_Submit.Left = BTN_AddRow.Left;
            BTN_Submit.Top = BTN_Clean.Top;
            BTN_Submit.Width = BTN_U8.Width;
            BTN_Submit.Height = BTN_U8.Height;
        }


        //函数内容: 载入窗体
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        private void PCForm_Store_TBarPrint_Load(object sender, EventArgs e)
        {
            //账号初始化
            BaseVal.UserID = MySQLUserName;
            BaseVal.UserPassword = MySQLPassword;

            BaseVal.MySQLServer = MySQLAddress;
            BaseVal.MySQLUserID = MySQLUserName;
            BaseVal.MySQLPassword = MySQLPassword;

            //消息显示标题
            BaseVal.MessageCaption = "工号-" + MySQLUserName + " 姓名-" + "管理员" +
                " 公司-" + "鼎禄" + " 角色-" + "管理员";

            //基本客户端类初始化
            BaseNetClient = new BaseClient(MySQLAddress, GlobalClass_NameSpace.GlobalConst.SUPER_MESSAGE_SERVER_PORT);
            //消息处理,接收服务器返回消息
            BaseNetClient.SuperMessageAnalyzeAsClient_Event += BaseNetClient_SuperMessageAnalyzeAsClient_Event;

            //初始化窗体控件绑定
            InitFormControlBindings();
            MySQLSheetInitialize();

            //gridview 界面样式
            BaseHMI.SetGridViewStyle(GridView_TBar);

        }


        //函数内容: 初始化窗体控件绑定
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.16
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        private void InitFormControlBindings()
        {
            baseDataInput_FactoryName.AddItem(工厂名称常量.一期);
            baseDataInput_FactoryName.SelectIndex(0);

            baseDataInput_TBarType.AddItem(钨丝来源类型常量.采购);
            baseDataInput_TBarType.AddItem(钨丝来源类型常量.自产);
            baseDataInput_TBarType.SelectIndex(0);

            baseDataInput_FactoryWeight.DecimalValue = 0;
            baseDataInput_OneBatchNum.DecimalValue = 12;


            //绑定左下方表格
            Dt_TBarInfoSave = new DataTable();
            Dt_TBarInfoSave.Columns.Add(钨条信息表.公司编号, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.工厂名称, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.存货编码, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.采购订单编号, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条供应商编号, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条出厂批次号, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条出厂规格, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条出厂重量, typeof(System.Decimal));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.材料类型, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条类型, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条编号, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条状态描述, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条规格, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标时间, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标录入时间, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标操作人编号, typeof(System.String));
            Dt_TBarInfoSave.Columns.Add(钨条信息表.钨条打标备注, typeof(System.String));

            GridControl_TBar.DataSource = Dt_TBarInfoSave;
        }


        //函数内容: 数据表初始化
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.16
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        private void MySQLSheetInitialize()
        {
            this.baseGridControl_U8MaterialInfo.GridView_Main.OptionsBehavior.Editable = false;

            BaseMySQLSheet sheet = new BaseMySQLSheet()
            {
                SheetName = "物料信息表",
                SQLSelect = "SELECT * ",
                SQLFrom = " FROM " + 物料信息表.表名,
                SQLWhere = " WHERE 1 ",
                SQLCondition = " AND " + 物料信息表.存货大类名称 + "='钨条'",
                SQLOrderBy = " ORDER BY 存货编码 ",
            };

            sheet.Add(物料信息表.公司编号, 物料信息表.公司编号, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.存货大类名称, 物料信息表.存货大类名称, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.材料类型, 物料信息表.材料类型, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.存货编码, 物料信息表.存货编码, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.存货名称, 物料信息表.存货名称, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.规格型号, 物料信息表.规格型号, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.直径, 物料信息表.直径, MySQL数据类型.MySQL_decimal, true);
            sheet.Add(物料信息表.编号助记符, 物料信息表.编号助记符, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.供应商编号, 物料信息表.供应商编号, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.是否免检, 物料信息表.是否免检, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.主计量单位, 物料信息表.主计量单位, MySQL数据类型.MySQL_varchar, true);
            sheet.Add(物料信息表.备注, 物料信息表.备注, MySQL数据类型.MySQL_decimal, true);

            baseGridControl_U8MaterialInfo.MySQLSheet = sheet;
        }


        #endregion


        #region 钨条打标

        //函数内容: 添加行序号
        //函数版本: 0.0.0.1
        //修改时间: 2023.05.18
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private void GridView_TBar_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
            {
                e.Info.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
                e.Info.DisplayText = (e.RowHandle + 1).ToString();
            }
        }


        //函数内容: 仓库, 钨条打标, 表格焦点行改变事件
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private void baseGridControl_WuTiaoInfo_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            try
            {
                DataRow dr_Material = baseGridControl_U8MaterialInfo.GridView_Main.GetFocusedDataRow();
                if (dr_Material != null)
                {
                    baseDataInput_MaterialType.StringValue = dr_Material[物料信息表.材料类型].ToString();
                    baseDataInput_InventoryCode.StringValue = dr_Material[物料信息表.存货编码].ToString();
                    baseDataInput_FactorySpec.StringValue = dr_Material[物料信息表.规格型号].ToString();
                    baseDataInput_SupplyNo.StringValue = dr_Material[物料信息表.编号助记符].ToString();
                }
            }
            catch (Exception ex)
            {
                BaseHMI.Display("钨条打标 baseGridControl_WuTiaoInfo_FocusedRowChanged", ex);
            }
        }


        //函数内容: 按钮单击, 仓库, 钨条打标, 删除行按钮
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private void BTN_DeleteRow_Click(object sender, EventArgs e)
        {
            try
            {
                if (GridView_TBar.RowCount > 0)
                {
                    int l_intIndex = GridView_TBar.GetFocusedDataSourceRowIndex();
                    Dt_TBarInfoSave.Rows.RemoveAt(l_intIndex);
                }
            }
            catch (Exception ex)
            {
                BaseHMI.Display("钨条打标 BTN_DeleteRow_Click", ex);
            }
        }


        //函数内容: 按钮单击, 仓库, 钨条打标, 添加行按钮
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private void BTN_AddRow_Click(object sender, EventArgs e)
        {
            try
            {
                //变量定义
                string str_InventoryCode = baseDataInput_InventoryCode.StringValue.Trim();
                string str_SupplyOrderNo = baseDataInput_SupplyOrderNo.StringValue.Trim();
                string str_FactoryBatchNo = baseDataInput_FactoryBatchNo.StringValue.Trim();
                string str_FactorySpec = baseDataInput_FactorySpec.StringValue.Trim();
                //自产/采购
                string str_TBarType = baseDataInput_TBarType.StringValue.Trim();
                //供应商编号
                string str_SupplyNo = baseDataInput_SupplyNo.StringValue.Trim();
                //材料类型
                string str_MaterialType = baseDataInput_MaterialType.StringValue.Trim();
                Decimal dec_FactoryWeight = baseDataInput_FactoryWeight.DecimalValue;
                string str_Spec = baseDataInput_Spec.StringValue.Trim();
                string str_FactoryName = baseDataInput_FactoryName.StringValue.Trim();
                int int_OneBatchNum = Convert.ToInt32(baseDataInput_OneBatchNum.DecimalValue);//每批数量
                string str_Note = baseDataInput_Remark.StringValue.Trim();
                string DateTimeNow = DateTime.Now.ToString();

                //有效性
                ErrorMessage ErrMsg = new ErrorMessage();
                if (string.IsNullOrEmpty(str_InventoryCode)) ErrMsg.Append("存货编码,不为空!");

                if (string.IsNullOrEmpty(str_SupplyOrderNo)) ErrMsg.Append("采购订单编号,不为空!");

                if (string.IsNullOrEmpty(str_SupplyNo) || str_SupplyNo == BaseConst.STRING_NULL) ErrMsg.Append("供应商,不为空!");

                if (str_SupplyNo.Length != 2) ErrMsg.Append("供应商,为2位字符代码!");

                if (string.IsNullOrEmpty(str_FactoryBatchNo)) ErrMsg.Append("出厂批次号,不为空!");

                if (string.IsNullOrEmpty(str_FactorySpec)) ErrMsg.Append("出厂规格,不为空!");

                if (dec_FactoryWeight <= 0) ErrMsg.Append("出厂重量,不能小于等于0!");

                if (string.IsNullOrEmpty(str_Spec)) ErrMsg.Append("钨条规格,不为空!");

                if (string.IsNullOrEmpty(str_FactoryName)) ErrMsg.Append("工厂名称,不为空!");

                if (string.IsNullOrEmpty(str_MaterialType)) ErrMsg.Append("材料类型,不为空!");

                if (str_Note.Length > 500) ErrMsg.Append("备注,不能超过500字符!");

                if (int_OneBatchNum <= 0) ErrMsg.Append("每批数量,不能小于等于0!");

                string str_LastAutoCode = AutoCode(string.Format("[一位年份]{0}{1}[6位流水号]", str_SupplyNo, str_MaterialType),
                        钨条信息表.表名, 钨条信息表.钨条编号);

                if (str_LastAutoCode.Length != GlobalConst.TBAR_ID_LEN) ErrMsg.Append("钨条编号,位数不正确!");

                //显示错误信息
                if (ErrMsg.Message.Length > 0)
                {
                    BaseHMI.ShowWarn(ErrMsg);
                    return;
                }

                string text1 = str_LastAutoCode.Substring(0, 4);
                string text2 = str_LastAutoCode.Substring(4, 6);

                for (int i = 0; i < int_OneBatchNum; i++) //每批数量
                {
                    int num = BaseFunction.StringConvertToInt(text2, 32);//字符串转数字
                    string strSN = BaseFunction.IntConvertToString(num + i, 32);//编号序列转字符串

                    DataRow dr = Dt_TBarInfoSave.NewRow();
                    dr[钨条信息表.公司编号] = "Z";
                    dr[钨条信息表.工厂名称] = str_FactoryName;
                    dr[钨条信息表.存货编码] = str_InventoryCode;
                    dr[钨条信息表.采购订单编号] = str_SupplyOrderNo;
                    dr[钨条信息表.钨条供应商编号] = str_SupplyNo;
                    dr[钨条信息表.钨条出厂批次号] = str_FactoryBatchNo;
                    dr[钨条信息表.钨条出厂规格] = str_FactorySpec;
                    dr[钨条信息表.钨条出厂重量] = dec_FactoryWeight;
                    dr[钨条信息表.材料类型] = str_MaterialType;
                    dr[钨条信息表.钨条类型] = str_TBarType;
                    dr[钨条信息表.钨条编号] = text1 + strSN.PadLeft(6, '0');
                    dr[钨条信息表.钨条状态描述] = 钨条状态常量.等待钨条样检验;
                    dr[钨条信息表.钨条规格] = str_Spec;
                    dr[钨条信息表.钨条打标时间] = DateTimeNow;
                    dr[钨条信息表.钨条打标录入时间] = DateTimeNow;
                    dr[钨条信息表.钨条打标操作人编号] = BaseVal.UserID;
                    dr[钨条信息表.钨条打标备注] = str_Note;
                    Dt_TBarInfoSave.Rows.Add(dr);
                }
            }
            catch (Exception ex)
            {
                BaseHMI.Display("钨条打标 BTN_AddRow_Click", ex);
            }
        }


        //函数内容: 按钮单击, 仓库, 钨条打标, 清空按钮
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        public void BTN_Clean_Click(object sender, EventArgs e)
        {
            baseDataInput_SupplyOrderNo.Clear();//采购订单号
            baseDataInput_FactoryBatchNo.Clear();//出厂批次号
            baseDataInput_Spec.Clear();
            baseDataInput_Remark.Clear();
            baseDataInput_FactoryWeight.DecimalValue = 0;
            baseDataInput_OneBatchNum.DecimalValue = 12;

            Dt_TBarInfoSave.Rows.Clear();

            baseDataInput_SupplyOrderNo.Focus();
        }


        //函数内容: 按钮单击, 仓库, 钨条打标, 提交按钮
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private void BTN_Submit_Click(object sender, EventArgs e)
        {
            BaseHMI.ShowWaitForm(TIME_WAIT_FORM);

            try
            {
                //数据检查
                ErrorMessage ErrMsg = new ErrorMessage();
                if (Dt_TBarInfoSave.Rows.Count <= 0) ErrMsg.Append("提交数据为空");

                //显示错误信息
                if (ErrMsg.Message.Length > 0)
                {
                    BaseHMI.ShowWarn(ErrMsg);
                    return;
                }

                //发送请求
                BaseSuperMessage SuperMsg = new BaseSuperMessage(仓库消息.钨条打标);
                SuperMsg.Append(Dt_TBarInfoSave);
                SuperMsg.Append("PrinterPCName", GlobalVar.PCName_TBar);
                BaseNetClient.SendSuperMessage(SuperMsg);
            }
            catch (Exception ex)
            {
                BaseHMI.Display("钨条打标 BTN_Submit_Click", ex);
            }
        }


        #endregion


        #region 消息处理


        //函数内容: 服务器回传消息
        //函数版本: 0.0.0.0
        //修改时间: 2023.03.03
        //============================================================================================
        //注意事项:
        //1.
        //2.
        //============================================================================================
        public void BaseNetClient_SuperMessageAnalyzeAsClient_Event(object o)
        {
            try
            {
                //信息初始化
                ErrorMessage ErrMsg = new ErrorMessage();
                BaseSuperMessage SuperMsg = o as BaseSuperMessage;

                //根据消息种类分别处理
                switch (SuperMsg.SN)
                {
                    case 仓库消息.钨条打标:
                        try
                        {
                            //显示 失败信息
                            if (SuperMsg.Data[0].Name == BaseConst.MESSAGE_FAIL)
                            {
                                ErrMsg.Message = SuperMsg.Data[0].Value;
                                BaseHMI.ShowWarn(ErrMsg);
                                return;
                            }
                            //显示 成功信息
                            BaseHMI.ShowWarn("钨条打标,数据提交成功!");

                            //清空
                            InvokeSimpleButtonClick(BTN_Clean_Click);
                        }
                        catch (System.Exception ex)
                        {
                            BaseHMI.Display("SN = " + 仓库消息.钨条打标.ToString() + " 钨条打标,请求应答处理", ex);
                            BaseHMI.ShowWarn("软件报错, 请通知管理员!");
                        }
                        break;

                    default:
                        break;

                }

                //消息应答通用处理
                BaseNetClient.SendOver(SuperMsg);

                //记录消息
                BaseHMI.Display(BaseVal.MessageCaption, SuperMsg);
            }
            catch (System.Exception ex)
            {
                BaseHMI.Display("通用消息分析 BaseNetClient_SuperMessageAnalyzeAsClient_Event", ex);
            }
        }


        #endregion


        #region 自定义通用方法


        //函数内容: 自动编号处理
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.26
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private string AutoCode(string a_strAutoRule, string a_strCodeTable, string a_strCodeField)
        {
            string 流水号正则 = @"(\[[0-9]+位流水号])";
            string 流水号位数正则 = "[0-9]+";

            string l_strSNText = RegexForString(流水号正则, a_strAutoRule);//流水号文本
            int l_intSNLength = 4; //流水号长度
            string l_strSN = RegexForString(流水号位数正则, l_strSNText);
            int.TryParse(l_strSN, out l_intSNLength);

            string text = "";
            string text2 = "";
            checked
            {
                for (int i = 0; i < l_intSNLength; i++)
                {
                    text += "_";
                    text2 += "0";
                }
                string text3 = ParseCodeRule(a_strAutoRule, l_strSNText, l_intSNLength);
                string s = ParseQueryRule(a_strAutoRule, l_strSNText, l_intSNLength);
                int num = text3.IndexOf(text);

                //使用 BaseMySQL取数,需要指定 数据库名
                BaseMySQL fetchData = new BaseMySQL();
                string text4 = "select {0} from {1} where {2} like {3} order by 1 desc LIMIT 0,1";

                text4 = string.Format(text4, new object[]
                {
                    string.Format("SUBSTRING({0}, {1}, {2})", a_strCodeField, num + 1, l_intSNLength),
                    a_strCodeTable,
                    a_strCodeField,
                    "'"+s+"'"
                });
                DataTable l_dt = fetchData.Query(text4);
                if (l_dt != null)
                {
                    string newValue;
                    if (l_dt.Rows.Count <= 0)
                    {
                        newValue = 1.ToString(text2);
                    }
                    else
                    {
                        text3.Substring(0, num);
                        if (text3.Length > num + 4)
                        {
                            text3.Substring(num + 4);
                        }
                        string s2 = l_dt.Rows[0][0].ToString();
                        int num2 = 0;
                        //补充字母ABCD
                        num2 = BaseFunction.StringConvertToInt(s2, 32);//字符串转数字
                        //int.TryParse(s2, out num2);
                        num2++;
                        s2 = BaseFunction.IntConvertToString(num2, 32);//数字转字符串
                        newValue = s2.PadLeft(l_intSNLength, '0');
                    }
                    text3 = text3.Replace(text, newValue);
                }
                return text3;
            }
        }

        //函数内容: 转换规则
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.26
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private string ParseCodeRule(string a_strAutoRule, string a_strSNText, int a_CodeLength)
        {
            DateTime date = DateTime.Now.Date;
            if (a_strAutoRule.Contains("[紧缩天数]"))
            {
                a_strAutoRule = a_strAutoRule.Replace("[紧缩天数]", date.Day.ToString());
            }
            if (a_strAutoRule.Contains("[两位天数]"))
            {
                a_strAutoRule = a_strAutoRule.Replace("[两位天数]", date.Day.ToString("00"));
            }
            if (a_strAutoRule.Contains("[紧缩月份]"))
            {
                a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString());
            }
            if (a_strAutoRule.Contains("[两位月份]"))
            {
                a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString("00"));
            }
            checked
            {
                if (a_strAutoRule.Contains("[一位年份]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[一位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 1, 1));
                }
                if (a_strAutoRule.Contains("[两位年份]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[两位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 2, 2));
                }
                if (a_strAutoRule.Contains("[四位年份]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[四位年份]", date.Year.ToString("0000"));
                }

                string text2 = "";
                for (int i = 0; i < a_CodeLength; i++)
                {
                    text2 += "_";
                }
                a_strAutoRule = a_strAutoRule.Replace(a_strSNText, text2);
                a_strAutoRule = a_strAutoRule.Replace("[按月编号]", text2);
                a_strAutoRule = a_strAutoRule.Replace("[按年编号]", text2);
                return a_strAutoRule;
            }
        }


        //函数内容: 转换规则
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.26
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private string ParseQueryRule(string a_strAutoRule, string a_strSNText, int a_CodeLength)
        {
            DateTime date = DateTime.Now.Date;
            if (a_strAutoRule.Contains("[紧缩天数]"))
            {
                a_strAutoRule = a_strAutoRule.Replace("[紧缩天数]", date.Day.ToString());
            }
            if (a_strAutoRule.Contains("[两位天数]"))
            {
                if (a_strAutoRule.Contains("[按月编号]") || a_strAutoRule.Contains("[按年编号]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[两位天数]", "__");
                }
                else
                {
                    a_strAutoRule = a_strAutoRule.Replace("[两位天数]", date.Day.ToString("00"));
                }
            }
            if (a_strAutoRule.Contains("[紧缩月份]"))
            {
                a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString());
            }
            if (a_strAutoRule.Contains("[两位月份]"))
            {
                if (a_strAutoRule.Contains("[按年编号]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[两位月份]", "__");
                }
                else
                {
                    a_strAutoRule = a_strAutoRule.Replace("[两位月份]", date.Month.ToString("00"));
                }
            }
            checked
            {
                if (a_strAutoRule.Contains("[一位年份]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[一位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 1, 1));
                }
                if (a_strAutoRule.Contains("[两位年份]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[两位年份]", date.Year.ToString().Substring(date.Year.ToString().Length - 2, 2));
                }
                if (a_strAutoRule.Contains("[四位年份]"))
                {
                    a_strAutoRule = a_strAutoRule.Replace("[四位年份]", date.Year.ToString("0000"));
                }

                string text2 = "";
                for (int i = 0; i < a_CodeLength; i++)
                {
                    text2 += "_";
                }
                a_strAutoRule = a_strAutoRule.Replace(a_strSNText, text2);
                a_strAutoRule = a_strAutoRule.Replace("[按月编号]", text2);
                a_strAutoRule = a_strAutoRule.Replace("[按年编号]", text2);
                return a_strAutoRule;
            }
        }


        //函数内容: 正则表达式判断
        //函数版本: 0.0.0.1
        //修改时间: 2023.03.26
        //============================================================================================
        //注意事项
        //  1.  
        //  2.  
        //============================================================================================
        private string RegexForString(string a_strPattern, string a_txtContext)
        {
            Regex l_reg = new Regex(@a_strPattern, RegexOptions.IgnoreCase);
            MatchCollection matches_Type = l_reg.Matches(a_txtContext);
            foreach (Match item in matches_Type)
            {
                return item.Value;
            }
            return "";
        }


        #endregion


    }
}

4.2 测试样例1

256行,private void MySQLSheetInitialize()。

 运行结果:

 

 4.3 测试样例2

371行,private void BTN_AddRow_Click(object sender, EventArgs e)

  运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花北城

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值