CANoe学习记录(一)总体文件新建、打开、保存等格式

3 篇文章 1 订阅

新建工程

在这里插入图片描述
WPF中通过showDialog()弹出一个winform窗体,如果点击确定,则返回OK,WPF新建一个工程,如果点击取消,WPF取消新建工程,如何实现?

winfrom中返回值

private void button1_Click(object sender, EventArgs e)//确定按钮
        {
            //返回一个确定值,表示新建工程
            this.DialogResult = DialogResult.OK;
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)//取消按钮
        {
            //返回一个取消值,表示取消新建工程
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

WPF获取winfrom的返回值

//工程新建,引导文件
            Module module = new Module();
            module.ShowDialog();
            if (module.DialogResult == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }

WinForm禁止调整大小

窗口属性 > FormBorderStyle > 设置为FixedSingle即可
在这里插入图片描述

listView单列多项显示

选择List
在这里插入图片描述
如何实现,列表选项的默认选择,并且只有当有选项被选择的时候,确认按钮才会处于Enable状态

 private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            /**
            if (listView1.Items[0].Selected == false) {
                button1.Enabled = false;
            }
            else
            {
                button1.Enabled = true;
            }*/
            if (listView1.SelectedItems.Count != 0)
            {
                if (listView1.SelectedItems[0] == null)
                {
                    button1.Enabled = false;
                }
                else
                {
                    button1.Enabled = true;
                }
            }
            else
            {
                button1.Enabled = false;
            }
        }

在电脑目录下创建工程文件

在这里插入图片描述
在这里插入图片描述
路径选择按钮,采用FolderBrowserDialog,可在textBox2返回文件夹路径(文件名后面为textBox1,文件夹路径后面为textBox2)

private void button3_Click(object sender, EventArgs e)//路径选择按钮
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.ShowDialog();
            if (fbd.SelectedPath != string.Empty)
            {
                textBox2.Text = fbd.SelectedPath;
                filepathname = fbd.SelectedPath;
            }
        }

在指定目录下创建新文件,并向里面写入内容

private void button1_Click(object sender, EventArgs e)//新建按钮
        {
            //返回一个确定值,表示新建工程
            this.DialogResult = DialogResult.OK;

            //在指定目录生成工程文件,后缀名.cmn
            if (textBox1.Text == "")
            {
                //如果文件名为空,则不能新建

            }
            filename = filepathname + "\\" + textBox1.Text; 
            FileInfo fi = new FileInfo(filename);
            if (!fi.Directory.Exists)
            {
                fi.Directory.Create();
            }
            StreamWriter sw = File.CreateText(filename);
            sw.WriteLine("孙汉创建的文件");
            sw.WriteLine("时间:2019-11-26");
            sw.Close();

            this.Close();
        }

新建的文件,如何添加图案

生成的工程文件是这样的
在这里插入图片描述
对比该文件的属性和其他成熟软件生成的文件的属性
在这里插入图片描述

每次点击保存时,程序如何进行,采用StreamWriter

using (StreamWriter sw = new StreamWriter(filename))//加入“true”参数表示:以追加的方式写入文件
            {
                //每次保存重新写入内容
                
                sw.WriteLine("CANManager Version |1|1|1|123456 Configuration1");
                sw.WriteLine("Version: 1.0.0 Build 64");
                sw.WriteLine("32 PRO");

                sw.WriteLine("总视图控件的配置");
                sw.WriteLine("");
                sw.WriteLine("仿真模块的配置");
                sw.WriteLine("");
            }

项目退出之前,弹出是否保存框

程序需要记录一些更改,距离上一次手动保存,如果这之间工程没有出现变化,则直接退出,否则会弹出是否保存框,类似于下图所示:
在这里插入图片描述

private void window_closing(object sender, System.ComponentModel.CancelEventArgs e)
		/**WPF关闭窗口事件触发的函数,对比Closed(Closed是关闭窗口Closing执行后,
		仅仅是窗口关闭后所执行的函数并不能取消操作窗口)*/
        {
            //项目退出之前,会弹出是否保存框
            MessageBoxResult dr = MessageBox.Show("程序关闭之前是否需要保存?", "确认", MessageBoxButton.YesNoCancel);
            if(dr == MessageBoxResult.Yes)
            {
                //saveUserOption();保存后再退出
                e.Cancel = false;                
            }
            else if (dr == MessageBoxResult.No)
            {
                //不保存直接退出
                e.Cancel = false;
            }
            else
            {
                e.Cancel = true;
            }
        }

程序如何实现快捷键操作,比如Ctrl + S、Ctrl + Z等

StreamReader和StreamWriter的常规操作

打开工程

OpenFileDialog的使用

在这里插入图片描述
关于OpenFileDialog用户选择取消按钮
参考链接关于OpenFileDialog用户选择取消按钮

System.Windows.Forms.OpenFileDialog dlg = new System.Windows.Forms.OpenFileDialog();
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }

