OTSPeriodicTableForm_Small.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Windows.Forms;
  6. namespace OTSPeriodicTable
  7. {
  8. public partial class OTSPeriodicTableForm_Small : Form
  9. {
  10. #region 变量
  11. /// <summary>
  12. /// 获取所有选择的元素
  13. /// </summary>
  14. public List<Periodic> m_List_Periodic;
  15. /// <summary>
  16. /// 常用元素列表
  17. /// </summary>
  18. private string[] m_common_elementliststr = { "Li","Sm","Mn","Be","Ac","Cr","Mg","B","Ni","Ca","C",
  19. "Co","Zr","Si","Cu","Sn","Se","W","Pb","Te","Mo",
  20. "Bi","As","V","Cs","S","Ti","Ba","P","Al","La",
  21. "N","Nb","Ce","O","Ta","Nd","H","Y","Cl","Ac","Hg","I","Br","F","Re","W"};
  22. private string[] m_Battery_elementliststr = { "Na","Mg","Al","Si","K","Ca",
  23. "Cr","Mn","Fe","Co","Ni","Cu","Zn","Ag","Au"};
  24. private string[] m_TechnicalCleanness_c_elementliststr = {"C","O","F", "Na","Mg","Al","Si","P","S","Cl","K","Ca",
  25. "Ti", "Cr","Mn","Fe","Ni","Cu","Zn","Cd","Sn","Ba","W","Pb"};
  26. private string[] m_Steel_elementliststr = {"N", "Na","Mg","Al","Si","S","Cl","K","Ca",
  27. "Ti", "Cr","Mn","Fe","Co","Ni","Nb","Mo"};
  28. private string[] m_aliuminum_elementliststr = {"N", "Na","Mg","Al","Si","S","Cl","K","Ca",
  29. "Ti", "Cr","Mn","Fe","Ni","Cu","Zn","Zr","Nb","Mo"};
  30. private string[] m_IncA_elementliststr = {"S", "O","N","Mg","Al","Si","Ca",
  31. "Ti", "V","Mn","Zr","Nb","Mo","Ce","La","Fe","C","Cr","P","Na","F"};
  32. #endregion
  33. #region 构造函数及窗体加载
  34. public OTSPeriodicTableForm_Small()
  35. {
  36. m_List_Periodic = new List<Periodic>();//加载窗体时,重新初始化元素lis
  37. InitializeComponent();
  38. //国际化
  39. OTSCommon.Language lan = new OTSCommon.Language(this);
  40. }
  41. /// <summary>
  42. /// 传入已经选择的元素购造函数
  43. /// </summary>
  44. /// <param name="in_list_periodic"></param>
  45. public OTSPeriodicTableForm_Small(List<Periodic> in_list_periodic)
  46. {
  47. m_List_Periodic = new List<Periodic>();//加载窗体时,重新初始化元素lis
  48. InitializeComponent();
  49. m_List_Periodic = in_list_periodic;
  50. }
  51. private void OTSPeriodicTableForm_Small_Load(object sender, EventArgs e)
  52. {
  53. this.DoubleBuffered = true;
  54. this.Refresh();
  55. //设置传入的元素列表被选择
  56. SetListToPeriodic();
  57. }
  58. #endregion
  59. #region 自定义方法封装
  60. /// <summary>
  61. /// 将所有的界面UI periodic设置成未选择状态
  62. /// </summary>
  63. private void SetAllUIPeriodicVisable()
  64. {
  65. foreach (Control uc in thePeriodicTable_Small1.Controls)
  66. {
  67. //第一步,先找到最外部大panel
  68. if (uc.Name == "panel1")
  69. foreach (Control uc2 in uc.Controls)
  70. {
  71. //第二步,再找到小panel
  72. if (uc2.Name.IndexOf("p_element") > -1)
  73. {
  74. //第三步,里面还有一层,这个才是user_element
  75. foreach (Control uc3 in uc2.Controls)
  76. {
  77. User_Element_Small ue = (User_Element_Small)uc3;
  78. ue.i_click = 0;
  79. ue.BackColor = Color.Gainsboro;
  80. }
  81. }
  82. }
  83. }
  84. }
  85. /// <summary>
  86. /// 将所有的界面UI periodic设置成选择状态
  87. /// </summary>
  88. private void SetAllUIPeriodicEnable()
  89. {
  90. foreach (Control uc in thePeriodicTable_Small1.Controls)
  91. {
  92. //第一步,先找到最外部大panel
  93. if (uc.Name == "panel1")
  94. foreach (Control uc2 in uc.Controls)
  95. {
  96. //第二步,再找到小panel
  97. if (uc2.Name.IndexOf("p_element") > -1)
  98. {
  99. //第三步,里面还有一层,这个才是user_element
  100. foreach (Control uc3 in uc2.Controls)
  101. {
  102. User_Element_Small ue = (User_Element_Small)uc3;
  103. ue.i_click = 2;
  104. ue.BackColor = Color.SpringGreen;
  105. }
  106. }
  107. }
  108. }
  109. }
  110. /// <summary>
  111. /// 将常用的界面UI periodic 设置成选择状态
  112. /// </summary>
  113. private void SetSelectedPeriodicEnable(string[] selectedelements)
  114. {
  115. foreach (Control uc in thePeriodicTable_Small1.Controls)
  116. {
  117. //第一步,先找到最外部大panel
  118. if (uc.Name == "panel1")
  119. foreach (Control uc2 in uc.Controls)
  120. {
  121. //第二步,再找到小panel
  122. if (uc2.Name.IndexOf("p_element") > -1)
  123. {
  124. //第三步,里面还有一层,这个才是user_element
  125. foreach (Control uc3 in uc2.Controls)
  126. {
  127. User_Element_Small ue = (User_Element_Small)uc3;
  128. //对常用元素进行判断
  129. if (selectedelements.Contains( ue.lb_fh.Text)== true)
  130. {
  131. //选择
  132. ue.i_click = 2;
  133. ue.BackColor = Color.SpringGreen;
  134. }
  135. else
  136. {
  137. //未选择
  138. ue.i_click = 0;
  139. ue.BackColor = Color.Gainsboro;
  140. }
  141. }
  142. }
  143. }
  144. }
  145. }
  146. /// <summary>
  147. /// 将元素表中的设置到元素界面上,让其显示为选择状态
  148. /// </summary>
  149. private void SetListToPeriodic()
  150. {
  151. //先首将所有的选择状态都去掉
  152. SetAllUIPeriodicVisable();
  153. //开始设置选择的元素
  154. for (int i = 0; i < m_List_Periodic.Count(); i++)
  155. {
  156. //先判断用户是否选择了元素,如果没有选择的话,直接退出,选择的话,先问
  157. foreach (Control uc in thePeriodicTable_Small1.Controls)
  158. {
  159. //第一步,先找到最外部大panel
  160. if (uc.Name == "panel1")
  161. foreach (Control uc2 in uc.Controls)
  162. {
  163. //第二步,再找到小panel
  164. if (uc2.Name.IndexOf("p_element") > -1)
  165. {
  166. //第三步,里面还有一层,这个才是user_element
  167. foreach (Control uc3 in uc2.Controls)
  168. {
  169. User_Element_Small ue = (User_Element_Small)uc3;
  170. //记录用户选择了的元素
  171. if (ue.lb_fh.Text == m_List_Periodic[i].Symbol)
  172. {
  173. //设置这个元素已经被选择
  174. ue.i_click = 2;
  175. ue.BackColor = Color.SpringGreen; ;
  176. }
  177. }
  178. }
  179. }
  180. }
  181. }
  182. }
  183. #endregion
  184. #region 保存选择的元素到List中
  185. /// <summary>
  186. /// 将选择的元素保存到列表中
  187. /// </summary>
  188. private void SelectPeriodicToList()
  189. {
  190. //先判断用户是否选择了元素,如果没有选择的话,直接退出,选择的话,先问
  191. foreach (Control uc in thePeriodicTable_Small1.Controls)
  192. {
  193. //第一步,先找到最外部大panel
  194. if (uc.Name == "panel1")
  195. foreach (Control uc2 in uc.Controls)
  196. {
  197. //第二步,再找到小panel
  198. if (uc2.Name.IndexOf("p_element") > -1)
  199. {
  200. //第三步,里面还有一层,这个才是user_element
  201. foreach (Control uc3 in uc2.Controls)
  202. {
  203. User_Element_Small ue = (User_Element_Small)uc3;
  204. //记录用户选择了的元素
  205. if (ue.i_click == 2)
  206. {
  207. Periodic pc = new Periodic();
  208. pc.Number = ue.lb_xh.Text.ToString().Trim(); //序号
  209. pc.EleWeight = ue.lb_yzzl.Text.ToString().Trim(); //元素重量
  210. pc.Symbol = ue.lb_fh.Text.ToString().Trim(); //符号
  211. pc.ChineseName = ue.zwysm.ToString().Trim(); //中文元素名
  212. //pc.YWM = ue.lb_xh.Text.ToString().Trim(); //英文名
  213. if ("-" != ue.lb_sx1.Text.ToString().Trim() && "" != ue.lb_sx1.Text.ToString().Trim())
  214. pc.K_Peak = ue.lb_sx1.Text.ToString().Trim(); //属性1
  215. else
  216. pc.K_Peak = "0";
  217. if ("-" != ue.lb_sx2.Text.ToString().Trim() && "" != ue.lb_sx2.Text.ToString().Trim())
  218. pc.L_Peak = ue.lb_sx2.Text.ToString().Trim(); //属性2
  219. else
  220. pc.L_Peak = "0";
  221. if ("-" != ue.lb_sx3.Text.ToString().Trim() && "" != ue.lb_sx3.Text.ToString().Trim())
  222. pc.M_Peak = ue.lb_sx3.Text.ToString().Trim(); //属性3
  223. else
  224. pc.M_Peak = "0";
  225. m_List_Periodic.Add(pc);
  226. }
  227. }
  228. }
  229. }
  230. }
  231. }
  232. #endregion
  233. #region 相关事件
  234. private void OTSPeriodicTableForm_Small_FormClosing(object sender, FormClosingEventArgs e)
  235. {
  236. m_List_Periodic.Clear();
  237. SelectPeriodicToList();
  238. }
  239. private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  240. {
  241. //从UI向list更新
  242. m_List_Periodic.Clear();
  243. SelectPeriodicToList();
  244. OTSPeriodicTableForm otf = new OTSPeriodicTableForm(m_List_Periodic);
  245. otf.ShowDialog();
  246. //从list向UI更新
  247. this.m_List_Periodic = otf.m_List_Periodic; //该list未用clone,所以保持了一致该代码写不写都一样
  248. SetListToPeriodic();
  249. this.DoubleBuffered = true;
  250. this.Refresh();
  251. }
  252. #endregion
  253. private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  254. {
  255. //选择常用元素
  256. SetSelectedPeriodicEnable(m_common_elementliststr);
  257. }
  258. private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  259. {
  260. //选择所有元素
  261. if (linkLabel2.Text == "All Element Enable")
  262. {
  263. linkLabel2.Text = "All Element Disable";
  264. SetAllUIPeriodicEnable();
  265. }
  266. else
  267. {
  268. linkLabel2.Text = "All Element Enable";
  269. SetAllUIPeriodicVisable();
  270. }
  271. }
  272. private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  273. {
  274. SetSelectedPeriodicEnable(m_TechnicalCleanness_c_elementliststr);
  275. }
  276. private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  277. {
  278. SetSelectedPeriodicEnable(m_Battery_elementliststr);
  279. }
  280. private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  281. {
  282. SetSelectedPeriodicEnable(m_Steel_elementliststr);
  283. }
  284. private void linkLabel7_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  285. {
  286. SetSelectedPeriodicEnable(m_aliuminum_elementliststr);
  287. }
  288. }
  289. }