Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать в каком классе Control был инициализирован 
V
    Опции темы
Fitc
Дата 20.4.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.1.2010

Репутация: 3
Всего: 4



Здравствуйте! Нужно узнать по объекту Control, в каком классе он был инициализирован и инкапсулирован в поле.  Т.е. объект Control создается как обычно внутри автогенерирующегося файла *Designer.cs. Нужно узнать в каком именно классе, зная только объект Control.
PM MAIL   Вверх
nikitao
Дата 20.4.2011, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



Control.TopLevelControl ?


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Fitc
Дата 20.4.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.1.2010

Репутация: 3
Всего: 4



А если я инициализировал объект Control в классе UserControl, и этот класс UserControl добавил к форме. То для объекта Control свойство TopLevelControl вернет объект UserControl или объект Form (куда добавлен UserControl)?

Это сообщение отредактировал(а) Fitc - 20.4.2011, 17:02
PM MAIL   Вверх
nikitao
Дата 20.4.2011, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



не. форму вернет конечно. 

Ну можешь тогда в конструкторах форм и UserContol ов в поле Tag записывать родителя , а потом его оттуда считывать. Это наверно самое простое решение для тебя будет.


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Fitc
Дата 20.4.2011, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.1.2010

Репутация: 3
Всего: 4



Нет спасибо этот вариант мне не подходит. Tag у многих Control'ов уже занят.
PM MAIL   Вверх
Voyager
Дата 20.4.2011, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Control.FindForm,  Control.Parent (можно пройти выше по всем парентам) подойдет?
PM   Вверх
nikitao
Дата 20.4.2011, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



Цитата(Voyager @  20.4.2011,  21:56 Найти цитируемый пост)
Control.FindForm,  Control.Parent (можно пройти выше по всем парентам) подойдет?

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

Тогда надо писать менеджер , где будет хэш-таблица  контрол - его родитель , ну и возможность добавлять\ удалять пары и по контролу узнавать его родителя.
Менеджер реализовать как статический класс или как  класс-одиночку.


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Fitc
Дата 21.4.2011, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.1.2010

Репутация: 3
Всего: 4



Цитата(nikitao @ 20.4.2011,  22:17)

Тогда надо писать менеджер , где будет хэш-таблица  контрол - его родитель , ну и возможность добавлять\ удалять пары и по контролу узнавать его родителя.
Менеджер реализовать как статический класс или как  класс-одиночку.

Я думаю можно обойтись без менеджера - использовать 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
PM MAIL   Вверх
Fitc
Дата 21.4.2011, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 30.1.2010

Репутация: 3
Всего: 4



Цитата
А как можно узнать, является ли контрол пользовательским (наследуется от стандартного) или же он является стандартным?

Чтоб пропускать родителей, которые стандартные контролы, а заходить только в пользовательские контролы

Это сообщение отредактировал(а) Fitc - 21.4.2011, 07:57
PM MAIL   Вверх
Voyager
Дата 21.4.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Цитата(nikitao @ 20.4.2011,  22:17)
если контро лежит на панели , то вернет эту панель , потом контрол , потом форму. Понять где контрол-создатель в общем случае мне кажется затруднительно , хотя автору виднее конечно.

Тогда надо писать менеджер , где будет хэш-таблица  контрол - его родитель , ну и возможность добавлять\ удалять пары и по контролу узнавать его родителя.
Менеджер реализовать как статический класс или как  класс-одиночку.

Да не придумывайте. Используем Control.Parent и, поднимаясь, проверяем на "is Form" и "is UserControl", найдем класс-создатель, который нужен автору.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.