Проблема .NET со встроенными изображениями - PullRequest
1 голос
/ 09 декабря 2011

У меня есть форма Windows, которая включает TreeView.В дереве есть изображения для его узлов, которые являются встроенными ресурсами в проекте.При запуске формы на моем компьютере для разработки (в Visual Studio и за ее пределами) она работает нормально, и у каждого триода есть свое собственное изображение.При запуске в рабочей коробке окно сталкивается с ошибкой при попытке загрузить встроенные изображения.Я добавил логику, чтобы не использовать изображения, если это происходит, так что дерево все еще отображается, но я хотел бы выяснить, в чем проблема и как ее исправить.

Возвращаемое сообщение об ошибке - это общий «параметр недопустим» при попытке создать новое растровое изображение.Трассировка стека дает строку «System.Drawing.Bitmap..ctor (Type type, String resource)» в качестве точки сбоя.См. Код ниже.

ImageList imageListNodes = new ImageList();
Bitmap mIcon;
mIcon = new Bitmap(this.GetType(), "m2.ico");   // This is the line that fails.
imageListNodes.Images.Add("m", (Image)mIcon);
tvRecords.ImageList = imageListNodes;   // This is the treeview used in the form.

Файл m2.ico был добавлен непосредственно в проект.Его свойства включают в себя Build Action = Embedded Resource и Copy to Output Directory = Not copy.

Мой компьютер для разработки работает под управлением Windows 7, а рабочая версия - Windows Server 2003 SP2 со средой Citrix.Проект находится в .NET 3.5, который у них обоих есть.Эта форма будет доступна на разных клиентских компьютерах, поэтому она должна работать в Server 2003 и более поздних версиях.

Спасибо за любые предложения!

РЕДАКТИРОВАТЬ: Несколькоминут, и уже предлагается, что эта установка не будет работать вообще.Я отметил выше, что это работает на моем компьютере как в режиме отладки Visual Studio, так и при вызове самостоятельно.Сами файлы значков отключены в общем сетевом ресурсе, поэтому нет никакой возможности, что DLL может их вытянуть;файлы должны быть вставлены правильно, и преобразование растровых / пиктограмм должно работать правильно, иначе оно не будет работать на моем компьютере.

Я ценю предложения и хочу попробовать другие методы достижения той же цели, но, пожалуйста, обратите внимание, что мой первоначальный вопрос, по крайней мере, состоит в том, почему это работает на моем компьютере, а не на другом.Спасибо!

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Я не думаю, что вы можете загрузить .ico в изображение просто так.Почему бы вам не попробовать сначала загрузить значок в объекте Icon, а затем вызвать Icon.ToBitmap , чтобы получить изображение.

0 голосов
/ 09 декабря 2011

Попробуйте использовать класс Icon, а не Bitmap.Я не верю, что они совместимы.

Редактировать: Только что вспомнил кое-что еще ... Иконка - это несколько изображенийОни являются растровыми, но могут содержать несколько изображений с разным разрешением.Но, как сказал @ PedroC88, вызовите ToBitmap, и он преобразуется.Хотя я думаю, какой размер он использует, определяется системой, и вы не можете выбирать.

...