using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace OTSPeriodicTable
{
public partial class OTSPeriodicTableForm : Form
{
#region 变量定义
///
/// 获取所有选择的元素
///
public List m_List_Periodic;
//是否点击了确定按钮
//private bool m_isOK = false;
#endregion
#region 构造函数和窗体加载
public OTSPeriodicTableForm()
{
m_List_Periodic = new List();
InitializeComponent();
//国际化
OTSCommon.Language lan = new OTSCommon.Language(this);
}
///
/// 传入已经选择的元素购造函数
///
///
public OTSPeriodicTableForm(List in_list_periodic)
{
m_List_Periodic = new List();
InitializeComponent();
m_List_Periodic = in_list_periodic;
}
private void OTSPeriodicTableForm_Load(object sender, EventArgs e)
{
//设置传入的元素列表被选择
SetListToPeriodic(); //问题从这里开始
this.DoubleBuffered = true;
this.Refresh();
}
#endregion
#region 保存选择的元素到List中
///
/// 将所有的界面UI periodic设置成未选择状态
///
private void SetAllUIPeriodicVisable()
{
foreach (Control uc in thePeriodicTable1.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 ue = (User_Element)uc3;
ue.i_click = 0;
ue.BackColor = ue.OldColor;
}
}
}
}
}
///
/// 将元素表中的设置到元素界面上,让其显示为选择状态
///
private void SetListToPeriodic()
{
//先首将所有的选择状态都去掉
SetAllUIPeriodicVisable();
//开始设置选择的元素
for (int i = 0; i < m_List_Periodic.Count(); i++)
{
//先判断用户是否选择了元素,如果没有选择的话,直接退出,选择的话,先问
foreach (Control uc in thePeriodicTable1.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 ue = (User_Element)uc3;
//记录用户选择了的元素
if (ue.lb_fh.Text == m_List_Periodic[i].Symbol)
{
//设置这个元素已经被选择
ue.i_click = 2;
ue.BackColor = Color.SpringGreen; ;
}
}
}
}
}
}
}
///
/// 将选择的元素保存到列表中
///
private void SelectPeriodicToList()
{
m_List_Periodic.Clear();
//先判断用户是否选择了元素,如果没有选择的话,直接退出,选择的话,先问
foreach (Control uc in thePeriodicTable1.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 ue = (User_Element)uc3;
//记录用户选择了的元素
if (ue.i_click == 2)
{
//aa++;
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.EnglishName = 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";
if (null != ue.pictureBox1.Image.Tag)
pc.Classfication = ue.pictureBox1.Image.Tag.ToString(); //分类
m_List_Periodic.Add(pc);
}
}
}
}
}
}
#endregion
#region 窗体退出事件
private void OTSPeriodicTableForm_FormClosing(object sender, FormClosingEventArgs e)
{
SelectPeriodicToList();
}
#endregion
#region 确定和取消事件
//点击确定
private void button1_Click(object sender, EventArgs e)
{
SelectPeriodicToList();
//m_isOK = true;
this.DialogResult = DialogResult.OK;
this.Close();
}
//点击取消
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
#endregion
}
}