锐腾搅拌上料功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

635 lines
23 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using DevExpress.XtraEditors;
  9. using ICSSoft.Frame.User.BLL;
  10. using ICSSoft.Base.Language.Tool;
  11. using ICSSoft.Base.UserControl.MessageControl;
  12. using System.Data.SqlClient;
  13. using ICSSoft.Base.Config.AppConfig;
  14. using ICSSoft.Base.Report.Filter;
  15. using ICSSoft.Base.Config.DBHelper;
  16. using ICSSoft.Base.UserControl.FormControl;
  17. using ICSSoft.Base.ReferForm.AppReferForm;
  18. using ICSSoft.Base.Lable.PrintTool;
  19. using ICSSoft.Frame.Data.BLL;
  20. using ICSSoft.Frame.Data.Entity;
  21. namespace ICSSoft.Frame.APP
  22. {
  23. public partial class FormICSMaterielCreate : DevExpress.XtraEditors.XtraForm
  24. {
  25. private FormICSPurchaseLOTUIModelX RecInfo;
  26. private string CODE;
  27. private string RowNo;
  28. private string invStd;
  29. private string type;
  30. #region 构造函数
  31. public FormICSMaterielCreate(string code,string rowNO,string InvStd,string Type)
  32. {
  33. InitializeComponent();
  34. chkBtnAll.Checked = false;
  35. chkBtnNo.Checked = true;
  36. CODE = code;
  37. RowNo = rowNO;
  38. invStd = InvStd;
  39. GetRecInfo();
  40. if (RecInfo == null)
  41. {
  42. throw new Exception("入库单信息取得失败");
  43. }
  44. //if (RecInfo.item.ItemCtrType == null || RecInfo.item.ItemCtrType.ItemCtrTypeCode == "")
  45. //{
  46. // throw new Exception("入库单对应料品的控管类型为空,无法生成条码");
  47. //}
  48. }
  49. #endregion
  50. #region 移动窗体
  51. private const int WM_NCHITTEST = 0x84;
  52. private const int HTCLIENT = 0x1;
  53. private const int HTCAPTION = 0x2;
  54. //首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
  55. //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
  56. //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
  57. //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
  58. //重写窗体,使窗体可以不通过自带标题栏实现移动
  59. protected override void WndProc(ref Message m)
  60. {
  61. //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
  62. //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
  63. //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
  64. //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
  65. switch (m.Msg)
  66. {
  67. case WM_NCHITTEST:
  68. base.WndProc(ref m);
  69. if ((int)m.Result == HTCLIENT)
  70. m.Result = (IntPtr)HTCAPTION;
  71. return;
  72. }
  73. //拦截双击标题栏、移动窗体的系统消息
  74. if (m.Msg != 0xA3)
  75. {
  76. base.WndProc(ref m);
  77. }
  78. }
  79. #endregion
  80. #region 退出
  81. private void btnClose_Click(object sender, EventArgs e)
  82. {
  83. AppConfig.CloseFormShow(this.Text);
  84. this.Close();
  85. }
  86. private void btnExit_Click(object sender, EventArgs e)
  87. {
  88. AppConfig.CloseFormShow(this.Text);
  89. this.Close();
  90. }
  91. #endregion
  92. private void GetRecInfo()
  93. {
  94. RecInfo = ICSMaterielLOTBLL.SearchInfo(CODE, RowNo, AppConfig.AppConnectString);
  95. init();
  96. }
  97. decimal a = 0;
  98. private void init()
  99. {
  100. txtSumNo.Text = "";
  101. txtNowNo.Text = "";
  102. txtNowQty.Text = "";
  103. txtSumQty.Text = "";
  104. txtAllQty.Text = "";
  105. btnLabelCreate.Enabled = true;
  106. if (RecInfo == null)
  107. {
  108. return;
  109. }
  110. //if (RecInfo.item != null)
  111. //{
  112. // if (RecInfo.item.ItemCtrType == null)
  113. // {
  114. // btnLabelCreate.Enabled = false;
  115. // }
  116. //if (RecInfo.item.ItemCtrType.ItemCtrTypeCode == ATVControlParam.ItemCtrlEnum.PieceCtrl.Code)
  117. //{
  118. // txtNowPackQty.Text = "1";
  119. // txtNowPackQty.Properties.ReadOnly = true;
  120. // chkBtnPack.Checked = false;
  121. // chkBtnPack.Checked = true;
  122. // chkBtnAll.Enabled = false;
  123. // chkBtnNo.Enabled = false;
  124. // chkBtnPack.Enabled = false;
  125. //}
  126. //else
  127. //{
  128. //txtNowPackQty.Text = "1";
  129. txtNowPackQty.Properties.ReadOnly = false;
  130. //chkBtnPack.Checked = false;
  131. //chkBtnPack.Checked = true;
  132. chkBtnAll.Enabled = true;
  133. chkBtnNo.Enabled = true;
  134. chkBtnPack.Enabled = true;
  135. //}
  136. //}
  137. txtSumQty.Text = RecInfo.SumQty.ToString();
  138. txtSumNo.Text = RecInfo.SumNo.ToString();
  139. a = RecInfo.Arrive.iQuantity - RecInfo.SumQty;
  140. txtNowQty.Text = (RecInfo.Arrive.iQuantity - RecInfo.SumQty > 0 ? RecInfo.Arrive.iQuantity - RecInfo.SumQty : 0).ToString();
  141. //txtNowNo.Text = Math.Ceiling(decimal.Parse(txtNowQty.Text)).ToString();
  142. if (string.IsNullOrWhiteSpace(RecInfo.inventory.INVCARTONQTY.ToString()))
  143. {
  144. txtNowPackQty.Text = "1";
  145. txtNowNo.Text = Math.Ceiling(decimal.Parse(txtNowQty.Text)).ToString();
  146. }
  147. else
  148. {
  149. if (RecInfo.inventory.INVCARTONQTY == 0)
  150. {
  151. txtNowPackQty.Text = "1";
  152. txtNowNo.Text = txtNowQty.Text;
  153. }
  154. else
  155. {
  156. txtNowPackQty.Text = RecInfo.inventory.INVCARTONQTY.ToString();
  157. txtNowNo.Text = Math.Ceiling(decimal.Parse(txtNowQty.Text) / decimal.Parse(RecInfo.inventory.INVCARTONQTY.ToString())).ToString();
  158. }
  159. }
  160. txtAllQty.Text = (decimal.Parse(txtSumQty.Text) + decimal.Parse(txtNowQty.Text)).ToString();
  161. txtAllNo.Text = (decimal.Parse(txtSumNo.Text) + decimal.Parse(txtNowNo.Text)).ToString();
  162. }
  163. private void btnLabelCreate_Click(object sender, EventArgs e)
  164. {
  165. string VLotNo = ""; string Lot_NO = "";
  166. if (RecInfo == null)
  167. {
  168. ICSBaseSimpleCode.AppshowMessageBox("入库单信息取得失败");
  169. return;
  170. }
  171. if (string.IsNullOrWhiteSpace(RecInfo.Arrive.cCode) || string.IsNullOrWhiteSpace(RecInfo.Arrive.irowno.ToString()))
  172. {
  173. ICSBaseSimpleCode.AppshowMessageBox("生产订单号或生产订单号行号不能为空!");
  174. return;
  175. }
  176. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在生成条码……");
  177. try
  178. {
  179. _wait.Show();
  180. Decimal totalQty = decimal.Parse(txtNowQty.Text);
  181. decimal pieceQty = decimal.Parse(txtNowPackQty.Text);
  182. int Num = int.Parse(txtNowNo.Text);
  183. if (pieceQty * Num < totalQty || pieceQty * (Num - 1) >= totalQty)
  184. {
  185. throw new Exception("条码数量计算出错,请重新计算");
  186. }
  187. decimal Qty = decimal.Parse(txtNowPackQty.Text);
  188. if (Num <= 0)
  189. {
  190. throw new Exception("条码张数不能为0");
  191. }
  192. if (Qty <= 0)
  193. {
  194. throw new Exception("条码数量不能为0");
  195. }
  196. List<ICSITEMLot> InfoList = new List<ICSITEMLot>();
  197. int m = 0;
  198. int count = Convert.ToInt32(RecInfo.MaxNo);
  199. DateTime time = AppConfig.GetSeverDateTime("yyyy-MM-dd");
  200. string timeStr=time.ToString("yyMMdd");
  201. string sql = @"SELECT MAX(A.VenderLotNO) AS VenderLotNO FROM ICSITEMLot A WHERE TransNO ='{0}' AND TransLine='{1}'";
  202. sql = string.Format(sql, CODE, RowNo);
  203. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  204. if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0]["VenderLotNO"].ToString()))
  205. {
  206. VLotNo = (dt.Rows[0][0].ToString().Substring(0, dt.Rows[0][0].ToString().Length - 3)).ToString() + (Convert.ToInt32(dt.Rows[0][0].ToString().Substring(dt.Rows[0][0].ToString().Length - 3)) + 1).ToString().PadLeft(3, '0');
  207. }
  208. else
  209. {
  210. VLotNo = timeStr.Substring(timeStr.Length - 6) + (RecInfo.TodayMOCount ).ToString().PadLeft(3, '0'); //生产批号,每个批次一个
  211. }
  212. string timeLot = time.ToString("yyyyMMdd");
  213. string sql1 = @"SELECT MAX(A.LotNO) AS LotNO FROM ICSITEMLot A WHERE A.LotNO like '%{2}%'";
  214. sql1 = string.Format(sql1, CODE, RowNo, timeLot);
  215. DataTable ds = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql1).Tables[0];
  216. if (ds != null && ds.Rows.Count > 0 && !string.IsNullOrEmpty(ds.Rows[0]["LotNO"].ToString()))
  217. {
  218. Lot_NO = ds.Rows[0]["LOTNO"].ToString();
  219. m = int.Parse(Lot_NO.Substring(Lot_NO.Length - 4));
  220. }
  221. for (int i = 0; i < Num; i++)
  222. {
  223. int b = m + i + 1;
  224. _wait.Caption = "正在生成条码……" + " " + i.ToString() + "/" + Num.ToString();
  225. _wait.Refresh();
  226. ICSITEMLot Info = new ICSITEMLot();
  227. Info.ID = "";
  228. if (Qty < totalQty - Qty * i)
  229. {
  230. Info.LOTQTY = Qty;
  231. }
  232. else
  233. {
  234. Info.LOTQTY = totalQty - Qty * i;
  235. }
  236. Info.LotNO ="7"+ timeLot+b.ToString().PadLeft(4, '0');
  237. Info.ItemCode = RecInfo.Arrive.cInvCode;
  238. Info.TransNO = RecInfo.Arrive.cCode;
  239. Info.TransLine = Convert.ToString(RecInfo.Arrive.irowno);
  240. Info.VENDORITEMCODE = "";
  241. Info.VenderLotNO = VLotNo;
  242. //if (!string.IsNullOrWhiteSpace(RecInfo.VenderLotNO))
  243. // Info.VenderLotNO = RecInfo.VenderLotNO;
  244. //else
  245. // Info.VenderLotNO = timeStr.Substring(timeStr.Length-6) + (RecInfo.TodayMOCount+1).ToString().PadLeft(3,'0'); //生产批号,每个工单一个
  246. Info.PRODUCTDATE = time;
  247. Info.ACTIVE = "Y";
  248. Info.Exdate = Convert.ToDateTime("2999-12-31");
  249. //Info.TYPE = RecInfo.Arrive.TYPE;
  250. InfoList.Add(Info);
  251. }
  252. _wait.Caption = "条码生成成功,正在上传数据";
  253. _wait.Refresh();
  254. ICSMaterielLOTBLL.Add(InfoList,AppConfig.AppConnectString);
  255. //_wait.Caption = "数据上传完成,正在打开条码打印";
  256. //_wait.Refresh();
  257. //GetRecInfo();
  258. _wait.Close();
  259. this.Close();
  260. }
  261. catch (Exception ex)
  262. {
  263. _wait.Close();
  264. ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
  265. }
  266. }
  267. private void chkBtnAll_CheckedChanged(object sender, EventArgs e)
  268. {
  269. if (chkBtnAll.Checked == true)
  270. {
  271. chkBtnAll.Checked = true;
  272. chkBtnNo.Checked = false;
  273. chkBtnPack.Checked = false;
  274. chkBtnCheckedCharge();
  275. }
  276. }
  277. private void chkBtnNo_CheckedChanged(object sender, EventArgs e)
  278. {
  279. if (chkBtnNo.Checked == true)
  280. {
  281. chkBtnAll.Checked = false;
  282. chkBtnNo.Checked = true;
  283. chkBtnPack.Checked = false;
  284. chkBtnCheckedCharge();
  285. }
  286. }
  287. private void chkBtnPack_CheckedChanged(object sender, EventArgs e)
  288. {
  289. if (chkBtnPack.Checked == true)
  290. {
  291. chkBtnAll.Checked = false;
  292. chkBtnNo.Checked = false;
  293. chkBtnPack.Checked = true;
  294. chkBtnCheckedCharge();
  295. }
  296. }
  297. private void chkBtnCheckedCharge()
  298. {
  299. if (chkBtnAll.Checked == true)
  300. {
  301. chkBtnAll.Checked = true;
  302. chkBtnNo.Checked = false;
  303. chkBtnPack.Checked = false;
  304. this.chkBtnAll.Image = global::ICSSoft.Frame.APP.Properties.Resources.header_complete;
  305. this.chkBtnNo.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  306. this.chkBtnPack.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  307. txtNowQty.Properties.ReadOnly = false;
  308. txtNowNo.Properties.ReadOnly = true;
  309. txtNowPackQty.Properties.ReadOnly = false;
  310. }
  311. else if (chkBtnNo.Checked == true)
  312. {
  313. chkBtnAll.Checked = false;
  314. chkBtnNo.Checked = true;
  315. chkBtnPack.Checked = false;
  316. this.chkBtnAll.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  317. this.chkBtnNo.Image = global::ICSSoft.Frame.APP.Properties.Resources.header_complete;
  318. this.chkBtnPack.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  319. txtNowQty.Properties.ReadOnly = false;
  320. txtNowNo.Properties.ReadOnly = true;
  321. txtNowPackQty.Properties.ReadOnly = false;
  322. }
  323. else if (chkBtnPack.Checked == true)
  324. {
  325. chkBtnAll.Checked = false;
  326. chkBtnNo.Checked = false;
  327. chkBtnPack.Checked = true;
  328. this.chkBtnAll.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  329. this.chkBtnNo.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  330. this.chkBtnPack.Image = global::ICSSoft.Frame.APP.Properties.Resources.header_complete;
  331. txtNowQty.Properties.ReadOnly = false;
  332. txtNowNo.Properties.ReadOnly = true;
  333. txtNowPackQty.Properties.ReadOnly = false;
  334. }
  335. }
  336. private void txtNowPackQty_TextChanged(object sender, EventArgs e)
  337. {
  338. }
  339. private void txtDocOrg_EditValueChanged(object sender, EventArgs e)
  340. {
  341. }
  342. private void txtNowPackQty_EditValueChanged(object sender, EventArgs e)//生成包装箱数量
  343. {
  344. bool isOK = false;
  345. if (this.ActiveControl != null && this.ActiveControl.GetType() == typeof(DevExpress.XtraEditors.TextBoxMaskBox))
  346. {
  347. DevExpress.XtraEditors.TextBoxMaskBox temp = this.ActiveControl as DevExpress.XtraEditors.TextBoxMaskBox;
  348. if (temp.OwnerEdit.Name == ((DevExpress.XtraEditors.TextEdit)sender).Name)
  349. {
  350. isOK = true;
  351. }
  352. }
  353. if (!isOK)
  354. {
  355. return;
  356. }
  357. decimal No = 0;
  358. decimal Qty = 0;
  359. decimal Pack = 0;
  360. decimal Sqty = 0;
  361. decimal.TryParse(txtNowNo.Text, out No);
  362. decimal.TryParse(txtNowQty.Text, out Qty);
  363. decimal.TryParse(txtNowPackQty.Text, out Pack);
  364. if (txtNowNo.Properties.ReadOnly == true)
  365. {
  366. if (Pack == 0)
  367. {
  368. ICSBaseSimpleCode.AppshowMessageBox("包装量不能为0");
  369. return;
  370. }
  371. Sqty = Math.Ceiling(Qty / Pack);
  372. txtNowNo.Text = Sqty.ToString();
  373. txtNowQty.Text = Qty.ToString();
  374. txtNowPackQty.Text = Pack.ToString();
  375. }
  376. if (txtNowQty.Properties.ReadOnly == true)
  377. {
  378. if (Pack != 0)
  379. {
  380. Sqty = Math.Ceiling(Qty / Pack);
  381. txtNowNo.Text = Sqty.ToString();
  382. txtNowQty.Text = Qty.ToString();
  383. txtNowPackQty.Text = Pack.ToString();
  384. }
  385. else
  386. {
  387. No = 0;
  388. }
  389. }
  390. }
  391. private void txtNowNo_EditValueChanged(object sender, EventArgs e) //生成打印数量
  392. {
  393. bool isOK = false;
  394. if (this.ActiveControl != null && this.ActiveControl.GetType() == typeof(DevExpress.XtraEditors.TextBoxMaskBox))
  395. {
  396. DevExpress.XtraEditors.TextBoxMaskBox temp = this.ActiveControl as DevExpress.XtraEditors.TextBoxMaskBox;
  397. if (temp.OwnerEdit.Name == ((DevExpress.XtraEditors.TextEdit)sender).Name)
  398. {
  399. isOK = true;
  400. }
  401. }
  402. if (!isOK)
  403. {
  404. return;
  405. }
  406. decimal No;
  407. decimal Qty;
  408. decimal Pack;
  409. decimal Sqty = 0;
  410. decimal.TryParse(txtNowNo.Text, out No);
  411. decimal.TryParse(txtNowQty.Text, out Qty);
  412. decimal.TryParse(txtNowPackQty.Text, out Pack);
  413. if (txtNowPackQty.Properties.ReadOnly == true)
  414. {
  415. Sqty = Math.Ceiling(Qty / Pack);
  416. txtNowNo.Text = Sqty.ToString();
  417. txtNowQty.Text = Qty.ToString();
  418. txtNowPackQty.Text = Pack.ToString();
  419. }
  420. if (txtNowQty.Properties.ReadOnly == true)
  421. {
  422. if (No != 0)
  423. {
  424. Sqty = Math.Ceiling(Qty / Pack);
  425. txtNowNo.Text = Sqty.ToString();
  426. txtNowQty.Text = Qty.ToString();
  427. txtNowPackQty.Text = Pack.ToString();
  428. }
  429. else
  430. {
  431. Pack = 0;
  432. }
  433. }
  434. }
  435. private void txtNowQty_EditValueChanged(object sender, EventArgs e) //生成总数
  436. {
  437. bool isOK = false;
  438. if (this.ActiveControl != null && this.ActiveControl.GetType() == typeof(DevExpress.XtraEditors.TextBoxMaskBox))
  439. {
  440. DevExpress.XtraEditors.TextBoxMaskBox temp = this.ActiveControl as DevExpress.XtraEditors.TextBoxMaskBox;
  441. if (temp.OwnerEdit.Name == ((DevExpress.XtraEditors.TextEdit)sender).Name)
  442. {
  443. isOK = true;
  444. }
  445. }
  446. if (!isOK)
  447. {
  448. return;
  449. }
  450. decimal No = 0;
  451. decimal Qty = 0;
  452. decimal Pack = 0;
  453. decimal Sqty = 0;
  454. decimal.TryParse(txtNowNo.Text, out No);
  455. decimal.TryParse(txtNowQty.Text, out Qty);
  456. decimal.TryParse(txtNowPackQty.Text, out Pack);
  457. if (txtNowPackQty.Properties.ReadOnly == true)
  458. {
  459. if (Pack != 0)
  460. {
  461. if (Pack == 0)
  462. {
  463. ICSBaseSimpleCode.AppshowMessageBox("包装量不能为0");
  464. return;
  465. }
  466. Sqty = Math.Ceiling(Qty / Pack);
  467. txtNowNo.Text = Sqty.ToString();
  468. txtNowQty.Text = Qty.ToString();
  469. txtNowPackQty.Text = Pack.ToString();
  470. }
  471. }
  472. if (txtNowNo.Properties.ReadOnly == true)
  473. {
  474. if (Pack == 0)
  475. {
  476. ICSBaseSimpleCode.AppshowMessageBox("包装量不能为0");
  477. return;
  478. }
  479. Sqty = Math.Ceiling(Qty / Pack);
  480. txtNowNo.Text = Sqty.ToString();
  481. txtNowQty.Text = Qty.ToString();
  482. txtNowPackQty.Text = Pack.ToString();
  483. }
  484. }
  485. private void txtNowPackQty_KeyDown(object sender, KeyEventArgs e)
  486. {
  487. try
  488. {
  489. if (e.KeyCode == Keys.Enter)
  490. {
  491. bool isOK = false;
  492. if (this.ActiveControl != null && this.ActiveControl.GetType() == typeof(DevExpress.XtraEditors.TextBoxMaskBox))
  493. {
  494. DevExpress.XtraEditors.TextBoxMaskBox temp = this.ActiveControl as DevExpress.XtraEditors.TextBoxMaskBox;
  495. if (temp.OwnerEdit.Name == ((DevExpress.XtraEditors.TextEdit)sender).Name)
  496. {
  497. isOK = true;
  498. }
  499. }
  500. if (!isOK)
  501. {
  502. return;
  503. }
  504. decimal No = 0;
  505. decimal Qty = 0;
  506. decimal Pack = 0;
  507. decimal Sqty = 0;
  508. decimal.TryParse(txtNowNo.Text, out No);
  509. decimal.TryParse(txtNowQty.Text, out Qty);
  510. decimal.TryParse(txtNowPackQty.Text, out Pack);
  511. if (txtNowNo.Properties.ReadOnly == true)
  512. {
  513. if (Pack == 0)
  514. {
  515. ICSBaseSimpleCode.AppshowMessageBox("包装量不能为0");
  516. return;
  517. }
  518. Sqty = Math.Ceiling(Qty / Pack);
  519. txtNowNo.Text = Sqty.ToString();
  520. txtNowQty.Text = Qty.ToString();
  521. txtNowPackQty.Text = Pack.ToString();
  522. }
  523. if (txtNowQty.Properties.ReadOnly == true)
  524. {
  525. if (Pack != 0)
  526. {
  527. Sqty = Math.Ceiling(Qty / Pack);
  528. txtNowNo.Text = Sqty.ToString();
  529. txtNowQty.Text = Qty.ToString();
  530. txtNowPackQty.Text = Pack.ToString();
  531. }
  532. else
  533. {
  534. No = 0;
  535. }
  536. }
  537. }
  538. }
  539. catch (Exception ex)
  540. {
  541. throw ex;
  542. }
  543. }
  544. private void txtNowPackQty_EditValueChanged_1(object sender, EventArgs e)
  545. {
  546. }
  547. }
  548. }