用StreamReader来读文件内容

//创建完各小窗口后,需要对文件进行解析,并执行相对应的操作
            //通过读取的文件,来依次导入data文件和dbc文件
            string data = "";
            string dbc = "";
            StreamReader sr = new StreamReader(dlg.FileName);
            string line = sr.ReadLine();
            //建立两个正则表达式
            Regex regex1 = new Regex("DATA_:");
            Regex regex2 = new Regex("DBC_:");
            while (line != null)
            {
                if (line.Length > 5 && line.Substring(0, 5) == "DATA_")//暂时没有使用正则表达式
                {
                    line = sr.ReadLine();
                    data = line;
                }
                else if (line.Length > 4 && line.Substring(0, 4) == "DBC_")//regex2.IsMatch(line)
                {
                    line = sr.ReadLine();
                    dbc = line;
                }
                else
                {
                    line = sr.ReadLine();
                }         
            }

            Console.WriteLine("hhhhhhhhh" + data);
            Console.WriteLine("hhhhhhsdas" + dbc);
            measurement.DataAdress = data;
            simulation.Databases = dbc;

采用正则表达式或字符比配,来获取保存文件中的csv和dbc文件所对应的路径,并将其赋给工程的静态环境变量。
与此同时,还需要将读取的文件信息,例如database数据库文件,添加到simulation的树的database节点之下,另外类似的变化还有很多,需要一一进行软件界面调整。

如何修改WPF的标题栏

在这里插入图片描述
在显示YJJ CANManager的同时,在其前方添加,当前所打开文件的目录或者是文件名,方便用户了解当前所处理的文件对象,以免混淆。

Title = Module.filename + " - YJJ CANManager";

此时,更应该考虑左上角的图标如何设置

如何设置WPF左上角ico的图形

在这里插入图片描述
在这里插入图片描述

保存工程

根据用户体验,和大多数成熟软件进行对比,可以将保存过程细分多种情况

  • 每次操作完文件,点击保存按钮,保存一次
  • 程序关闭之前,提示用户是否保存
  • 另存为保存功能,可实现文件,在指定位置进行保存
  • 在已打开文件的基础上,再打开、或者创建一个文件,会提示“上一个工程文件是否需要保存?”

通过MessageBoxResult来弹出窗口,提示用户是否需要对上一个已经打开的文件保存,还是直接退出?

//新建工程之前,需要判断是否已经有其他工程处于打开状态,如果有,需要先关闭当前工程
            if (measurement != null)
            {
                //先弹出是否保存框
                //项目退出之前,会弹出是否保存框
                MessageBoxResult dr = MessageBox.Show("上一个工程文件是否需要保存?", "YJJ CANManager", MessageBoxButton.YesNo);
                if (dr == MessageBoxResult.Yes)
                {
                    workplace_save_click();//saveUserOption();保存后再退出
                }
                else if (dr == MessageBoxResult.No)
                {
                    //不保存,直接创建新的工程
                }
                measurement.Dispose();
                simulation.Dispose();
                write.Dispose();
                document.Dispose();
                trace.Dispose();
                graphics.Dispose();
                basicDiagnostics.Dispose();
                canStatistics.Dispose();
            }

保存代码

private void workplace_save_click()
        {
            // Create a file to write to.
            using (StreamWriter sw = new StreamWriter(Module.filename))//加入“true”参数表示:以追加的方式写入文件
            {
                //每次保存重新写入内容

                sw.WriteLine("CANManager Version |1|1|1|123456 Configuration1");
                sw.WriteLine("Version: 1.0.0 Build 64");
                sw.WriteLine("32 PRO");
                sw.WriteLine("");
                sw.WriteLine("");

                sw.WriteLine("Part1-------------总视图控件的配置");
                sw.WriteLine("");
                sw.WriteLine("数据采集处于在线or离线");
                sw.WriteLine("状态为(1表示在线,0表示离线)" + ON_OFF_LINE);
                sw.WriteLine("");
                string path;
                if (measurement.DataAdress == null)
                {
                    path = "还没有添加离线数据文件";
                }
                else
                {
                    path = measurement.DataAdress;
                }
                sw.WriteLine("DATA_离线数据文件路径为:");
                sw.WriteLine(path);
                sw.WriteLine("");
                sw.WriteLine("数据采集处于simulation还是实车");
                sw.WriteLine("模式为:" + BUS_MODE);
                sw.WriteLine("");

                sw.WriteLine("Part2-------------仿真模块的配置");
                sw.WriteLine("");
                sw.WriteLine("DBC_文件的保存路径为:");
                sw.WriteLine(simulation.Databases);//把各个相关类中我的静态量写到这里,即可
                sw.WriteLine("");
                sw.WriteLine("CAN网络的名字为:CAN1");
                sw.WriteLine("");
                sw.WriteLine("新建节点IG模块");
                sw.WriteLine("");
                sw.WriteLine("新建节点G模块");
            }
        }

保存的内容

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值