Main.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO.Ports;
  8. using System.Linq;
  9. using System.Runtime.InteropServices;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. namespace Jdas_Mbic
  14. {
  15. public partial class JdasMbic : Form
  16. {
  17. const double Table_Dbm_DefaultValue = 0;//31.5;
  18. const int Table_DL_DefaultValue = 5;
  19. const int Table_UL_DefaultValue = -15;
  20. const int Table_Temp_DefaultValue = -10;
  21. Serial serial = new Serial(); // Uart Open
  22. enum DLUL_Category
  23. {
  24. DL_DET = 0,
  25. UL_DET
  26. };
  27. public JdasMbic()
  28. {
  29. InitializeComponent();
  30. }
  31. private void JdasMbic_Load(object sender, EventArgs e)
  32. {
  33. ATT_TableLayoutSetting();
  34. serial.Serial_Initialize(ref comboBox_Port);
  35. }
  36. private void ATT_TableLayoutSetting()
  37. {
  38. double TempDbmData = Table_Dbm_DefaultValue;
  39. string tempstr = "";
  40. for (int i = 0; i < 64; i++)
  41. {
  42. dataGridView_TableSetting.Rows.Add();
  43. tempstr = string.Format("{0:0.0}", TempDbmData);
  44. dataGridView_TableSetting[0, i].Value = Convert.ToString(tempstr) + " dBm"; ;
  45. TempDbmData = TempDbmData + 0.5;
  46. }
  47. foreach (DataGridViewRow row in this.dataGridView_TableSetting.Rows)
  48. {
  49. row.HeaderCell.Value = String.Format("{0}", row.Index + 1);
  50. }
  51. this.dataGridView_TableSetting.AutoResizeRowHeadersWidth(
  52. DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
  53. this.dataGridView_TableSetting.TopLeftHeaderCell.Value = "No.";
  54. dataGridView_TableSetting.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
  55. dataGridView_TableSetting.ClearSelection();
  56. }
  57. private void DET_TableLayoutSetting(DLUL_Category cat)
  58. {
  59. string tempstr = "";
  60. DLUL_Category tempenum = cat;
  61. switch (tempenum) {
  62. case DLUL_Category.DL_DET:
  63. double Temp_DL_Data = Table_DL_DefaultValue;
  64. for (int i = 0; i < 31; i++)
  65. {
  66. dataGridView_TableSetting.Rows.Add();
  67. tempstr = string.Format("{0:0}", Temp_DL_Data);
  68. dataGridView_TableSetting[0, i].Value = Convert.ToString(tempstr) + " dBm";
  69. Temp_DL_Data = Temp_DL_Data - 1;
  70. }
  71. break;
  72. case DLUL_Category.UL_DET:
  73. double Temp_UL_Data = Table_UL_DefaultValue;
  74. for (int i = 0; i < 46; i++)
  75. {
  76. dataGridView_TableSetting.Rows.Add();
  77. tempstr = string.Format("{0:0}", Temp_UL_Data);
  78. dataGridView_TableSetting[0, i].Value = Convert.ToString(tempstr) + " dBm";
  79. Temp_UL_Data = Temp_UL_Data - 1;
  80. }
  81. break;
  82. }
  83. foreach (DataGridViewRow row in this.dataGridView_TableSetting.Rows)
  84. {
  85. row.HeaderCell.Value = String.Format("{0}", row.Index + 1);
  86. }
  87. this.dataGridView_TableSetting.AutoResizeRowHeadersWidth(
  88. DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
  89. this.dataGridView_TableSetting.TopLeftHeaderCell.Value = "No.";
  90. dataGridView_TableSetting.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
  91. dataGridView_TableSetting.ClearSelection();
  92. }
  93. private void Temp_TableLayoutSetting()
  94. {
  95. string tempstr = "";
  96. double Temp_Data = Table_Temp_DefaultValue;
  97. for (int i = 0; i < 10; i++)
  98. {
  99. dataGridView_TableSetting.Rows.Add();
  100. tempstr = string.Format("{0:0}", Temp_Data);
  101. dataGridView_TableSetting[0, i].Value = Convert.ToString(tempstr) + " ℃";
  102. Temp_Data = Temp_Data - 5;
  103. }
  104. foreach (DataGridViewRow row in this.dataGridView_TableSetting.Rows)
  105. {
  106. row.HeaderCell.Value = String.Format("{0}", row.Index + 1);
  107. }
  108. this.dataGridView_TableSetting.AutoResizeRowHeadersWidth(
  109. DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
  110. this.dataGridView_TableSetting.TopLeftHeaderCell.Value = "No.";
  111. dataGridView_TableSetting.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
  112. dataGridView_TableSetting.ClearSelection();
  113. }
  114. private void dataGridView_TableSetting_CellClick(object sender, DataGridViewCellEventArgs e)
  115. {
  116. }
  117. /*
  118. *
  119. * TABLE Setting Area
  120. *
  121. */
  122. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  123. {
  124. ComboBox comboBox = (ComboBox)sender;
  125. string tempstr = comboBox.Text;
  126. switch (tempstr)
  127. {
  128. case "ATT_DL1":
  129. case "ATT_UL1":
  130. case "ATT_DL2":
  131. case "ATT_UL2":
  132. case "ATT_DL3":
  133. case "ATT_UL3":
  134. case "ATT_DL4":
  135. case "ATT_UL4":
  136. dataGridView_TableSetting.Rows.Clear();
  137. ATT_TableLayoutSetting();
  138. break;
  139. case "DET_DL1":
  140. case "DET_DL2":
  141. case "DET_DL3":
  142. case "DET_DL4":
  143. dataGridView_TableSetting.Rows.Clear();
  144. DET_TableLayoutSetting(DLUL_Category.DL_DET);
  145. break;
  146. case "DET_UL1":
  147. case "DET_UL2":
  148. case "DET_UL3":
  149. case "DET_UL4":
  150. dataGridView_TableSetting.Rows.Clear();
  151. DET_TableLayoutSetting(DLUL_Category.UL_DET);
  152. break;
  153. case "TEMP_DL1":
  154. case "TEMP_UL1":
  155. case "TEMP_DL2":
  156. case "TEMP_UL2":
  157. case "TEMP_DL3":
  158. case "TEMP_UL3":
  159. case "TEMP_DL4":
  160. case "TEMP_UL4":
  161. dataGridView_TableSetting.Rows.Clear();
  162. Temp_TableLayoutSetting();
  163. break;
  164. default:
  165. MessageBox.Show("존재하지 않는 ComboBox 입니다.\r\n 확인해주세요.");
  166. break;
  167. }
  168. }
  169. private List<int> DataGridViewIndexOutput()
  170. {
  171. List<int> Tmplist = new List<int>();
  172. Int32 selectedCellCount =
  173. dataGridView_TableSetting.GetCellCount(DataGridViewElementStates.Selected);
  174. if (selectedCellCount > 0)
  175. {
  176. System.Text.StringBuilder sb =
  177. new System.Text.StringBuilder();
  178. //for (int i = 0;i < selectedCellCount; i++)
  179. for (int i = 0; i < selectedCellCount; i += 2)
  180. {
  181. sb.Append("Row: ");
  182. sb.Append(dataGridView_TableSetting.SelectedCells[i].RowIndex.ToString());
  183. Tmplist.Add(dataGridView_TableSetting.SelectedCells[i].RowIndex);
  184. /*sb.Append(", Column: ");
  185. sb.Append(dataGridView_TableSetting.SelectedCells[i].ColumnIndex.ToString());*/
  186. sb.Append(Environment.NewLine);
  187. }
  188. // sb.Append("Total: " + selectedCellCount.ToString());
  189. // MessageBox.Show(sb.ToString(), "Selected Cells");
  190. }
  191. return Tmplist;
  192. }
  193. private void button_MultiSet_Click(object sender, EventArgs e)
  194. {
  195. List<int> TmpList = new List<int>();
  196. TmpList = DataGridViewIndexOutput();
  197. for(int i = 0; i < TmpList.Count; i++)
  198. {
  199. dataGridView_TableSetting[1, TmpList[i]].Value = numericUpDown_MultiSet.Value.ToString();
  200. }
  201. }
  202. private void button_Expansion_Click(object sender, EventArgs e)
  203. {
  204. List<int> TmpList = new List<int>();
  205. int Count = 0;
  206. double MaxVal = 0, MinVal = 0,Result = 0;
  207. double Tmpdata = 0;
  208. TmpList = DataGridViewIndexOutput();
  209. TmpList.Sort();
  210. Count = (TmpList[TmpList.Count - 1] - TmpList[0]);
  211. MaxVal = Convert.ToDouble(dataGridView_TableSetting[1,TmpList[TmpList.Count - 1]].Value);
  212. MinVal = Convert.ToDouble(dataGridView_TableSetting[1, TmpList[0]].Value);
  213. Result = (MaxVal - MinVal) / Count;
  214. for (int i = 0; i < (Count - 1); i++)
  215. {
  216. Tmpdata = Convert.ToDouble(dataGridView_TableSetting[1, TmpList[0] + i].Value);
  217. dataGridView_TableSetting[1, TmpList[0] + (i + 1) ].Value = string.Format("{0:0.0}",Math.Round(Tmpdata + Result, 1));
  218. }
  219. /* for (int i = 0; i < TmpList.Count; i++)
  220. {
  221. dataGridView_TableSetting[1, TmpList[i]].Value = numericUpDown_MultiSet.Value.ToString();
  222. }*/
  223. }
  224. private void button_Initalize_Click(object sender, EventArgs e)
  225. {
  226. for (int i = 0; i < dataGridView_TableSetting.RowCount; i++)
  227. {
  228. dataGridView_TableSetting[1, i].Value = 0;
  229. }
  230. }
  231. private void button_CurrentOutput_Click(object sender, EventArgs e)
  232. {
  233. }
  234. private void button_MultiOffset_Click(object sender, EventArgs e)
  235. {
  236. List<int> TmpList = new List<int>();
  237. TmpList = DataGridViewIndexOutput();
  238. double CurrentVal = 0, SumVal = 0;
  239. for (int i = 0; i < TmpList.Count; i++)
  240. {
  241. CurrentVal = Convert.ToDouble(dataGridView_TableSetting[1, TmpList[i]].Value);
  242. SumVal = Convert.ToDouble(numericUpDown_MultiOffset.Value);
  243. dataGridView_TableSetting[1, TmpList[i]].Value = Convert.ToString(CurrentVal + SumVal);
  244. }
  245. }
  246. // Bluecell_Serial bluecellserial = new Bluecell_Serial();
  247. private void button_PortOpen_Click(object sender, EventArgs e)
  248. {
  249. bool ret = false;
  250. ret = Serial_connectiondisable(serial.Serial_PortOpen(ref button_PortOpen, ref comboBox_Port));
  251. if (ret == false && timer_JdasMbic.Enabled == false)
  252. {
  253. timer_JdasMbic.Start(); //타이머를 발동시킨다.
  254. }
  255. else if (timer_JdasMbic.Enabled == true)
  256. {
  257. timer_JdasMbic.Stop(); //타이머를 멈춘다.
  258. }
  259. else
  260. {
  261. /*NOP*/
  262. }
  263. serial.Serial_Main_Form_Get(this);
  264. }
  265. private void button_terminal_Click(object sender, EventArgs e)
  266. {
  267. serial.Serial_TerminalOpen(serial);
  268. }
  269. public bool Serial_connectiondisable(Boolean on_off)
  270. {
  271. comboBox_Port.Enabled = on_off;
  272. comboBox_baudrate.Enabled = on_off;
  273. return on_off;
  274. }
  275. public bool TX_RX_Light = false;
  276. private delegate void StringSend(string Text);
  277. private delegate void GridviewSend(ref object gridview, string Text);
  278. private delegate void ByteSend(byte[] Text);
  279. int offset = 0;
  280. byte[] rxBuffer;
  281. #if false
  282. private void sPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
  283. {
  284. string startStr = "V";
  285. string endStr = "\n";
  286. try
  287. {
  288. if (offset == 0)
  289. {
  290. rxBuffer = new byte[4096];
  291. }
  292. string rxString = "";
  293. int intRecSize = serialPort_JdasMbic.BytesToRead;
  294. if (intRecSize != 0)
  295. {
  296. /* if (panel_GpsTest.Visible == true)
  297. {
  298. byte[] btdata = new byte[intRecSize];
  299. serialPort_JdasMbic.Read(btdata, 0, intRecSize);
  300. string data = Encoding.Default.GetString(rxBuffer);
  301. this.Invoke(new StringSend(Data_Recv_Str), data);
  302. }
  303. else*/
  304. {
  305. serialPort_JdasMbic.Read(rxBuffer, offset, intRecSize);
  306. offset += intRecSize;
  307. for (int iTemp = 0; iTemp < offset; iTemp++)
  308. {
  309. rxString += Convert.ToChar(rxBuffer[iTemp]);
  310. }
  311. /*
  312. *
  313. * Example
  314. * if (panel_SensorTest.Visible == true)
  315. {
  316. startStr = "V";
  317. endStr = "\n";
  318. }
  319. else if (panel_Catm1Test.Visible == true)
  320. {
  321. startStr = "B";
  322. endStr = "\n";
  323. }
  324. else if (panel_GpsTest.Visible == true)
  325. {
  326. startStr = "$";
  327. endStr = "\n";
  328. }
  329. */
  330. if (rxString.Contains(startStr))
  331. {
  332. rxString = rxString.Substring(rxString.IndexOf(startStr));
  333. if (rxString.Contains(endStr))
  334. {
  335. this.Invoke(new StringSend(Data_Recv_Str), rxString);
  336. //program.dataReceived(rxString, "Receive");
  337. offset = 0;
  338. }
  339. }
  340. else
  341. {
  342. this.Invoke(new StringSend(Data_Recv_Str), rxString);
  343. offset = 0;
  344. }
  345. }
  346. }
  347. }
  348. catch { }
  349. }
  350. #endif
  351. int LineLimit = 500;
  352. [DllImport("user32.dll")]
  353. public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
  354. private const int WM_SETREDRAW = 11;
  355. public void Data_Recv_Str(string text)
  356. {
  357. System.Windows.Forms.RichTextBox tbReceived = null;
  358. //tbReceived = richTextBox_Sensor;
  359. int nLimitLines = Convert.ToInt32(LineLimit); //제한 라인 수
  360. try
  361. {
  362. try
  363. {
  364. SendMessage(this.Handle, WM_SETREDRAW, false, 0);
  365. }
  366. catch (Exception e) { MessageBox.Show(e.StackTrace); }
  367. if (tbReceived.Lines.Length > nLimitLines)
  368. {
  369. LinkedList<string> tempLines = new LinkedList<string>(tbReceived.Lines);
  370. while ((tempLines.Count - nLimitLines) > 0)
  371. {
  372. tempLines.RemoveFirst();
  373. }
  374. tbReceived.Lines = tempLines.ToArray();
  375. }
  376. try
  377. {
  378. SendMessage(this.Handle, WM_SETREDRAW, true, 0);
  379. }
  380. catch { return; }
  381. /* Example
  382. if (panel_SensorTest.Visible == true)
  383. {
  384. Sensor_TestFunc(text);
  385. tbReceived.AppendText(text);
  386. }
  387. else
  388. {
  389. tbReceived.AppendText(text);
  390. }
  391. */
  392. tbReceived.SelectionStart = tbReceived.Text.Length;//맨 마지막 선택...
  393. tbReceived.ScrollToCaret();
  394. }
  395. catch { try { SendMessage(this.Handle, WM_SETREDRAW, true, 0); } catch { return; } }
  396. }
  397. public void Data_Recv_Str(byte[] text)
  398. {
  399. string strtext = Encoding.Default.GetString(text);
  400. System.Windows.Forms.RichTextBox tbReceived = null;
  401. // tbReceived = richTextBox_Sensor;
  402. int nLimitLines = Convert.ToInt32(LineLimit); //제한 라인 수
  403. try
  404. {
  405. try
  406. {
  407. SendMessage(this.Handle, WM_SETREDRAW, false, 0);
  408. }
  409. catch (Exception e) { MessageBox.Show(e.StackTrace); }
  410. if (tbReceived.Lines.Length > nLimitLines)
  411. {
  412. LinkedList<string> tempLines = new LinkedList<string>(tbReceived.Lines);
  413. while ((tempLines.Count - nLimitLines) > 0)
  414. {
  415. tempLines.RemoveFirst();
  416. }
  417. tbReceived.Lines = tempLines.ToArray();
  418. }
  419. try
  420. {
  421. SendMessage(this.Handle, WM_SETREDRAW, true, 0);
  422. }
  423. catch { return; }
  424. /* Example
  425. if (panel_SensorTest.Visible == true)
  426. {
  427. Sensor_TestFunc(strtext);
  428. tbReceived.AppendText(strtext);
  429. }
  430. else
  431. {
  432. tbReceived.AppendText(strtext);
  433. }
  434. */
  435. tbReceived.SelectionStart = tbReceived.Text.Length;//맨 마지막 선택...
  436. tbReceived.ScrollToCaret();
  437. }
  438. catch { try { SendMessage(this.Handle, WM_SETREDRAW, true, 0); } catch { return; } }
  439. }
  440. Int64 Timer_Cnt = 0;
  441. Int32 ReqTimer_Cnt = 0;
  442. private void timer1_Tick(object sender, EventArgs e)
  443. {
  444. Update_Serial update_Serial = null;
  445. bool req_set = false;
  446. if (update_Serial == null)
  447. {
  448. update_Serial = (Update_Serial)serial.FileDownloadClass_Get();
  449. if (update_Serial == null)
  450. req_set = true;
  451. else if (update_Serial.Update_ready == false)
  452. req_set = true;
  453. }
  454. if (req_set)
  455. {
  456. ReqTimer_Cnt++;
  457. }
  458. if (TX_RX_Light == true)
  459. {
  460. Timer_Cnt++;
  461. }
  462. if (Timer_Cnt < 1000)
  463. {
  464. if (this.pictureBox_G_TX.Visible == true)
  465. {
  466. TX_Light_OFF();
  467. }
  468. if (this.pictureBox_G_RX.Visible == true)
  469. {
  470. RX_Light_OFF();
  471. }
  472. Timer_Cnt = 0;
  473. TX_RX_Light = false;
  474. }
  475. if (ReqTimer_Cnt > 6)
  476. {
  477. // bluecell_BootProtocol.Bluecell_RF_Status_Req(serial);
  478. ReqTimer_Cnt = 0;
  479. }
  480. }
  481. private void radioButton_ATT_CheckedChanged(object sender, EventArgs e)
  482. {
  483. RadioButton radioButton = (RadioButton)sender;
  484. switch (radioButton.Text)
  485. {
  486. case "ATT1":
  487. label_Table_ATTDL.Text = "ATT_DL1";
  488. label_Table_ATTUL.Text = "ATT_UL1";
  489. break;
  490. case "ATT2":
  491. label_Table_ATTDL.Text = "ATT_DL2";
  492. label_Table_ATTUL.Text = "ATT_UL2";
  493. break;
  494. case "ATT3":
  495. label_Table_ATTDL.Text = "ATT_DL3";
  496. label_Table_ATTUL.Text = "ATT_UL3";
  497. break;
  498. case "ATT4":
  499. label_Table_ATTDL.Text = "ATT_DL4";
  500. label_Table_ATTUL.Text = "ATT_UL4";
  501. break;
  502. }
  503. }
  504. private void button_TableDL_Click(object sender, EventArgs e)
  505. {
  506. }
  507. private void button_TableUL_Click(object sender, EventArgs e)
  508. {
  509. }
  510. Update_Serial file = new Update_Serial();
  511. private void button_FirmwareUpdate_Click(object sender, EventArgs e)
  512. {
  513. OpenFileDialog ofd = new OpenFileDialog();
  514. //FileDownload file = new FileDownload();
  515. if (setcheck_checkBox.Checked == true)
  516. setcheck_checkBox.Checked = false;
  517. file.ShowFileOpenDialog(ref serial, ofd);
  518. }
  519. public void TX_Light_ON()
  520. {
  521. this.pictureBox_G_TX.Visible = true;
  522. this.pictureBox_R_TX.Visible = false;
  523. }
  524. public void TX_Light_OFF()
  525. {
  526. this.pictureBox_R_TX.Visible = true;
  527. this.pictureBox_G_TX.Visible = false;
  528. }
  529. public void RX_Light_ON()
  530. {
  531. this.pictureBox_G_RX.Visible = true;
  532. this.pictureBox_R_RX.Visible = false;
  533. }
  534. public void RX_Light_OFF()
  535. {
  536. this.pictureBox_R_RX.Visible = true;
  537. this.pictureBox_G_RX.Visible = false;
  538. }
  539. const byte BLUECELL_RESET_LENGTH = 7;
  540. public const byte BLUECELL_HEADER = 0xBE;
  541. public const byte BLUECELL_TAILER = 0xEB;
  542. private void button_DL1_Click(object sender, EventArgs e)
  543. {
  544. byte[] temp_buf = new byte[BLUECELL_RESET_LENGTH];
  545. temp_buf[(int)Bluecell_ProtIndex_p.Bluecell_Header] = BLUECELL_HEADER;
  546. temp_buf[(int)Bluecell_ProtIndex_p.Bluecell_Type] = 0x01;
  547. temp_buf[(int)Bluecell_ProtIndex_p.Bluecell_Length] = 6;
  548. temp_buf[(int)Bluecell_ProtIndex_p.Bluecell_CrcIndex] = 5;
  549. temp_buf[(int)Bluecell_ProtIndex_p.Bluecell_data] = 1;
  550. temp_buf[(int)Bluecell_ProtIndex_p.Bluecell_data + 1] = 1;
  551. temp_buf[(int)Bluecell_ProtIndex_p.Bluecell_data + 2] = 1;
  552. serial.Serial_DataSend(temp_buf, temp_buf.Length);
  553. }
  554. private void button_UL1_Click(object sender, EventArgs e)
  555. {
  556. }
  557. private void button_DL3_Click(object sender, EventArgs e)
  558. {
  559. }
  560. private void button_UL3_Click(object sender, EventArgs e)
  561. {
  562. }
  563. private void button_DL4_Click(object sender, EventArgs e)
  564. {
  565. }
  566. private void button_UL4_Click(object sender, EventArgs e)
  567. {
  568. }
  569. private void button_DL2_Click(object sender, EventArgs e)
  570. {
  571. }
  572. private void button_UL2_Click(object sender, EventArgs e)
  573. {
  574. }
  575. }
  576. }