版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

136 строки
4.3 KiB

  1. using MaiMuAOI.SysUI.StepUI.PropExtend;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. using System.Xml.Linq;
  15. namespace ProductionControl.UI
  16. {
  17. public partial class UICodeScannerDev : UserControl
  18. {
  19. SynchronizationContext SyncContext = null;
  20. //
  21. public class CodeScannerProp
  22. {
  23. [PropertyOrder(1), Browsable(true), Category("数据"), DisplayName("Code"), Description("Code"), ReadOnly(true), JsonIgnore]
  24. public string code { get; set; }
  25. public string serialize()
  26. {
  27. return JsonConvert.SerializeObject(this);
  28. }
  29. }
  30. private CodeScannerProp prop = new CodeScannerProp();
  31. //private CodeScannerDev dev;
  32. public UICodeScannerDev()
  33. {
  34. InitializeComponent();
  35. propertyGrid1.PropertyValueChanged += propertyGrid1_PropertyValueChanged;
  36. //this.toolStrip1.Enabled = false;
  37. this.propertyGrid1.Enabled = false;
  38. //获取UI线程同步上下文
  39. SyncContext = SynchronizationContext.Current;
  40. init();
  41. }
  42. //public string getParamsData()
  43. //{
  44. // return prop.serialize();
  45. //}
  46. //public void setParamsData(string json)
  47. //{
  48. //if (json == "") return;
  49. // prop.deserialize(json);
  50. // this.propertyGrid1.Refresh();
  51. //}
  52. public void init()
  53. {
  54. //this.propertyGrid1.SelectedObject = prop;
  55. //dev = new CodeScannerDev();
  56. //dev.WarningEvent = (level, info) =>
  57. //{
  58. // txtLog.Text = $"({level}){info}";
  59. //};
  60. ////IN
  61. //dev.ScanerEvent += new System.Action<string>((data) =>
  62. //{
  63. // prop.code = data;
  64. // this.refreshUI();
  65. //});
  66. //if (!dev.start())
  67. //{
  68. // this.closeDev();
  69. // return;
  70. //}
  71. //this.toolStrip1.Enabled = true;
  72. this.propertyGrid1.Enabled = true;
  73. }
  74. private void refreshUI()
  75. {
  76. SyncContext.Post(m =>
  77. {
  78. var result = m as string;
  79. propertyGrid1.Refresh();
  80. //tbtnJogOnOff.Text = (prop.AxState == AxisState.STA_AX_EXT_JOG) ? "关闭Jog" : "开启Jog";
  81. //tbtnLeft.Enabled = tbtnRight.Enabled = (prop.AxState == AxisState.STA_AX_EXT_JOG);
  82. }, "异步操作完成结果");
  83. }
  84. private void closeDev()
  85. {
  86. //try
  87. //{
  88. // if (dev == null)
  89. // return;
  90. // dev.stop();
  91. //}
  92. //catch (Exception ex)
  93. //{
  94. // //this.toolStrip1.Enabled = false;
  95. // this.propertyGrid1.Enabled = false;
  96. // MessageBox.Show(ex.Message, "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
  97. //}
  98. }
  99. protected override void OnHandleDestroyed(EventArgs e)
  100. {
  101. base.OnHandleDestroyed(e);
  102. // 在此添加需要手动释放资源的代码
  103. this.closeDev();
  104. }
  105. private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  106. {
  107. //其中包含了两个重要的属性:OldValue和ChangeItem。
  108. //ChangeItem是“PropertyDescriptorGridEntry”类型。一般可以通过ChangeItem.PropertyDescriptor.ComponentType查找到属性的实际类型。
  109. //而通过ChangeItem的Label,则可以查看到当前在属性编辑输入框中显示的值。
  110. string className = e.ChangedItem.PropertyDescriptor.ComponentType.Name;
  111. string propertyName = e.ChangedItem.PropertyDescriptor.Name;
  112. var oldValue = e.OldValue;
  113. var newValue = e.ChangedItem.Value;
  114. switch (propertyName)
  115. {
  116. case "xxx":
  117. //refreshAxisVelParam();
  118. break;
  119. }
  120. }
  121. }
  122. }