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