コード例 #1
0
ファイル: Protocol.cs プロジェクト: RobAmos/osla
 public static void ProtocolItemsToListBoxProtocolItems(List<ProtocolInstruction> Instructions, System.Windows.Forms.ListBox ListBoxToFill, bool AddToCurrent)
 {
     int index = 1;
     if (AddToCurrent)
     {
         index = ListBoxToFill.Items.Count + 1;
     }
     foreach (ProtocolInstruction Instruction in Instructions)
     {
         if (Instruction is StaticProtocolItem)
         {
             ListBoxProtocolItem inst = new ListBoxProtocolItem();
             inst.InstructionNumber = index;
             inst.Instruction = (StaticProtocolItem)Instruction;
             ListBoxToFill.Items.Add(inst);
         }
         else if (Instruction is LoopInstruction)
         {
             ListBoxRepeatItem rep = new ListBoxRepeatItem();
             rep.InstructionNumber = index;
             rep.RepeatInstruction = (LoopInstruction)Instruction;
             ListBoxToFill.Items.Add(rep);
         }
         else if (Instruction is DelayTime)
         {
             ListBoxDelayItem del = new ListBoxDelayItem();
             del.delay = (DelayTime)Instruction;
             del.InstructionNumber = index;
             ListBoxToFill.Items.Add(del);
         }
         index++;
     }
 }
コード例 #2
0
ファイル: MakeProtocols.cs プロジェクト: RobAmos/osla
        private void btnAddMethod_Click(object sender, EventArgs e)
        {
            //This method is now greatly changed to accomodate the new format of having variables in there
            //mostly just a awful lot of type checking, input verification stuff

            if (lblMethodName.Text.Split('-').Length == 2 && MethodsView.SelectedNode!=null)
            {
                TreeNode curSelection = MethodsView.SelectedNode;
                ListBoxProtocolItem CurProtocolItem = new ListBoxProtocolItem();
                string instName = lblMethodName.Text.Split('-')[0];
                string methName = lblMethodName.Text.Split('-')[1];
                CurProtocolItem.Instruction.InstrumentName = instName;
                CurProtocolItem.Instruction.MethodName = methName;
                object[] Parameters;
                if (tblMethodParameterView.DataSource != null)
                {
                    DataTable DT = (DataTable)tblMethodParameterView.DataSource;
                    DataRow DR = DT.Rows[0];
                    Parameters = DR.ItemArray;//actual inputted values, as strings

                    //Now we will find out what this value is, to make sure it is all agreeable
                    string MethodName = curSelection.Text.ToString().Split('(')[0];
                    string InstrumentName = curSelection.Parent.Text;
                    var Instrument = GetInstrumentClass(InstrumentName);
                    var Meth = ReturnMethodInfoFromObject(MethodName, Instrument);

                    ParameterInfo[] ParametersinMeth=Meth.GetParameters();
                    bool RequiresDynamicParameter = false;
                    if (ParametersinMeth[ParametersinMeth.Length - 1].ParameterType == typeof(AdditionalMethodArguments))
                        RequiresDynamicParameter = true;
                    int pCount = RequiresDynamicParameter ? ParametersinMeth.Length - 1 : ParametersinMeth.Length;
                    Type[] ParameterTypes = new Type[pCount];
                    for (int j = 0; j < pCount; j++)
                    {ParameterTypes[j]=ParametersinMeth[j].ParameterType;}
                    if (ParameterTypes.Length != DR.ItemArray.Length)
                    { MessageBox.Show("Inputted parameters and expected parameters do not have an equal count, contact Nigel"); return; }
                    for (int i = 0; i < ParameterTypes.Length;i++ )
                    {
                        object o = Parameters[i];//actual inputted value, currently as a string
                        if (o.ToString() == "")
                        {
                            MessageBox.Show("You need to supply more parameters before this method can be added", "Parameters Not Supplied", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                            return;
                        }
                       if (ParameterTypes[i] == System.Type.GetType("System.String"))
                        {
                           //check that there are real variables in the
                            if (!ProtocolManager.CheckStringForValidVariables((string)Parameters[i], (IList)lstCurrentVariables.Items))
                            {
                                MessageBox.Show("You have entered a variable that does not exist","Bad Data Entry",MessageBoxButtons.OK,MessageBoxIcon.Error);
                            }
                            continue;//string types always get cleared
                        }
                        else//need to check if this is a variable, and if it is not, I neet to check that the method works out okay
                        {
                            Type ExpectedType = ParameterTypes[i];
                            //two cases, either they have entered a variable, or they have a value, to find out which
                            string VariableName;
                            bool ParameterIsVariable = ProtocolManager.GetVariableNameFromText((string)o, out VariableName);
                            if (ParameterIsVariable)
                            {
                                //first to check that such a variable exists

                                ReferenceToProtocolVariable Variable = new ReferenceToProtocolVariable(VariableName);
                                if (!ProtocolManager.IsVariableInList(VariableName, (IList)lstCurrentVariables.Items))
                                { MessageBox.Show("You are using a variable name that does not exist in your protocol", "Bad Variable Name", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
                                else
                                {
                                    ProtocolVariable VariableInList = new ProtocolVariable();
                                    foreach (object Varia in lstCurrentVariables.Items)
                                    { if (Varia.ToString() == VariableName)
                                    { VariableInList = (ProtocolVariable)Varia; break; } }

                                    //make sure the variable type and parameter type match
                                    if (VariableInList.DataType != ParameterTypes[i])
                                    {
                                        MessageBox.Show("You are using a variable that does not have the appropriate type for this parameter", "Bad Variable Type", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                    }
                                    else
                                    {
                                        //replace the "parameter" with the reference to the variable
                                        Parameters[i] = Variable;
                                    }
                                }
                            }
                            else
                            {
                                //make sure I can actually convert the damn thing to what it should be eg "A"->"a"
                                try
                                {
                                    Parameters[i]=Convert.ChangeType((string)o, ParameterTypes[i]);
                                }
                                catch
                                {
                                    MessageBox.Show("Could not convert your entry to the proper type, please make sure that numbers are used where they should be", "Bad Entry", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    return;
                                }
                            }
                        }
                    }
                }
                else
                {
                    Parameters = new object[0];
                }
                CurProtocolItem.Instruction.Parameters = Parameters;
                CurProtocolItem.InstructionNumber = GetNextInstructionNumber();
                lstProtocol.Items.Add(CurProtocolItem);
            }
        }