Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка Windows Forms > По Field сборки получить ImageList |
Автор: IEZ 9.9.2007, 03:04 | ||||
Приветсвую Всех! В проге получаю Fields другой .Net сборки:
Вопрос: а можно ли из полученного получить сам ImageList со всем его содержимым? Или это делается как-то по другому? Спасибо. |
Автор: tol05 9.9.2007, 11:25 | ||
да, через FieldInfo.GetValue() или Type.InvokeMember()
|
Автор: IEZ 9.9.2007, 13:25 |
А что это такое? Не могу понять, что за класс? |
Автор: tol05 9.9.2007, 13:45 | ||
это был пример :( . ты хочешь получить ImageList, который хранится в каком-то реальном экземпляре какого-то реального класса? Так вот, для этого в FieldInfo.GetValue() или Type.InvokeMember() нужно передать ссылку на тот объект, который хранит нужный тебе ImageList. Вот я и написал, что: - создается сначала объект класса MyClass (к примеру, ты ж не указал что за класс содержит ImageList) - получаем инфу о полях класса, экземплятом которого есть этот объект - перебираем все поля и достаем те значения, которые эти поля имеют в конкретном объекте с именем "с" .... Ладно... Давай по твоему коду:
Экземпляров класса MyClass у тебя в программе могут быть сотни, нужно же указать, ImageList какого из них тебе нужен? |
Автор: IEZ 9.9.2007, 14:14 |
Я конечно туплю, но как эту ссылку получить? |
Автор: IEZ 9.9.2007, 14:59 | ||||
Вот как выглядит весь код:
|
Автор: tol05 9.9.2007, 20:29 | ||
IEZ, теперь понятно. Но ведь ты хочешь а как можно получить из объекта содержимое, если ты сам объект не создал? Пока ты только читаешь его метаданные и все. Справочную информацию о типе получаешь. Чтобы получить заполненный ImageList сначала нужно создать объект класса Proga.DlgList, инициализировать его (и его член - ImageList заполнить), а потом уже что-то получать ![]() вот изменения в коде
Опять же, это работает если при создании объекта Proga.DlgList конструктором по умолчанию он инициализирует свой ImageList. Иначе список тебе вернется пустым. |
Автор: IEZ 9.9.2007, 22:00 | ||
Не совсем понятное определение объекта.
А как это сделать? |
Автор: tol05 9.9.2007, 22:16 | ||
может ты опишешь свою задачу полностью? Зачем тебе FieldInfo, что такое Proga.exe? Это .Net приложение? Работает Proga.exe когда твое приложение работает? Что сделать? Я не знаю как и когда DlgList заполняет свой список. Вариантов взаимодействия много. Опять же повторяю, опиши задачу свою. а по поводу ты используешь перегрузку метода
где name - полносью квалифицированное имя типа. Вот я и предположил, что полное имя будет "Proga.DlgList". Но я не претендую именно на это имя и ты можешь его изменить на реальное. ![]() |
Автор: IEZ 9.9.2007, 22:42 |
Есть прога, которой (зная путь к другой сборке) необходимо из нее получить ImageList с изображениями и их номерами по порядку. |
Автор: tol05 10.9.2007, 13:06 |
Когда твой класс при своем создании заполняет свой ImageList - тогда подходит мой вариант кода (см. выше) Если список картинок заполняется при каких-то операциях с классом - то нужно на созданном obj вызвать эти действия (через InvokeMember, например) и потом получить value. А вообще-то ИМХО такие вещи делают через ремотинг, а не через рефлексию. |
Автор: IEZ 10.9.2007, 13:57 |
Где почитать или примеры можно посмотреть? |
Автор: tol05 10.9.2007, 15:27 | ||||||||
почитать - в учебниках. "C# 2005 дл\ профессионалов" Троелсен Маклин и др, "Microsoft .NET Remoting" пример (клиент-сервер-удаленный) объект набросал такой: удаленный объект (RemoteObj.dll)
сервер (Proga.exe)
клиент (Client.exe)
запускаешь сервер, потом клиент. через доменный ремоутинг все гораздо проще. Всего одна сборка клиента, загружающая в своей домен сборку Proga
|
Автор: IEZ 10.9.2007, 15:59 |
tol05, спасибо за помощь. ![]() |