using BenQGuru.eMES.DLLService; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace UAS_DLLTest { public partial class Form1 : Form { MESHelper helper; Control.ControlCollection methodCollection; Control.ControlCollection ParamCollection; ParameterInfo[] param; List outParams = new List(); object[] allParams; int icount = 0; Queue query = new Queue();//临时存储获取到的control控件 MethodInfo[] method; public Form1() { InitializeComponent(); helper = new MESHelper(); methodCollection = Methods.Controls; ParamCollection = Parameters.Controls; } private void radioButton_checkChanged(object sender, EventArgs e) { removeControl(); for (int i = 0; i < methodCollection.Count; i++) { if (((RadioButton)methodCollection[i]).Checked) { //显示当前选中的方法的所有参数 //获取所有的参数 icount = 0; param = helper.GetType().GetMethod(methodCollection[i].Name).GetParameters(); for (int j = 1; j < param.Length+1; j++) { //参数名i开头的才需要显示 if (!param[j - 1].Name.StartsWith("o")) { icount += 1; ParamControl paramControl = new ParamControl(); paramControl.paramsName = param[j - 1].Name; paramControl.paramsValueName= param[j - 1].Name; paramControl.Anchor= AnchorStyles.Left; paramControl.Anchor = AnchorStyles.Top; paramControl.Location = new Point((Parameters.Width/3-paramControl.Width)/2+((j-1)%3)*(Parameters.Width / 3),15+((j-1)/3)*(paramControl.Height+10)); Parameters.Controls.Add(paramControl); } } allParams = new object[param.Length]; } } //重新获取控件 ParamCollection = Parameters.Controls; } private void confirm_Click(object sender, EventArgs e) { //拿到所有已经填写的参数 for (int i = 0; i < ParamCollection.Count; i++) { for (int j = 1; j < allParams.Length+1; j++) { if (j > icount) { allParams[j - 1] = new string(new char[] { }); } else { if (ParamCollection[i] is ParamControl&& ((ParamControl)ParamCollection[i]).paramsValueName==param[j-1].Name) { if (param[j - 1].ParameterType.ToString()!= "System.String[]") { allParams[j - 1] = ((ParamControl)ParamCollection[i]).paramsValue; } else { allParams[j - 1] = ((ParamControl)ParamCollection[i]).paramsValue.Split(','); } } } } } //将out类型的参数放进去 string oResult = ""; //拿到需要触发的方法名 for (int i = 0; i < methodCollection.Count; i++) { if (((RadioButton)methodCollection[i]).Checked) { Type type = helper.GetType(); MethodInfo method = type.GetMethod(((RadioButton)methodCollection[i]).Name); oResult = method.Invoke(helper, allParams).ToString(); } } //输出out出的信息 operateResult.AppendText("返回值:"+oResult+","); for (int i=0;i /// 移除所有控件 /// private void removeControl() { //移除所有ParamControl控件 foreach (Control c in this.Parameters.Controls) { if (c is ParamControl) { query.Enqueue(c); } } while (query.Count != 0) { query.Dequeue().Dispose(); } } } }