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;
                    }
                }
            }
        }