![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Fitc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.1.2010 Репутация: 3 Всего: 4 |
Здравствуйте! Нужно узнать по объекту Control, в каком классе он был инициализирован и инкапсулирован в поле. Т.е. объект Control создается как обычно внутри автогенерирующегося файла *Designer.cs. Нужно узнать в каком именно классе, зная только объект Control.
|
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Control.TopLevelControl ?
-------------------- Жизнь - печальная штука. |
|||
|
||||
| Fitc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.1.2010 Репутация: 3 Всего: 4 |
А если я инициализировал объект Control в классе UserControl, и этот класс UserControl добавил к форме. То для объекта Control свойство TopLevelControl вернет объект UserControl или объект Form (куда добавлен UserControl)?
Это сообщение отредактировал(а) Fitc - 20.4.2011, 17:02 |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
не. форму вернет конечно.
Ну можешь тогда в конструкторах форм и UserContol ов в поле Tag записывать родителя , а потом его оттуда считывать. Это наверно самое простое решение для тебя будет. -------------------- Жизнь - печальная штука. |
|||
|
||||
| Fitc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.1.2010 Репутация: 3 Всего: 4 |
Нет спасибо этот вариант мне не подходит. Tag у многих Control'ов уже занят.
|
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
Control.FindForm, Control.Parent (можно пройти выше по всем парентам) подойдет?
|
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
если контро лежит на панели , то вернет эту панель , потом контрол , потом форму. Понять где контрол-создатель в общем случае мне кажется затруднительно , хотя автору виднее конечно. Тогда надо писать менеджер , где будет хэш-таблица контрол - его родитель , ну и возможность добавлять\ удалять пары и по контролу узнавать его родителя. Менеджер реализовать как статический класс или как класс-одиночку. -------------------- Жизнь - печальная штука. |
|||
|
||||
| Fitc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.1.2010 Репутация: 3 Всего: 4 |
Я думаю можно обойтись без менеджера - использовать Reflection,т.е. смотреть у родителя, есть ли у него поле с именем данного контрола FieldInfo fieldInfo=ParentControl.GetType().GetField(TargetControl.Name), если есть, то взять значение этого поля var TargetControl2=fieldInfo.GetValue(ParentControl). И если объекты TargetControl и TargetControl2 указывают на одну ссылку, то ParentCotrol является классом-создателем контрола TargetControl Добавлено через 14 минут и 36 секунд А как можно узнать, является ли контрол пользовательским (наследуется от стандартного) или же он является стандартным? Это сообщение отредактировал(а) Fitc - 21.4.2011, 07:36 |
|||
|
||||
| Fitc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 30.1.2010 Репутация: 3 Всего: 4 |
Чтоб пропускать родителей, которые стандартные контролы, а заходить только в пользовательские контролы Это сообщение отредактировал(а) Fitc - 21.4.2011, 07:57 |
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
Да не придумывайте. Используем Control.Parent и, поднимаясь, проверяем на "is Form" и "is UserControl", найдем класс-создатель, который нужен автору. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |