| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Узнать в каком классе Control был инициализирован |
| Автор: Fitc 20.4.2011, 16:42 |
| Здравствуйте! Нужно узнать по объекту Control, в каком классе он был инициализирован и инкапсулирован в поле. Т.е. объект Control создается как обычно внутри автогенерирующегося файла *Designer.cs. Нужно узнать в каком именно классе, зная только объект Control. |
| Автор: nikitao 20.4.2011, 16:53 |
| Control.TopLevelControl ? |
| Автор: Fitc 20.4.2011, 17:01 |
| А если я инициализировал объект Control в классе UserControl, и этот класс UserControl добавил к форме. То для объекта Control свойство TopLevelControl вернет объект UserControl или объект Form (куда добавлен UserControl)? |
| Автор: nikitao 20.4.2011, 17:17 |
| не. форму вернет конечно. Ну можешь тогда в конструкторах форм и UserContol ов в поле Tag записывать родителя , а потом его оттуда считывать. Это наверно самое простое решение для тебя будет. |
| Автор: Fitc 20.4.2011, 17:21 |
| Нет спасибо этот вариант мне не подходит. Tag у многих Control'ов уже занят. |
| Автор: Voyager 20.4.2011, 20:56 |
| Control.FindForm, Control.Parent (можно пройти выше по всем парентам) подойдет? |
| Автор: Fitc 21.4.2011, 07:35 | ||
Я думаю можно обойтись без менеджера - использовать Reflection,т.е. смотреть у родителя, есть ли у него поле с именем данного контрола FieldInfo fieldInfo=ParentControl.GetType().GetField(TargetControl.Name), если есть, то взять значение этого поля var TargetControl2=fieldInfo.GetValue(ParentControl). И если объекты TargetControl и TargetControl2 указывают на одну ссылку, то ParentCotrol является классом-создателем контрола TargetControl Добавлено через 14 минут и 36 секунд А как можно узнать, является ли контрол пользовательским (наследуется от стандартного) или же он является стандартным? |
| Автор: Fitc 21.4.2011, 07:56 | ||
Чтоб пропускать родителей, которые стандартные контролы, а заходить только в пользовательские контролы |
| Автор: Voyager 21.4.2011, 10:51 | ||
Да не придумывайте. Используем Control.Parent и, поднимаясь, проверяем на "is Form" и "is UserControl", найдем класс-создатель, который нужен автору. |