终端一体化运控平台
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.
 
 
 

657 lines
26 KiB

  1. using BPASmartClient.Compiler;
  2. using BPASmartClient.DATABUS;
  3. using BPASmartClient.MessageCommunication;
  4. using BPASmartClient.MessageCommunication.MsgControl;
  5. using BPASmartClient.MessageName;
  6. using BPASmartClient.MessageName.EnumHelp;
  7. using BPASmartClient.MessageName.发送消息Model;
  8. using BPASmartClient.MessageName.接收消息Model;
  9. using BPASmartClient.MessageName.接收消息Model.物料仓;
  10. using Newtonsoft.Json;
  11. using System;
  12. using System.Collections;
  13. using System.Collections.Generic;
  14. using System.Collections.ObjectModel;
  15. using System.ComponentModel;
  16. using System.Drawing.Design;
  17. using System.Linq;
  18. using System.Reflection;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using System.Windows;
  22. using System.Windows.Controls;
  23. using System.Windows.Data;
  24. using System.Windows.Documents;
  25. using System.Windows.Input;
  26. using System.Windows.Media;
  27. using System.Windows.Media.Animation;
  28. using System.Windows.Media.Imaging;
  29. using System.Windows.Navigation;
  30. using System.Windows.Shapes;
  31. using System.Windows.Threading;
  32. namespace BPASmartClient.SCADAControl.CustomerControls
  33. {
  34. /// <summary>
  35. /// Silos.xaml 的交互逻辑
  36. /// 物料仓
  37. /// </summary>
  38. public partial class Silos :UserControl, IExecutable, IDisposable
  39. {
  40. #region 临时变量
  41. TextBlock textBlockCLKZ = null;
  42. TextBlock textBlockValue = null;
  43. TextBlock textBlockText = null;
  44. TextBlock textBlockTitle = null;
  45. Ellipse ellipseControl = null;
  46. Storyboard storyboard = new Storyboard();
  47. object typeName;
  48. public List<string> typeNameList = new List<string>();
  49. public Enum @enum = null;
  50. #endregion
  51. public Silos()
  52. {
  53. InitializeComponent();
  54. this.DataContext = this;
  55. Width = 180;
  56. Height = 270;
  57. this.SizeChanged += Silos_SizeChanged; ;
  58. this.Loaded += Silos_Loaded;
  59. }
  60. private void Silos_Loaded(object sender,RoutedEventArgs e)
  61. {
  62. EventReceiveNameList.CollectionChanged += EventNameList_CollectionChanged;
  63. }
  64. private void EventNameList_CollectionChanged(object? sender,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
  65. {
  66. if (EventReceiveNameList.Count > 0)
  67. {
  68. try
  69. {
  70. EventReceiveNameListStr = JsonConvert.SerializeObject(EventReceiveNameList);
  71. }
  72. catch (Exception ex)
  73. {
  74. }
  75. }
  76. }
  77. public string ControlType => "物料仓";
  78. private bool isExecuteState;
  79. public bool IsExecuteState
  80. {
  81. get { return isExecuteState; }
  82. set
  83. {
  84. isExecuteState = value;
  85. if (IsExecuteState)
  86. {
  87. IsEnabled = true;
  88. Register();
  89. //Style = null;
  90. }
  91. }
  92. }
  93. #region 动画
  94. /// <summary>
  95. /// 加载内部变量
  96. /// </summary>
  97. private void Silos_SizeChanged(object sender,SizeChangedEventArgs e)
  98. {
  99. //查找
  100. if (ellipseControl == null)
  101. {
  102. foreach (Ellipse tb in FindVisualChildren<Ellipse>(this))
  103. {
  104. // do something with tb here
  105. if (tb.Tag != null)
  106. {
  107. if (tb.Tag.ToString() == "出料圆")
  108. {
  109. ellipseControl = tb;
  110. storyboard.RepeatBehavior = RepeatBehavior.Forever;
  111. DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames();
  112. Storyboard.SetTarget(animation,ellipseControl);
  113. Storyboard.SetTargetProperty(animation,new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"));
  114. animation.KeyFrames.Add(new EasingDoubleKeyFrame(0,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
  115. animation.KeyFrames.Add(new EasingDoubleKeyFrame(180,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
  116. animation.KeyFrames.Add(new EasingDoubleKeyFrame(360,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2))));
  117. storyboard.Children.Add(animation);
  118. }
  119. }
  120. }
  121. foreach (TextBlock tb in FindVisualChildren<TextBlock>(this))
  122. {
  123. // do something with tb here
  124. if (tb.Tag != null)
  125. {
  126. if (tb.Tag.ToString() == "出料控制")
  127. {
  128. textBlockCLKZ = tb;
  129. }
  130. else if (tb.Tag.ToString() == "Value")
  131. {
  132. textBlockValue = tb;
  133. }
  134. else if (tb.Tag.ToString() == "Text")
  135. {
  136. textBlockText = tb;
  137. }
  138. else if (tb.Tag.ToString() == "Title")
  139. {
  140. textBlockTitle = tb;
  141. }
  142. }
  143. }
  144. foreach (StackPanel tb in FindVisualChildren<StackPanel>(this))
  145. {
  146. // do something with tb here
  147. if (tb.Tag != null)
  148. {
  149. if (tb.Tag.ToString() == "ControlEvent")
  150. {
  151. foreach (var item in tb.Children)
  152. {
  153. if (item is Image)
  154. {
  155. (item as Image).MouseLeftButtonDown += Image_MouseLeftButtonDown;
  156. if ((item as Image).Tag != null)
  157. typeNameList.Add((item as Image).Tag?.ToString());
  158. }
  159. else if (item is Button)
  160. {
  161. (item as Button).Click += Button_Click;
  162. if ((item as Button).Tag != null)
  163. typeNameList.Add((item as Button).Tag?.ToString());
  164. }
  165. else if (item is TextBox)
  166. {
  167. (item as TextBox).TextChanged += TextBox_TextChanged;
  168. if ((item as TextBox).Tag != null)
  169. typeNameList.Add((item as TextBox).Tag?.ToString());
  170. }
  171. else if (item is CheckBox)
  172. {
  173. (item as CheckBox).Checked += CheckBox_Checked;
  174. (item as CheckBox).Unchecked += CheckBox_Unchecked;
  175. if ((item as CheckBox).Tag != null)
  176. typeNameList.Add((item as CheckBox).Tag?.ToString());
  177. }
  178. }
  179. @enum = EnumExtensions.CreateEnum(typeNameList,$"{this.Name}ControlEunm");
  180. }
  181. }
  182. }
  183. }
  184. }
  185. public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
  186. {
  187. if (depObj != null)
  188. {
  189. for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
  190. {
  191. DependencyObject child = VisualTreeHelper.GetChild(depObj,i);
  192. if (child != null && child is T)
  193. {
  194. yield return (T)child;
  195. }
  196. foreach (T childOfChild in FindVisualChildren<T>(child))
  197. {
  198. yield return childOfChild;
  199. }
  200. }
  201. }
  202. }
  203. #endregion
  204. #region 属性
  205. [Category("值设定")]
  206. public string KgValue
  207. {
  208. get { return (string)GetValue(ValueProperty); }
  209. set { SetValue(ValueProperty,value); }
  210. }
  211. public static readonly DependencyProperty ValueProperty =
  212. DependencyProperty.Register("KgValue", typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
  213. private static void onTargetChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.TargetRefresh();
  214. [Category("值设定")]
  215. public string WLText
  216. {
  217. get { return (string)GetValue(TextProperty); }
  218. set { SetValue(TextProperty,value); }
  219. }
  220. public static readonly DependencyProperty TextProperty =
  221. DependencyProperty.Register("WLText", typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
  222. [Category("值设定")]
  223. public string WLTitle
  224. {
  225. get { return (string)GetValue(TitleProperty); }
  226. set { SetValue(TitleProperty,value); }
  227. }
  228. public static readonly DependencyProperty TitleProperty =
  229. DependencyProperty.Register("WLTitle", typeof(string),typeof(Silos),new PropertyMetadata(new PropertyChangedCallback(onTargetChanged)));
  230. [Category("值设定")]
  231. public int Direction
  232. {
  233. get { return (int)GetValue(DirectionProperty); }
  234. set { SetValue(DirectionProperty,value); }
  235. }
  236. public static readonly DependencyProperty DirectionProperty =
  237. DependencyProperty.Register("Direction",typeof(int),typeof(Silos),
  238. new PropertyMetadata(0,new PropertyChangedCallback(OnPropertyChanged)));
  239. private static void OnPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
  240. {
  241. (d as Silos)?.Refresh();
  242. }
  243. [Category("名称[自动生成]")]
  244. public string EventReceiveNameListStr
  245. {
  246. get { return (string)GetValue(EventReceiveNameListStrProperty); }
  247. set { SetValue(EventReceiveNameListStrProperty,value); }
  248. }
  249. public static readonly DependencyProperty EventReceiveNameListStrProperty =
  250. DependencyProperty.Register("EventReceiveNameListStr",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty,new PropertyChangedCallback(onEventReceiveNameListStrChanged)));
  251. private static void onEventReceiveNameListStrChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.ReceiveNameRefresh();
  252. [Category("消息接收名称集合")]
  253. public ObservableCollection<EventReceiveMessage> EventReceiveNameList
  254. {
  255. get { return (ObservableCollection<EventReceiveMessage>)GetValue(EventReceiveNameListProperty); }
  256. set { SetValue(EventReceiveNameListProperty,value); }
  257. }
  258. public static readonly DependencyProperty EventReceiveNameListProperty =
  259. DependencyProperty.Register("EventReceiveNameList",typeof(ObservableCollection<EventReceiveMessage>),typeof(Silos),new PropertyMetadata(new ObservableCollection<EventReceiveMessage>()));
  260. #endregion
  261. #region 数据绑定模块
  262. public event EventHandler PropertyChange; //声明一个事件
  263. //[Category("数据绑定-数据来源")]
  264. //public DataTypeEnum DataSouceType
  265. //{
  266. // get { return (DataTypeEnum)GetValue(DataSouceTypeProperty); }
  267. // set { SetValue(DataSouceTypeProperty,value); }
  268. //}
  269. //public static readonly DependencyProperty DataSouceTypeProperty =
  270. // DependencyProperty.Register("DataSouceType",typeof(DataTypeEnum),typeof(Silos),new PropertyMetadata(DataTypeEnum.静态数据));
  271. [Category("数据绑定-数据来源")]
  272. public int TimeCount
  273. {
  274. get { return (int)GetValue(TimeCountProperty); }
  275. set { SetValue(TimeCountProperty,value); }
  276. }
  277. public static readonly DependencyProperty TimeCountProperty =
  278. DependencyProperty.Register("TimeCount",typeof(int),typeof(Silos),new PropertyMetadata(5));
  279. //[Category("数据绑定-数据来源")]
  280. //public string DataSouceInformation
  281. //{
  282. // get { return (string)GetValue(DataSouceInformationProperty); }
  283. // set { SetValue(DataSouceInformationProperty,value); }
  284. //}
  285. //public static readonly DependencyProperty DataSouceInformationProperty =
  286. // DependencyProperty.Register("DataSouceInformation",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
  287. //[Category("数据绑定-数据来源")]
  288. //public string DeviceName
  289. //{
  290. // get { return (string)GetValue(DeviceNameProperty); }
  291. // set { SetValue(DeviceNameProperty,value); }
  292. //}
  293. //public static readonly DependencyProperty DeviceNameProperty =
  294. // DependencyProperty.Register("DeviceName",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
  295. //[Category("数据绑定-数据来源")]
  296. //public string DeviceValuleName
  297. //{
  298. // get { return (string)GetValue(DeviceValuleNameProperty); }
  299. // set { SetValue(DeviceValuleNameProperty,value); }
  300. //}
  301. //public static readonly DependencyProperty DeviceValuleNameProperty =
  302. // DependencyProperty.Register("DeviceValuleName",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
  303. [Category("数据绑定")]
  304. public string FDataSouce
  305. {
  306. get { return (string)GetValue(FDataSouceProperty); }
  307. set { SetValue(FDataSouceProperty,value); }
  308. }
  309. public static readonly DependencyProperty FDataSouceProperty =
  310. DependencyProperty.Register("FDataSouce",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty,new PropertyChangedCallback(onFDataSouceChanged)));
  311. private static void onFDataSouceChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) => (d as Silos)?.DataSouceRefresh();
  312. public void DataSouceRefresh()
  313. {
  314. try
  315. {
  316. if (!string.IsNullOrEmpty(FDataSouce))
  317. {
  318. GenerateData = (string)CSharpConfig.GetInstance().RunCSharp(Code,new object[] { FDataSouce });
  319. if (PropertyChange != null)
  320. {
  321. PropertyChange(this,null);
  322. }
  323. }
  324. }
  325. catch (Exception ex)
  326. {
  327. }
  328. }
  329. public static string _code = "public string main(string message) \n{ \n //请在此填写你的代码\n\n return message; \n}\n";
  330. [Category("数据绑定")]
  331. public string Code
  332. {
  333. get { return (string)GetValue(CodeProperty); }
  334. set { SetValue(CodeProperty,value); }
  335. }
  336. public static readonly DependencyProperty CodeProperty =
  337. DependencyProperty.Register("Code",typeof(string),typeof(Silos),new PropertyMetadata(_code));
  338. [Category("数据绑定")]
  339. public string GenerateData
  340. {
  341. get { return (string)GetValue(GenerateDataProperty); }
  342. set { SetValue(GenerateDataProperty,value); }
  343. }
  344. public static readonly DependencyProperty GenerateDataProperty =
  345. DependencyProperty.Register("GenerateData",typeof(string),typeof(Silos),new PropertyMetadata(string.Empty));
  346. #endregion
  347. #region 发送事件名称集合
  348. [Category("事件处理")]
  349. public MessageNameEnum 出料单击事件
  350. {
  351. get { return (MessageNameEnum)GetValue(出料单击事件Property); }
  352. set { SetValue(出料单击事件Property,value); }
  353. }
  354. public static readonly DependencyProperty 出料单击事件Property =
  355. DependencyProperty.Register("出料单击事件",typeof(MessageNameEnum),typeof(Silos),new PropertyMetadata(MessageNameEnum.Null));
  356. [Category("事件处理")]
  357. public MessageNameEnum 停止出料单击事件
  358. {
  359. get { return (MessageNameEnum)GetValue(停止出料单击事件Property); }
  360. set { SetValue(停止出料单击事件Property,value); }
  361. }
  362. public static readonly DependencyProperty 停止出料单击事件Property =
  363. DependencyProperty.Register("停止出料单击事件",typeof(MessageNameEnum),typeof(Silos),new PropertyMetadata(MessageNameEnum.Null));
  364. #endregion
  365. #region 函数
  366. /// <summary>
  367. /// 目标属性刷新
  368. /// </summary>
  369. public void TargetRefresh()
  370. {
  371. if (textBlockValue != null && textBlockText != null && textBlockTitle != null)
  372. {
  373. textBlockValue.Text = KgValue;
  374. textBlockText.Text = WLText;
  375. textBlockTitle.Text = WLTitle;
  376. }
  377. }
  378. /// <summary>
  379. /// 值变化刷新
  380. /// </summary>
  381. public void Refresh()
  382. {
  383. if (ellipseControl != null)
  384. {
  385. if (Direction == 1)
  386. {
  387. ellipseControl.Visibility = Visibility.Visible;
  388. textBlockCLKZ.Visibility = Visibility.Visible;
  389. storyboard.Begin();
  390. }
  391. else if (Direction == 2)
  392. {
  393. ellipseControl.Visibility = Visibility.Collapsed;
  394. textBlockCLKZ.Visibility = Visibility.Collapsed;
  395. storyboard.Stop();
  396. }
  397. else
  398. {
  399. ellipseControl.Visibility = Visibility.Collapsed;
  400. textBlockCLKZ.Visibility = Visibility.Collapsed;
  401. storyboard.Stop();
  402. }
  403. }
  404. }
  405. /// <summary>
  406. /// 运行名称变化事件
  407. /// </summary>
  408. public void RunNameRefresh()
  409. {
  410. }
  411. /// <summary>
  412. /// 接收数据改变
  413. /// </summary>
  414. public void ReceiveNameRefresh()
  415. {
  416. }
  417. #endregion
  418. #region 运行事件
  419. DispatcherTimer timer = new DispatcherTimer();
  420. Dictionary<string, string> propertyBing = new Dictionary<string,string>();
  421. List<string> MessageNameL = null;
  422. public void Register()
  423. {
  424. if (!string.IsNullOrEmpty(EventReceiveNameListStr))
  425. {
  426. try
  427. {
  428. EventReceiveNameList = JsonConvert.DeserializeObject<ObservableCollection<EventReceiveMessage>>(EventReceiveNameListStr);
  429. }
  430. catch (Exception ex)
  431. {
  432. }
  433. }
  434. List<string> MessageNameNew = EventReceiveNameList?.Select(o => o.MeaageName.ToString())?.Distinct()?.ToList();
  435. if (MessageNameL == null || !MessageNameNew.SequenceEqual(MessageNameL))
  436. {
  437. MessageNameL?.ForEach(o => Class_InnerMessageBus.GetInstance().RemoveMessage(o,"SliosEventHandler"));
  438. MessageNameNew?.ForEach(x => Class_InnerMessageBus.GetInstance().ListenMessage(this,x,"SliosEventHandler"));
  439. MessageNameL = MessageNameNew;
  440. }
  441. PropertyInfo[] propertyInfos = this.GetType().GetProperties();
  442. foreach (PropertyInfo propertyInfo in propertyInfos)
  443. {
  444. var propName = propertyInfo?.GetValue(this,null);
  445. if (propName is string && propName != null && propName.ToString().Contains("Binding ") && propName.ToString().Contains("."))
  446. {
  447. propertyBing[propertyInfo.Name] = propName.ToString();
  448. }
  449. }
  450. if (propertyBing.Count > 0)
  451. {
  452. timer.Interval = TimeSpan.FromMilliseconds(TimeCount);
  453. timer.Tick += Timer_Tick; ;
  454. timer.Start();
  455. }
  456. }
  457. private void Timer_Tick(object? sender,EventArgs e)
  458. {
  459. try
  460. {
  461. foreach (var item in propertyBing)
  462. {
  463. //{Binding 测试设备.VAR_A_2}
  464. string[] str= item.Value.Replace("{Binding ","").Replace("}","").Split(".");
  465. if (str.Length > 1)
  466. {
  467. if (Class_DataBus.GetInstance().Dic_DeviceData.ContainsKey(str[0]))
  468. {
  469. Dictionary<string,DeviceDataModel> b= Class_DataBus.GetInstance().Dic_DeviceData[str[0]];
  470. if (b!=null && b.ContainsKey(str[1]))
  471. {
  472. object _value = b[str[1]].VarVaule;
  473. this.GetType().GetProperty(item.Key).SetValue(this,_value);
  474. }
  475. }
  476. }
  477. }
  478. }
  479. catch (Exception ex)
  480. {
  481. }
  482. }
  483. /// <summary>
  484. /// 统一事件消息处理中心
  485. /// </summary>
  486. /// <param name="sender"></param>
  487. /// <param name="e"></param>
  488. public void SliosEventHandler(object sender,InnerMessageEventArgs e)
  489. {
  490. try
  491. {
  492. if (IsExecuteState = true)//正在运行
  493. {
  494. if (e.obj_MessageObj is RunEnumModel)//接收到运行消息
  495. {
  496. RunEnumModel mode = (RunEnumModel)e.obj_MessageObj;
  497. var msg = EventReceiveNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID);
  498. //必对消息号:
  499. if (msg != null)
  500. {
  501. Direction = mode.Run == RunEnum.Run ? 1 : 2;
  502. }
  503. }
  504. else if (e.obj_MessageObj is SilosMessageModel)//接收到数据模型
  505. {
  506. SilosMessageModel mode = (SilosMessageModel)e.obj_MessageObj;
  507. var msg = EventReceiveNameList?.ToList().Find(par => par.MeaageName.ToString() == e.str_MessageStr && par.MeaageID == mode.MessageID);
  508. //必对消息号:
  509. if (msg != null)
  510. {
  511. WLTitle = mode.Title;
  512. KgValue = mode.Value;
  513. WLText = mode.Text;
  514. }
  515. }
  516. }
  517. }
  518. catch (Exception ex)
  519. {
  520. }
  521. }
  522. #endregion
  523. #region 发送消息事件
  524. public void Dispose()
  525. {
  526. timer.Stop();
  527. }
  528. /// <summary>
  529. /// 按钮按下
  530. /// </summary>
  531. /// <param name="sender"></param>
  532. /// <param name="e"></param>
  533. private void Image_MouseLeftButtonDown(object sender,MouseButtonEventArgs e)
  534. {
  535. try
  536. {
  537. Image image = sender as Image;
  538. if (image.Tag != null)
  539. {
  540. if (image.Tag.ToString() == "出料" && 出料单击事件 != MessageNameEnum.Null)
  541. {
  542. EventSendMessage eventSend = new EventSendMessage();
  543. eventSend.ControlName = this.Name;
  544. eventSend.ControlTitle = this.WLTitle;
  545. eventSend.ControlSource = image.Tag.ToString();
  546. eventSend.EventType = ControlEventType.MouseLeftButtonDown;
  547. eventSend.MeaageName = 出料单击事件;
  548. Class_InnerMessageBus.GetInstance().PostMessage(this,出料单击事件.ToString(),eventSend);
  549. }
  550. else if (image.Tag.ToString() == "停止出料" && 停止出料单击事件 != MessageNameEnum.Null)
  551. {
  552. EventSendMessage eventSend = new EventSendMessage();
  553. eventSend.ControlName = this.Name;
  554. eventSend.ControlTitle = this.WLTitle;
  555. eventSend.ControlSource = image.Tag.ToString();
  556. eventSend.EventType = ControlEventType.MouseLeftButtonDown;
  557. eventSend.MeaageName = 停止出料单击事件;
  558. Class_InnerMessageBus.GetInstance().PostMessage(this,停止出料单击事件.ToString(),eventSend);
  559. }
  560. }
  561. }
  562. catch (Exception ex)
  563. {
  564. }
  565. }
  566. /// <summary>
  567. /// 按钮类型
  568. /// </summary>
  569. /// <param name="sender"></param>
  570. /// <param name="e"></param>
  571. private void Button_Click(object sender,RoutedEventArgs e)
  572. {
  573. }
  574. /// <summary>
  575. /// 值改变
  576. /// </summary>
  577. /// <param name="sender"></param>
  578. /// <param name="e"></param>
  579. private void TextBox_TextChanged(object sender,TextChangedEventArgs e)
  580. {
  581. }
  582. /// <summary>
  583. /// 选中
  584. /// </summary>
  585. /// <param name="sender"></param>
  586. /// <param name="e"></param>
  587. private void CheckBox_Checked(object sender,RoutedEventArgs e)
  588. {
  589. }
  590. /// <summary>
  591. /// 取消选中
  592. /// </summary>
  593. /// <param name="sender"></param>
  594. /// <param name="e"></param>
  595. private void CheckBox_Unchecked(object sender,RoutedEventArgs e)
  596. {
  597. }
  598. #endregion
  599. }
  600. }