Form1.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using BenQGuru.eMES.DLLService;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace UAS_DLLTest
  13. {
  14. public partial class Form1 : Form
  15. {
  16. MESHelper helper;
  17. Control.ControlCollection methodCollection;
  18. Control.ControlCollection ParamCollection;
  19. ParameterInfo[] param;
  20. List<string> outParams = new List<string>();
  21. object[] allParams;
  22. int icount = 0;
  23. Queue<Control> query = new Queue<Control>();//临时存储获取到的control控件
  24. MethodInfo[] method;
  25. public Form1()
  26. {
  27. InitializeComponent();
  28. helper = new MESHelper();
  29. methodCollection = Methods.Controls;
  30. ParamCollection = Parameters.Controls;
  31. }
  32. private void radioButton_checkChanged(object sender, EventArgs e)
  33. {
  34. removeControl();
  35. for (int i = 0; i < methodCollection.Count; i++)
  36. {
  37. if (((RadioButton)methodCollection[i]).Checked)
  38. {
  39. //显示当前选中的方法的所有参数
  40. //获取所有的参数
  41. icount = 0;
  42. param = helper.GetType().GetMethod(methodCollection[i].Name).GetParameters();
  43. for (int j = 1; j < param.Length+1; j++)
  44. {
  45. //参数名i开头的才需要显示
  46. if (!param[j - 1].Name.StartsWith("o"))
  47. {
  48. icount += 1;
  49. ParamControl paramControl = new ParamControl();
  50. paramControl.paramsName = param[j - 1].Name;
  51. paramControl.paramsValueName= param[j - 1].Name;
  52. paramControl.Anchor= AnchorStyles.Left;
  53. paramControl.Anchor = AnchorStyles.Top;
  54. paramControl.Location = new Point((Parameters.Width/3-paramControl.Width)/2+((j-1)%3)*(Parameters.Width / 3),15+((j-1)/3)*(paramControl.Height+10));
  55. Parameters.Controls.Add(paramControl);
  56. }
  57. }
  58. allParams = new object[param.Length];
  59. }
  60. }
  61. //重新获取控件
  62. ParamCollection = Parameters.Controls;
  63. }
  64. private void confirm_Click(object sender, EventArgs e)
  65. {
  66. //拿到所有已经填写的参数
  67. for (int i = 0; i < ParamCollection.Count; i++)
  68. {
  69. for (int j = 1; j < allParams.Length+1; j++)
  70. {
  71. if (j > icount)
  72. {
  73. allParams[j - 1] = new string(new char[] { });
  74. }
  75. else
  76. {
  77. if (ParamCollection[i] is ParamControl&& ((ParamControl)ParamCollection[i]).paramsValueName==param[j-1].Name)
  78. {
  79. if (param[j - 1].ParameterType.ToString()!= "System.String[]")
  80. {
  81. allParams[j - 1] = ((ParamControl)ParamCollection[i]).paramsValue;
  82. }
  83. else
  84. {
  85. allParams[j - 1] = ((ParamControl)ParamCollection[i]).paramsValue.Split(',');
  86. }
  87. }
  88. }
  89. }
  90. }
  91. //将out类型的参数放进去
  92. string oResult = "";
  93. //拿到需要触发的方法名
  94. for (int i = 0; i < methodCollection.Count; i++) {
  95. if (((RadioButton)methodCollection[i]).Checked)
  96. {
  97. Type type = helper.GetType();
  98. MethodInfo method = type.GetMethod(((RadioButton)methodCollection[i]).Name);
  99. oResult = method.Invoke(helper, allParams).ToString();
  100. }
  101. }
  102. //输出out出的信息
  103. operateResult.AppendText("返回值:"+oResult+",");
  104. for (int i=0;i<param.Length;i++) {
  105. if (param[i].Name.StartsWith("o")) {
  106. operateResult.AppendText(param[i].Name + ":" + allParams[i]+",");
  107. }
  108. }
  109. operateResult.AppendText("\n");
  110. }
  111. private void Form1_Load(object sender, EventArgs e)
  112. {
  113. //动态生成checkBox
  114. method = helper.GetType().GetMethods();
  115. for (int i=0;i<method.Length;i++) {
  116. //判断是否需要显示
  117. if ((method[i].GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute) == null)
  118. {
  119. continue;
  120. }
  121. RadioButton btn = new RadioButton();
  122. btn.Name = method[i].Name;
  123. btn.Text= method[i].Name;
  124. btn.Anchor = AnchorStyles.Left;
  125. btn.Anchor = AnchorStyles.Top;
  126. btn.AutoSize = true;
  127. btn.Location = new Point((Methods.Width / 3 - btn.Width) / 2 + (i % 3) * (Methods.Width / 3), 12 + (i / 3) * (btn.Height +0));
  128. Methods.Controls.Add(btn);
  129. btn.CheckedChanged += new EventHandler(radioButton_checkChanged);
  130. }
  131. }
  132. private void clear_Click(object sender, EventArgs e)
  133. {
  134. //清除信息
  135. if (clearPara.Checked) {
  136. for (int i=0;i< ParamCollection.Count;i++) {
  137. if (ParamCollection[i] is ParamControl) {
  138. ((ParamControl)ParamCollection[i]).paramsValue = "";
  139. }
  140. }
  141. }
  142. //清除日志
  143. if (clearResult.Checked) {
  144. operateResult.Clear();
  145. }
  146. }
  147. /// <summary>
  148. /// 移除所有控件
  149. /// </summary>
  150. private void removeControl()
  151. {
  152. //移除所有ParamControl控件
  153. foreach (Control c in this.Parameters.Controls)
  154. {
  155. if (c is ParamControl)
  156. {
  157. query.Enqueue(c);
  158. }
  159. }
  160. while (query.Count != 0)
  161. {
  162. query.Dequeue().Dispose();
  163. }
  164. }
  165. }
  166. }