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