Проблема с типом NumericUpDown - PullRequest
0 голосов
/ 19 июля 2010

Когда я делаю что-то вроде этого:

public static void BindData<T>(this System.Windows.Forms.Control.ControlCollection controls, T bind)
    {
        foreach (Control control in controls)
        {
            if (control.GetType() == typeof(System.Windows.Forms.TextBox) || control.GetType().IsSubclassOf(typeof(System.Windows.Forms.TextBox)))
            {
                UtilityBindData(control, bind);
            }
            else
            {
                if (control.Controls.Count == 0)
                {
                    UtilityBindData(control, bind);
                }
                else
                {
                    control.Controls.BindData(bind);
                }
            }
        }
    }

    private static void UtilityBindData<T>(Control control, T bind)
    {
        Type type = control.GetType();

        PropertyInfo propertyInfo = type.GetProperty("BindingProperty");
        if (propertyInfo == null)
            propertyInfo = type.GetProperty("Tag");

// rest of the code....

где элементы управления System.Windows.Forms.Control.ControlCollection и среди элементов управления в форме, передаваемой в качестве параметра этому коду, есть NumericUpDowns, я не могу найти их в коллекции элементов управления (controls = myForm.Controls), но есть элементы управления других типов (кнопка обновления, updownedit). Проблема в том, что я хочу получить свойство Tag NumericUpDown и просто не могу получить его при использовании этого рекурсивного метода проверки элементов управления формы.

1 Ответ

1 голос
/ 19 июля 2010

Свойство Tag определяется классом Control.

Следовательно, вам вообще не нужно отражение; Вы можете просто написать

object tag = control.Tag;

Ваш код не работает, поскольку фактический тип элемента управления (например, NumericUpDown) не определяет отдельное свойство Tag, а GetProperty не выполняет поиск свойств базового класса.


Кстати, в своем первом if statemeant вы можете просто написать

if (control is TextBox)
...