Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Достать иконки из ресурсов другой сборки


Автор: IEZ 31.8.2007, 12:26
Приветсвую Всех!
Есть прога, в ресурсы которой импортированы иконки.

Как из другой проги получить индексы этих иконок?
Спасибо.

Автор: tol05 31.8.2007, 14:28
Та, другая прога - .Net сборка? Если да, то:
- в своей проге грузишь ту сборку 
Код

Assembly asm = Assembly.LoadFrom(...);

- потом из этой сборки
Код

Stream stream = asm.GetManifestResourceStream("Images.0d.ico"); //"Images.0d.ico" - имя ресурса-иконки
Icon icon = new Icon(stream);


Автор: IEZ 31.8.2007, 14:33
Цитата(tol05 @  31.8.2007,  14:28 Найти цитируемый пост)
//"Images.0d.ico" - имя ресурса-иконки

А весь список иконок как получить?

Добавлено @ 14:44
Делаю так:
Код

System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile(@"D:\Proga.exe");
Stream stream = asm.GetManifestResourceStream("Images.calendar.ico"); <------- возвращает null
Icon icon = new Icon(stream); <------- соответственно вылетает.

Автор: mihryak 31.8.2007, 15:01
Цитата(IEZ @  31.8.2007,  15:33 Найти цитируемый пост)
Добавлено @ 15:44
Делаю так:
Код

System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile(@"D:\Proga.exe");
Stream stream = asm.GetManifestResourceStream("Images.calendar.ico"); <------- возвращает null
Icon icon = new Icon(stream); <------- соответственно вылетает. 

это из-за неправильного имени ресурса, обычно в начале его написан namespase (MyAssembly.Images.Icons.myIcon)
для получения всех иконок (только имей в виду, что в ресурсах могут быть не только иконки!)
Код

            foreach (string resourceName in assembly.GetManifestResourceNames())
            {
                Stream iconStream = assembly.GetManifestResourceStream(resourceName);
                Icon icon = new Icon(iconStream);
            }


Автор: IEZ 31.8.2007, 15:18
Цитата(mihryak @  31.8.2007,  15:01 Найти цитируемый пост)
это из-за неправильного имени ресурса, обычно в начале его написан namespase (MyAssembly.Images.Icons.myIcon)

А как его точно узнать?

Автор: tol05 31.8.2007, 15:35
mihryak написал уже
string[] resourceNames = assembly.GetManifestResourceNames();

...

Автор: IEZ 31.8.2007, 15:48
Цитата(tol05 @  31.8.2007,  15:35 Найти цитируемый пост)
string[] resourceNames = assembly.GetManifestResourceNames();

Я уже перебрал все пути.
Цитата(mihryak @  31.8.2007,  15:01 Найти цитируемый пост)
Icon icon = new Icon(iconStream);

Но здесь летит прога и все. С ошибкой: Аргумент 'picture' должен быть рисунком, который можно использовать как Icon.

Автор: mihryak 31.8.2007, 17:05
ну, значит, попался не иконочный стрим.
придумай к.-н. name-convention для иконок и проверяй resourceName на соответствие ему перед вытаскиванием иконки из потока.
и оберни в try-catch

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)