using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace OTSPeriodicTable
{
public partial class OTSPeriodicTableForm_Small : Form
{
#region 变量
///
/// 获取所有选择的元素
///
public List m_List_Periodic;
///
/// 常用元素列表
///
private string[] m_common_elementliststr = { "Li","Sm","Mn","Be","Ac","Cr","Mg","B","Ni","Ca","C",
"Co","Zr","Si","Cu","Sn","Se","W","Pb","Te","Mo",
"Bi","As","V","Cs","S","Ti","Ba","P","Al","La",
"N","Nb","Ce","O","Ta","Nd","H","Y","Cl","Ac","Hg","I","Br","F","Re","W"};
private string[] m_Battery_elementliststr = { "Na","Mg","Al","Si","K","Ca",
"Cr","Mn","Fe","Co","Ni","Cu","Zn","Ag","Au"};
private string[] m_TechnicalCleanness_c_elementliststr = {"C","O","F", "Na","Mg","Al","Si","P","S","Cl","K","Ca",
"Ti", "Cr","Mn","Fe","Ni","Cu","Zn","Cd","Sn","Ba","W","Pb"};
private string[] m_Steel_elementliststr = {"N", "Na","Mg","Al","Si","S","Cl","K","Ca",
"Ti", "Cr","Mn","Fe","Co","Ni","Nb","Mo"};
private string[] m_aliuminum_elementliststr = {"N", "Na","Mg","Al","Si","S","Cl","K","Ca",
"Ti", "Cr","Mn","Fe","Ni","Cu","Zn","Zr","Nb","Mo"};
private string[] m_IncA_elementliststr = {"S", "O","N","Mg","Al","Si","Ca",
"Ti", "V","Mn","Zr","Nb","Mo","Ce","La","Fe","C","Cr","P","Na","F"};
#endregion
#region 构造函数及窗体加载
public OTSPeriodicTableForm_Small()
{
m_List_Periodic = new List();//加载窗体时,重新初始化元素lis
InitializeComponent();
//国际化
OTSCommon.Language lan = new OTSCommon.Language(this);
}
///
/// 传入已经选择的元素购造函数
///
///
public OTSPeriodicTableForm_Small(List in_list_periodic)
{
m_List_Periodic = new List();//加载窗体时,重新初始化元素lis
InitializeComponent();
m_List_Periodic = in_list_periodic;
}
private void OTSPeriodicTableForm_Small_Load(object sender, EventArgs e)
{
this.DoubleBuffered = true;
this.Refresh();
//设置传入的元素列表被选择
SetListToPeriodic();
}
#endregion
#region 自定义方法封装
///
/// 将所有的界面UI periodic设置成未选择状态
///
private void SetAllUIPeriodicVisable()
{
foreach (Control uc in thePeriodicTable_Small1.Controls)
{
//第一步,先找到最外部大panel
if (uc.Name == "panel1")
foreach (Control uc2 in uc.Controls)
{
//第二步,再找到小panel
if (uc2.Name.IndexOf("p_element") > -1)
{
//第三步,里面还有一层,这个才是user_element
foreach (Control uc3 in uc2.Controls)
{
User_Element_Small ue = (User_Element_Small)uc3;
ue.i_click = 0;
ue.BackColor = Color.Gainsboro;
}
}
}
}
}
///
/// 将所有的界面UI periodic设置成选择状态
///
private void SetAllUIPeriodicEnable()
{
foreach (Control uc in thePeriodicTable_Small1.Controls)
{
//第一步,先找到最外部大panel
if (uc.Name == "panel1")
foreach (Control uc2 in uc.Controls)
{
//第二步,再找到小panel
if (uc2.Name.IndexOf("p_element") > -1)
{
//第三步,里面还有一层,这个才是user_element
foreach (Control uc3 in uc2.Controls)
{
User_Element_Small ue = (User_Element_Small)uc3;
ue.i_click = 2;
ue.BackColor = Color.SpringGreen;
}
}
}
}
}
///
/// 将常用的界面UI periodic 设置成选择状态
///
private void SetSelectedPeriodicEnable(string[] selectedelements)
{
foreach (Control uc in thePeriodicTable_Small1.Controls)
{
//第一步,先找到最外部大panel
if (uc.Name == "panel1")
foreach (Control uc2 in uc.Controls)
{
//第二步,再找到小panel
if (uc2.Name.IndexOf("p_element") > -1)
{
//第三步,里面还有一层,这个才是user_element
foreach (Control uc3 in uc2.Controls)
{
User_Element_Small ue = (User_Element_Small)uc3;
//对常用元素进行判断
if (selectedelements.Contains( ue.lb_fh.Text)== true)
{
//选择
ue.i_click = 2;
ue.BackColor = Color.SpringGreen;
}
else
{
//未选择
ue.i_click = 0;
ue.BackColor = Color.Gainsboro;
}
}
}
}
}
}
///
/// 将元素表中的设置到元素界面上,让其显示为选择状态
///
private void SetListToPeriodic()
{
//先首将所有的选择状态都去掉
SetAllUIPeriodicVisable();
//开始设置选择的元素
for (int i = 0; i < m_List_Periodic.Count(); i++)
{
//先判断用户是否选择了元素,如果没有选择的话,直接退出,选择的话,先问
foreach (Control uc in thePeriodicTable_Small1.Controls)
{
//第一步,先找到最外部大panel
if (uc.Name == "panel1")
foreach (Control uc2 in uc.Controls)
{
//第二步,再找到小panel
if (uc2.Name.IndexOf("p_element") > -1)
{
//第三步,里面还有一层,这个才是user_element
foreach (Control uc3 in uc2.Controls)
{
User_Element_Small ue = (User_Element_Small)uc3;
//记录用户选择了的元素
if (ue.lb_fh.Text == m_List_Periodic[i].Symbol)
{
//设置这个元素已经被选择
ue.i_click = 2;
ue.BackColor = Color.SpringGreen; ;
}
}
}
}
}
}
}
#endregion
#region 保存选择的元素到List中
///
/// 将选择的元素保存到列表中
///
private void SelectPeriodicToList()
{
//先判断用户是否选择了元素,如果没有选择的话,直接退出,选择的话,先问
foreach (Control uc in thePeriodicTable_Small1.Controls)
{
//第一步,先找到最外部大panel
if (uc.Name == "panel1")
foreach (Control uc2 in uc.Controls)
{
//第二步,再找到小panel
if (uc2.Name.IndexOf("p_element") > -1)
{
//第三步,里面还有一层,这个才是user_element
foreach (Control uc3 in uc2.Controls)
{
User_Element_Small ue = (User_Element_Small)uc3;
//记录用户选择了的元素
if (ue.i_click == 2)
{
Periodic pc = new Periodic();
pc.Number = ue.lb_xh.Text.ToString().Trim(); //序号
pc.EleWeight = ue.lb_yzzl.Text.ToString().Trim(); //元素重量
pc.Symbol = ue.lb_fh.Text.ToString().Trim(); //符号
pc.ChineseName = ue.zwysm.ToString().Trim(); //中文元素名
//pc.YWM = ue.lb_xh.Text.ToString().Trim(); //英文名
if ("-" != ue.lb_sx1.Text.ToString().Trim() && "" != ue.lb_sx1.Text.ToString().Trim())
pc.K_Peak = ue.lb_sx1.Text.ToString().Trim(); //属性1
else
pc.K_Peak = "0";
if ("-" != ue.lb_sx2.Text.ToString().Trim() && "" != ue.lb_sx2.Text.ToString().Trim())
pc.L_Peak = ue.lb_sx2.Text.ToString().Trim(); //属性2
else
pc.L_Peak = "0";
if ("-" != ue.lb_sx3.Text.ToString().Trim() && "" != ue.lb_sx3.Text.ToString().Trim())
pc.M_Peak = ue.lb_sx3.Text.ToString().Trim(); //属性3
else
pc.M_Peak = "0";
m_List_Periodic.Add(pc);
}
}
}
}
}
}
#endregion
#region 相关事件
private void OTSPeriodicTableForm_Small_FormClosing(object sender, FormClosingEventArgs e)
{
m_List_Periodic.Clear();
SelectPeriodicToList();
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//从UI向list更新
m_List_Periodic.Clear();
SelectPeriodicToList();
OTSPeriodicTableForm otf = new OTSPeriodicTableForm(m_List_Periodic);
otf.ShowDialog();
//从list向UI更新
this.m_List_Periodic = otf.m_List_Periodic; //该list未用clone,所以保持了一致该代码写不写都一样
SetListToPeriodic();
this.DoubleBuffered = true;
this.Refresh();
}
#endregion
private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//选择常用元素
SetSelectedPeriodicEnable(m_common_elementliststr);
}
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//选择所有元素
if (linkLabel2.Text == "All Element Enable")
{
linkLabel2.Text = "All Element Disable";
SetAllUIPeriodicEnable();
}
else
{
linkLabel2.Text = "All Element Enable";
SetAllUIPeriodicVisable();
}
}
private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetSelectedPeriodicEnable(m_TechnicalCleanness_c_elementliststr);
}
private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetSelectedPeriodicEnable(m_Battery_elementliststr);
}
private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetSelectedPeriodicEnable(m_Steel_elementliststr);
}
private void linkLabel7_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetSelectedPeriodicEnable(m_aliuminum_elementliststr);
}
}
}