9.Winform修改配置后重新启动使用配置

1.背景

做了一个winform的工厂设备地图,地图的原型是1:2的比例,需要用到两个屏幕才能显示完整,但有时候需要在一个屏幕上显示,所以做了一个配置,将这个配置项写入到了xml文件里面去,然后每次启动的时候去读取一下xml配置,是单屏显示还是双屏显示。同时可以修改显示的方式,修改后关闭窗体程序,重新打开即可读取到之前的配置。

2.实现方式

2.1 创建xml文件


<Config>
   
  <ScreenSize>2ScreenSize>
Config>

2.2 读取xml和修改xml

   /// 
    /// XmlHelper.
    /// 
    public static class XmlHelper
    {
        /// 
        /// 获取Xml的节点的值.
        /// 
        /// xml节点名称.
        /// string.
        public static GetXmlNodeValueResultDto GetXmlNodeValue(string nodeName)
        {
            GetXmlNodeValueResultDto resultDto = new GetXmlNodeValueResultDto();
            XmlDocument myXmlDoc = new XmlDocument();

            string filePath = System.Environment.CurrentDirectory;

            // 获取XML文件
            myXmlDoc.Load(filePath + "\\Config.xml");

            // 获取到指定的节点名称(根节点)
            XmlNode root = myXmlDoc.SelectSingleNode("Config");

            // 默认设置为失败
            resultDto.Success = false;
            resultDto.Message = "获取Xml配置失败:没有找到配置项";

            foreach (XmlNode node in root) // 循环获取每个节点的数据
            {
                if (node.Name == nodeName)
                {
                    resultDto.Value = node.InnerText.ToString();
                    resultDto.Success = true;
                    resultDto.Message = "获取Xml配置成功";
                    break;
                }
            }

            return resultDto;
        }

        /// 
        /// 设置Xml节点的值.
        /// 
        /// 节点名称.
        /// 节点的值.
        /// GetXmlNodeValueResultDto.
        public static GetXmlNodeValueResultDto EditXmlNodeValue(string nodeName, string nodeValue)
        {
            GetXmlNodeValueResultDto resultDto = new GetXmlNodeValueResultDto();
            string filePath = System.Environment.CurrentDirectory;
            XmlDocument myXmlDoc = new XmlDocument();

            string path = filePath + "\\Config.xml";

            // 获取XML文件
            myXmlDoc.Load(path);

            // 获取到指定的节点名称(根节点)
            XmlNode root = myXmlDoc.SelectSingleNode("Config");

            // 默认设置为失败
            resultDto.Success = false;
            resultDto.Message = "设置Xml配置失败:没有找到配置项";

            foreach (XmlNode node in root) // 循环获取每个节点的数据
            {
                if (node.Name == nodeName)
                {
                    node.InnerText = nodeValue;
                    node.InnerXml = nodeValue;
                    resultDto.Success = true;
                    resultDto.Message = "设置Xml配置成功";
                    myXmlDoc.Save(path);
                    break;
                }
            }

            return resultDto;
        }
    }

2.3 创建ContextMenuStrip控件做鼠标右键菜单

   /// 
        /// 点击1:1的比列.
        /// 
        /// sender.
        /// e.
        private void 单屏横向比11ToolStripMenuItem_Click(object sender, System.EventArgs e)
        {
            MessageBoxButtons mess = MessageBoxButtons.OKCancel;
            DialogResult dr = MessageBox.Show("调整比例需要重新打开窗体,确认修改比例并关闭当前窗体?", "提示", mess);
            if (dr == DialogResult.OK)
            {
                // 设置成1:1
                XmlHelper.EditXmlNodeValue("ScreenSize", "1");
                this.Close();
                this.Dispose();
                Process process = Process.GetCurrentProcess();
                process.Close();
            }
        }

        /// 
        /// 点击1:2的比列.
        /// 
        /// sender.
        /// e.
        private void 双联屏横向比12ToolStripMenuItem_Click(object sender, System.EventArgs e)
        {
            MessageBoxButtons mess = MessageBoxButtons.OKCancel;
            DialogResult dr = MessageBox.Show("调整比例需要重新打开窗体,确认修改比例并关闭当前窗体?", "提示", mess);
            if (dr == DialogResult.OK)
            {
                // 设置成1:1
                XmlHelper.EditXmlNodeValue("ScreenSize", "2");
                this.Close();
                this.Dispose();
                Process process = Process.GetCurrentProcess();
                process.Close();
            }
        }

2.4 Panel动态添加右键点击事件

  topContenPanel.Click += (e, a) => this.MouseRightClick(form, rightMenu, a);

2.5 鼠标右键打开菜单

        /// 
        /// 鼠标右键事件.
        /// 
        /// sender.
        /// rightMenu.
        /// e.
        public void MouseRightClick(Form form, ContextMenuStrip rightMenu, EventArgs e)
        {
            MouseEventArgs em = e as MouseEventArgs;

            if (em.Button == MouseButtons.Right)
            {
                Point point = default(Point);
                point.X = form.Location.X + em.X + 10;
                point.Y = form.Location.Y + em.Y + 40;
                rightMenu.Show(point);
            }
        }

你可能感兴趣的:(C#WinFrom,c#)