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
{
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