C#做的一个窗体解析DBC文件,实现了编辑修改

public partial class Form1 : Form
    {
        string fName = "";//DBC文件路径
        private string fileName = "";//新建文件的路径
        private StringBuilder preBO_ = new StringBuilder();//第一条BO_前的所有内容
        private StringBuilder postSG_ = new StringBuilder();//最后一条SG_后的所有内容
        private bool flag = false;//标记表格内容是否被修改过
        private string firstMessage;//第一条BO_包含的内容
        private string lastSignal;//最后一条SG_包含的内容
        private string contextBefEdit;//保存修改前的文本内容(一行)
        private string contextAftEdit;//保存修改后的文本内容(一行)
        private List<Signal> signalList;//保存signal的信息
        private List<Message> messageList;//保存message的信息
        private int currentRow;//当前选中的message所在的行
        private DataSet MyDBCData = new DataSet();
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 存放Message信息
        /// </summary>
        public class Message
        {
            public string Name { set; get; }
            public long Id { set; get; }//Message_Id
            public string Type { set; get; } = "扩展帧";
            public byte Size { set; get; }
            public string Transmitter { set; get; } = "Vector__XXX";//发送者 默认为 Vector__XXX(代表没有发送者)
            public int PrimaryId { set; get; } //主键ID
        }


        /// <summary>
        /// 存放Signal信息
        /// </summary>
        public class Signal
        {
            public long Id { set; get; }//Message_Id
            public string Name { set; get; }//名称
            public string Mold { set; get; } = "signal";
            public byte Order { set; get; }//格式
            public string Type { set; get; }//值类型
            public int StartBit { set; get; }//起始位
            public byte Size { set; get; }//长度
            public double Factor { set; get; }//因子
            public double Offset { set; get; }//偏移量
            public double Maxinum { set; get; }//最大
            public double Mininum { set; get; }//最小
            public string Unit { set; get; }//单位
            public string Receiver { set; get; } = "Vector_xxx";//接收者
            public string Multiplexer { set; get; }//模式
            public int PrimaryId { set; get; }//主键ID
        }
        /// <summary>
        /// 打开DBC文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                fileName = "";
                fName = openFileDialog1.FileName;        //获取DBC文件路径
                label1.Text = fName;                            //显示到窗体
                DBCFileParser MyDBC = new DBCFileParser();      //例化DBC解析
                MyDBC.DBCFileAnalytically(fName, ref MyDBCData);//调用DBC解析
                messageList = GetMessage();
                signalList = GetSignal();
                BingMessage();
                Message message = messageList[0];
                firstMessage = "BO_ " + message.Id + " " + message.Name + ": " + message.Size + " " + message.Transmitter;
                SetLastSignal();
                SetContext();
                GetFallowSignal();
            }
        }


        /// <summary>
        /// 保存文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            if (fileName != null && fileName != "")
            {
                preBO_.Clear();
                postSG_.Clear();
                SetPreBo();
                SaveDBCFile(fileName);
            }
            else if (fName != null && fName != "")
            {
                SaveDBCFile(fName);
            }
            label1.Text = "已保存";
        }
        /// <summary>
        /// 保存文件并退出窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            button2_Click(sender, e);
            this.Close();
        }
        /// <summary>
        /// 退出窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }


        /// <summary>
        /// 新建DBC文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            BuildDBCFile();
        }


        private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            dataGridView1.DataSource = MyDBCData.Tables[treeView1.SelectedNode.Text].DefaultView;
        }


        /// <summary>
        /// 点击单元行促发显示signal的方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            AddNewGrid(messageList);
            label1.Text = fName == null ? fileName : fName;
            if (currentRow == dataGridView1.CurrentCell.RowIndex)//当前行的行号和点击行的行号相同则停止方法
            {
                return;
            }
            GetFallowSignal();
        }


        /// <summary>
        /// 开始编辑Message
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            contextBefEdit = dataGridView1.CurrentCell.Value == null ? "" : dataGridView1.CurrentCell.Value.ToString();
        }
        /// <summary>
        /// 结束编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            Validate();
        }


        /// <summary>
        /// 数据错误
        /// </summary>
        /// <param name="sender"></param>
        /// <param
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值