using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace NGToolsPC { class formHelper { private static readonly object __lock__ = new object(); //这是XML文档物理文件名(包含物理路径) private static string xmlFileName = Application.StartupPath + @"\CalResult\parameter.xml"; //这是XML文档根节点名 private static string rootNodeName = "Forms"; /// /// 保存控件参数 /// 放到FormClosing事件里 /// /// public static void SetFormParam(Control c) { CreatXml(); string str = ""; GetParam(c, ref str); str = str.TrimEnd('|'); //保存xml文档 string xpath = "/" + rootNodeName; //这是新节点的父节点路径/Forms string nodename = "FormName"; //这是新节点名称,在父节点下新增 string nodetext = c.Text;//窗体名 if (nodetext == "") nodetext = c.Tag.ToString(); bool isSuccess = XMLHelper.CreateOrUpdateXmlNodeByXPath(xmlFileName, xpath, nodename, "", "Name", nodetext); string xpath2 = xpath + "/" + nodename; //这是新子节点的父节点路径/Forms/FormName string nodename2 = "parm"; //这是新子节点名称,在父节点下新增 string nodetext2 = str;//窗体控件参数字符串 isSuccess = XMLHelper.CreateOrUpdateXmlNodeByXPath(xmlFileName, xpath2, nodename2, nodetext2, nodetext); } /// /// 加载控件参数 /// 放到Load事件尾 /// /// public static void LoadFormParam(Control c) { //获取xml参数文档 if (System.IO.File.Exists(xmlFileName)) { string xpath = "/" + rootNodeName + "/FormName"; string text = c.Text; if (text == "") text = c.Tag.ToString(); string parm = XMLHelper.GetXmlByAttribute(xmlFileName, xpath, "parm", "Name", text); SetParam(c, parm); } } private static void CreatXml() { if (!System.IO.File.Exists(xmlFileName)) { if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(xmlFileName))) System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(xmlFileName)); XMLHelper.CreateXmlDocument(xmlFileName, rootNodeName, "1.0", "utf-8", null); //MessageBox.Show("XML文档创建成功:" + xmlFileName); } } private static void GetParam(Control c, ref string str) { try { foreach (Control ctl in c.Controls) { if (ctl is TextBox) { TextBox tx = ctl as TextBox; str += tx.Name + "$" + tx.Text + "|"; } else if (ctl is CheckBox) { CheckBox tx = ctl as CheckBox; str += tx.Name + "$" + tx.Checked + "|"; } else if (ctl is ComboBox) { ComboBox tx = ctl as ComboBox; //str += tx.Name + "$" + tx.SelectedIndex.ToString() + "|"; str += tx.Name + "$" + tx.Text + "|"; } else if (ctl is UpDownBase) { UpDownBase tx = ctl as UpDownBase; str += tx.Name + "$" + tx.Text + "|"; } else if (ctl is RadioButton) { RadioButton rb = ctl as RadioButton; str += rb.Name + "$" + rb.Checked + "|"; } if (ctl.Controls.Count > 0 && !(ctl is UpDownBase)) GetParam(ctl, ref str); } } catch (Exception) { } } private static void SetParam(Control c, string parm) { try { foreach (Control ctl in c.Controls) { foreach (string str in parm.Split('|')) { if (ctl.Name == str.Split('$')[0]) { if (ctl is TextBox) { TextBox tx = ctl as TextBox; tx.Text = str.Split('$')[1]; } else if (ctl is CheckBox) { CheckBox tx = ctl as CheckBox; tx.Checked = Convert.ToBoolean(str.Split('$')[1]); } else if (ctl is ComboBox) { ComboBox tx = ctl as ComboBox; //tx.SelectedIndex = Convert.ToInt32(str.Split('$')[1]); string val = str.Split('$')[1]; if (tx.Items.Contains(val)) { tx.Text = val; } } else if (ctl is UpDownBase) { UpDownBase tx = ctl as UpDownBase; string val = str.Split('$')[1]; tx.Text = val; try { //tx. = Convert.ToDecimal(val); } catch (Exception) { //tx.Value = 0; } } else if (ctl is RadioButton) { RadioButton rb = ctl as RadioButton; rb.Checked = Convert.ToBoolean(str.Split('$')[1]); } } } if (ctl.Controls.Count > 0 && !(ctl is UpDownBase)) SetParam(ctl, parm); } } catch (Exception) { } } #region 参数保存 /// /// 参数名前缀类型 /// public static string TypePrefix = ""; private static string xmlparamFileName = Application.StartupPath + @"\ConfigFile\param.xml"; /// /// 保存参数 /// /// 参数名 /// 参数值 public static void SetValue(string paramname, object paramvalues) { setvalues(paramname, paramvalues.ToString()); } /// /// 获取参数 /// /// 参数名 /// 默认值 /// public static string GetValue(string paramname, string def = "") { string str = getvalues(paramname); if (str == "") str = def; return str; } /// /// 获取参数 /// /// 参数名 /// 默认值 /// public static bool GetBoolValue(string paramname, bool def = false) { bool b = false; try { string str = getvalues(paramname); if (str == "") return def; b = Convert.ToBoolean(str.Trim()); } catch (Exception) { b = def; } return b; } /// /// 获取参数 /// /// 参数名 /// 默认值 /// public static int GetIntValue(string paramname, int def = -1) { try { double val = GetDoubleValue(paramname, def); return Convert.ToInt32(val); } catch (Exception) { return def; } } /// /// 获取参数 /// /// 参数名 /// 默认值 /// public static double GetDoubleValue(string paramname, double def = -1) { try { string str = getvalues(paramname); if (str == "") return def; return Convert.ToDouble(str.Trim()); } catch (Exception) { return def; } } private static void setvalues(string paramname, string paramvalues) { lock (__lock__) { paramname = TypePrefix + paramname; string root = "params"; if (!System.IO.File.Exists(xmlparamFileName)) { if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(xmlparamFileName))) System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(xmlparamFileName)); XMLHelper.CreateXmlDocument(xmlparamFileName, root, "1.0", "utf-8", null); } string xpath = "/" + root; //这是新节点的父节点路径/Forms string nodename = "param"; //这是新节点名称,在父节点下新增 string nodetext = paramname; bool isSuccess = XMLHelper.CreateOrUpdateXmlNodeByXPath(xmlparamFileName, xpath, nodename, paramvalues, "Name", nodetext); } } private static string getvalues(string paramname) { lock (__lock__) { paramname = TypePrefix + paramname; string str = string.Empty; //获取xml参数文档 if (System.IO.File.Exists(xmlparamFileName)) { string xpath = "/params/param"; str = XMLHelper.GetXmlByAttribute(xmlparamFileName, xpath, "Name", paramname); } return str; } } #endregion #region 保存树控件勾选状态 /// /// 获取树勾选状态参数 /// Closeing /// /// public static void SetTreeParam(TreeView tv, string setname) { string str = ""; foreach (TreeNode t in tv.Nodes) { str += t.Text + "$" + t.Checked + "|"; if (t.Nodes.Count > 0) GetNodeByValue(t, ref str); } setvalues(setname, str); } /// /// 设置树勾选状态 /// Load /// /// public static void GetTreeParam(TreeView tv, string setname) { try { string param = getvalues(setname); foreach (TreeNode t in tv.Nodes) { foreach (string str in param.Split('|')) { if (t.Text == str.Split('$')[0]) { t.Checked = Convert.ToBoolean(str.Split('$')[1]); } } if (t.Nodes.Count > 0) SetNodeByValue(t, param); } } catch (Exception ex) { } } private static void GetNodeByValue(TreeNode tnParent, ref string strValue) { foreach (TreeNode tn in tnParent.Nodes) { strValue += tn.Text + "$" + tn.Checked + "|"; if (tn.Nodes.Count > 0) GetNodeByValue(tn, ref strValue); } } private static void SetNodeByValue(TreeNode tnParent, string parm) { foreach (TreeNode tn in tnParent.Nodes) { foreach (string str in parm.Split('|')) { if (tn.Text == str.Split('$')[0]) { tn.Checked = Convert.ToBoolean(str.Split('$')[1]); } } if (tn.Nodes.Count > 0) SetNodeByValue(tn, parm); } } #endregion } }