private void operationComboBox_SelectedIndexChanged(object sender, EventArgs e) { parametersPanel.Controls.Clear(); if (operationComboBox.SelectedIndex > 3) { // В случае если выбран метод расширения, необходимо поместить // контролы редактирования на панель параметров var extensionMethods = typeof(CollectionValidationBuilder).GetMethods(BindingFlags.Public | BindingFlags.Static) .Where(m => m.Name == operationComboBox.Text && !m.IsGenericMethod).ToArray(); var hasOptionalParameterProperty = false; MethodInfo selectedMethodInfo = null; if (extensionMethods.Length == 1) { selectedMethodInfo = extensionMethods[0]; } else if (extensionMethods.Length == 2 && Math.Abs(extensionMethods[0].GetParameters().Count() - extensionMethods[1].GetParameters().Count()) == 1) { // Это значит было найдено две перегрузки - в одной из которых дополнительный параметр "property" hasOptionalParameterProperty = true; selectedMethodInfo = extensionMethods[0].GetParameters().Count() > extensionMethods[1].GetParameters().Count() ? extensionMethods[1] : extensionMethods[0]; } int yIndent = 0; if (hasOptionalParameterProperty) { var control = new ParameterEditControl("property", true) { Location = new Point(0, yIndent) }; parametersPanel.Controls.Add(control); yIndent += control.Height; } if (selectedMethodInfo != null) { foreach (var parameter in selectedMethodInfo.GetParameters().Skip(1)) { var isDatatypeEditable = false; // Для полей с именем value и items доступно изменение типа данных параметра if (parameter.Name == "value") { if (selectedMethodInfo.Name.Contains("Equal")) { isDatatypeEditable = true; } } else if (parameter.Name == "items") { isDatatypeEditable = true; } var control = new ParameterEditControl( parameter.Name, false, parameter.ParameterType.Name == "IEnumerable", // редактирование коллекции isDatatypeEditable, parameter.Name == "message") { Location = new Point(0, yIndent) }; parametersPanel.Controls.Add(control); yIndent += control.Height; } } } }
private void operationComboBox_SelectedIndexChanged(object sender, EventArgs e) { parametersPanel.Controls.Clear(); if (operationComboBox.SelectedIndex < 4) { if (operationComboBox.Text == "Property" || operationComboBox.Text == "Collection") { parametersPanel.Controls.Add(new ParameterEditControl("property")); } } else { var extensionMethods = typeof(ObjectValidationBuilder).GetMethods(BindingFlags.Public | BindingFlags.Static) .Where(m => m.Name == operationComboBox.Text && !m.IsGenericMethod).ToArray(); var hasOptionalParameterProperty = false; MethodInfo selectedMethodInfo = null; if (extensionMethods.Length == 1) { selectedMethodInfo = extensionMethods[0]; } else if (extensionMethods.Length == 2 && Math.Abs(extensionMethods[0].GetParameters().Count() - extensionMethods[1].GetParameters().Count()) == 1) { // Это значит было найдено две перегрузки - в одной из которых дополнительный параметр hasOptionalParameterProperty = true; selectedMethodInfo = extensionMethods[0].GetParameters().Count() > extensionMethods[1].GetParameters().Count() ? extensionMethods[1] : extensionMethods[0]; } int yIndent = 0; if (hasOptionalParameterProperty) { var control = new ParameterEditControl("property", true) { Location = new Point(0, yIndent) }; parametersPanel.Controls.Add(control); yIndent += control.Height; } if (selectedMethodInfo != null) { foreach (var parameter in selectedMethodInfo.GetParameters().Skip(1)) { var isDatatypeEditable = false; if (parameter.Name == "value") { if (selectedMethodInfo.Name.Contains("Equal")) { isDatatypeEditable = true; } } else if (parameter.Name == "items") { isDatatypeEditable = true; } var control = new ParameterEditControl( parameter.Name, false, parameter.ParameterType.Name == "IEnumerable", isDatatypeEditable, parameter.Name == "message") { Location = new Point(0, yIndent) }; parametersPanel.Controls.Add(control); yIndent += control.Height; } } } }