Установите пользовательские свойства, используя отражение в пользовательском UserControl - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужно использовать отражение для установки двух пользовательских свойств пользовательских userControls

CustomUserControl.cs

......

public string _ValidaMsg { get { return _ValidarMsg; } set { _ValidarMsg = value; } }
public bool _Valida { get { return _Validar; } set { _Validar = value;} }

._Valida определяет необходимость проверки элемента управления перед отправкой формы. и ._ValidaMsg - это сообщение, которое отображается, когда поле не заполнено

В моем form.cs у меня есть напечатанный список с именем listaMetodo (String ControlName,String ControlText,Type Control.Type) Вот метод, которым я заполняю свой список

 private List<xEntidades.entControlValidacion> GetAllControls(Control container)
    {
        foreach (Control c in container.Controls)
        {
            GetAllControls(c);
            // these txtDescripcion and others are the diferent types of my customs UserControls
            if (c.Name.Equals("txtDescripcion") || c.Name.Equals("Combo") || c.Name.Equals("txtCodigo") || c.Name.Equals("txtFecha"))
            {

                    listaMetodo.Add(new xEntidades.entControlValidacion(c.Parent.Name, c.Text, c.GetType()));

            }

        }

        return listaMetodo;
    }

Итак, когда у меня есть список со всеми соответствующими элементами управления, мне нужно сравнить его с другим имеющимся у меня элементом управления, который заполнен всеми элементами управления, которые необходимо проверить, давайте назовем его validateList(string NameOfControl,bool Valida , String ValidaMsg) , В цикле for во время имитации двух списков у меня есть условие

If(listaMetodo[iExample].ControlName.equals(validateList[jExample].NameOfControl && validateList[jExample].Valida){

//here I should get the instance of the object by reflection and change ._ValidaMsg and ._Valida

}

Итак, как я могу изменить свойства экземпляра объекта, используя Type и ControlName, хранящиеся в моем listaMetodo? Обязательно использовать отражение? Есть ли другой подход для достижения того, что я смотрю? Также я работаю с Framework 2.0 Заранее спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

Ну наконец-то я добился того, чего хотел, создав этот метод

     private void validaControles()
        {
            for (int j = 0; j < listaMetodo.Count; j++)
            {
                for (int k = 0; k < listaControlesValida.Count; k++)
                {

//just ignore this condition


if(listaMetodo[j].NombrePadre.Equals(listaControlesValida[k].Control) && listaControlesValida[k].Valida && listaMetodo[j].TextoControl.Equals("")){

                   listaControlesValida[k].ValidaText, null);
                        Control[] control = this.Controls.Find(listaMetodo[j].NombrePadre, true);
                        Type type = control[0].GetType();

                       control[0].GetType().GetProperty("_ValidaMsg").SetValue(control[0], listaControlesValida[k].ValidaText, null);
                       control[0].GetType().GetProperty("_Valida").SetValue(control[0], true, null);
                    }
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...