Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Задание картинки в ToolStripButton (http://forum.oszone.net/showthread.php?t=124651)

Delirium 01-12-2008 07:05 968695

Задание картинки в ToolStripButton
 
Глупый вопрос, но не могу найти решения:
имеется ToolStrip, на нем есть стандартные кнопки (New, Edit, e.t.c..). У них в качестве Image выставлен System.Image.Brush . Но нигде нет опции, позволяющей выбрать из стандартных MS иконок. Перерыл инет, все, что нашел, это список кодов картинок и их изображение здесь , но это применимо к свойству FaceId, которое применяется в панели MS Office.
А я хотел бы использовать стандартные иконки в программе. Отсюда и вопрос: как в C# задать на кнопке изображение со стандартной панели (дискета, лист и т.д.)?

Admiral 02-12-2008 00:40 969457

Delirium, так для любой кнопочки можно задать любую картинку вручную

Скрин из VB.NET 2008 EE
Если эти иконки есть отдельно, их можно взять и загнать один раз в файл ресурсов, а потом использовать его в своих прогах в будущем.

Delirium 02-12-2008 00:55 969465

Да нет, ресурсы то я использовать умею :) ВОт на Вашем скрине есть стандартные изображения напротив пунктов меню Copy, Cut, и т.д.(ножницы и т.д.). Вот их как использовать? При создании ToolStrip в VS 2008 есть опция - Insert Standart Menu - вставляет New, Copy, Paste с иконками. Как их выставить своим кнопкам?

pva 02-12-2008 14:32 970008

если бы на winapi, я бы закачал с ресурсов какого-нить shell32.dll или comctl32.dll. C# такое позволяет?
типа так: LoadIcon(GetModuleHandle("comctl32.dll"), ID_CUT);

Admiral 02-12-2008 22:06 970495

Delirium вот, так же подумали и в MS. Ведь когда выбрать опцыю Insert Standart Menu для ToolStrip, в EE редакциях так же доступна
,
Скрин из VB.NET 2008 EE
в проекте в файл Form1.Design.cs добавляются соответствующие строчки кода загрузки иконок из файла ресурсов Form1.resx, в котором уже добавлены все эти ресурсы (после опцыи Insert Standart Menu).

Скрин из C# 2008 EE
А что собственно мешает заказывать Insert Standart Menu, убрать неугодные кнопки, вытягивать из добавленного автоматически ресурс файла нужны иконки? Может по причине тривиальности этого не было найдено в поисковиках. Наверное, была мысль что эти иконки должны быть глобально в системе и что они оттуда коллективно тянутся? Видео MS решило обезопасить пользователя и в его прогу ресурсы кидать эти по принципу "всё своё носи с собой".
pva да конечно, из .NET прог есть доступ практически ко всем Win32 API. Нужно только известить прогу, что бы она искала нужную функцию не в нёдрах MS .NET Framework.
На VB.NET это будет так
Код:

Public Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As String) As Long
Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long

Вот только насколько будет правильным подход использовать Win32 в .NET прогах.

Delirium 03-12-2008 07:14 970733

Цитата:

Цитата Admiral
Может по причине тривиальности этого не было найдено в поисковиках »

Именно по этому. Чет я не допетрил открыть ресурсы формы и увидеть их там :))))
Цитата:

Цитата Admiral
Вот только насколько будет правильным подход использовать Win32 в .NET прогах »

Вполне допустимо, для очень многих действий приходится подключать API.
Вопрос решен, большое спасибо.

Delirium 03-12-2008 07:31 970740

Хотя интересно, почему ж MS не предусмотрели стандартной возможности в C# вставлять стандартные иконки без танцев с бубнами.......

Admiral 03-12-2008 16:10 971249

При использовании Win32 API в .Net прогах теряется хоть какая-то но многоплатформенность. Может и не актуально, но всё же.
К системным иконкам всё же непосредственно из .Net доступ есть, а именно через SystemIcons
Ножниц и других Офис элементов там нет, но

те что в окне сообщений (MsgBox) доступны - здесь найдутся
SystemIcons.Application
SystemIcons.Asterisk
SystemIcons.Error
SystemIcons.Exclamation
SystemIcons.Hand
SystemIcons.Information
SystemIcons.Question
SystemIcons.Warning
SystemIcons.WinLogo


Время: 21:00.

Время: 21:00.
© OSzone.net 2001-