Подлючение иконки к собственному контролу
От: AlexandrKononov  
Дата: 28.07.07 06:37
Оценка:
Проблема такая, сделал я простинький контрол и захотел подключить его в студию. Для его отображения в тулбоксе сделал свою иконку. Но подлючить ее так и не получилось, постоянно отображается дефолтовая шестеренка. Вариантов перепробывал уйму! И неймспейсы менял в typeof(), и иконку перерисовывал в разых форматах от 16Х16 до 42Х42 перекладывая ее по разным папкам с различными способами подключения к проекту, и в свойствах проекта дефаулт неймспейс проверил. Результат один и тот же: неработает
Вот последний вариант кода:

namespace TypeTextBox_Control
{
    [ToolboxBitmap(typeof(TypeTextBox_Control.TypeTextBox), "Resources.TypeTextBox.ico")]
    [ToolboxItem(true)]
    public class TypeTextBox : TextBox
    {


Что тут не праваильно?
Может дело в формате файла иконки или разрешении?
Re: Подлючение иконки к собственному контролу
От: Аноним  
Дата: 28.07.07 21:10
Оценка:
Здравствуйте, AlexandrKononov, Вы писали:

AK>Проблема такая, сделал я простинький контрол и захотел подключить его в студию. Для его отображения в тулбоксе сделал свою иконку. Но подлючить ее так и не получилось, постоянно отображается дефолтовая шестеренка. Вариантов перепробывал уйму! И неймспейсы менял в typeof(), и иконку перерисовывал в разых форматах от 16Х16 до 42Х42 перекладывая ее по разным папкам с различными способами подключения к проекту, и в свойствах проекта дефаулт неймспейс проверил. Результат один и тот же: неработает

AK>Вот последний вариант кода:

AK>
AK>namespace TypeTextBox_Control
AK>{
AK>    [ToolboxBitmap(typeof(TypeTextBox_Control.TypeTextBox), "Resources.TypeTextBox.ico")]
AK>    [ToolboxItem(true)]
AK>    public class TypeTextBox : TextBox
AK>    {
AK>


AK>Что тут не праваильно?

AK>Может дело в формате файла иконки или разрешении?

здесь
Re: Подлючение иконки к собственному контролу
От: Pavel_Agurov Россия  
Дата: 30.07.07 12:24
Оценка:
Если два способа как это сделать: картинка может храниться в отдельном файле или ее можно хранить внутри модуля компонента.
Ну, конечно, сначала ее нужно сделать. Иконка должна иметь размер 16x16 пикселей, палитру 16 цветов и формат BMP или ICO.
Для внешней иконки нужно добавить к классу атрибуты в виде:
[ToolboxItem(true)]
[ToolboxBitmap("C:\\Test\\GradientLabel.bmp")]
public partial class GradientLabel : Label

Первый атрибут говорит что класс GradientLabel будет использоваться как элемент в стандартной панели компонент, а второй — где найти файл иконки. Вообще говоря, первый атрибут выставлен в значение true по умолчанию, т. к. класс является наследником класса Label, но хорошей практикой является указать это напрямую.
Если же иконка хранится внутри модуля (что мне кажется более естественным и удобным), то соответствующий файл нужно добавить к проекту (меню ProjectAdd Existing Item). В свойствах файла параметр Build Action нужно уставить в значение Embedded Resource. Теперь добавим атрибуты, указывающие как найти иконку:
[ToolboxItem(true)]
[ToolboxBitmap(typeof(GradientLabel))]
public partial class GradientLabel : Label

По умолчанию берется имя файла, совпадающее с именем типа плюс расширение bmp. Если по какой то причине нужно указать другое имя файла, то нужно использовать второй конструктор атрибута с двумя агрументами:
[ToolboxItem(true)]
[ToolboxBitmap(typeof(GradientLabel), "Label.bmp")]
public partial class GradientLabel : Label

Не знаю почему, но для компонентов текущего проекта ни иконка, ни описание не появляется. Может быть это ошибка в редакторе VS, а может быть так и нужно. Если устанавливать компонент в Toolbox, то все показывается правильно.
Кстати, есть и другой способ установки иконки. Так как по умолчанию атрибут ToolboxBitmapAttribute берет файл согласно имени типа, то VS автоматически загружает иконку, если находит такой файл в папке проекта. Конечно такой способ наиболее простой, но мне кажется более правильно хранить иконку как внутренний ресурс.
Re[2]: Подлючение иконки к собственному контролу
От: AlexandrKononov  
Дата: 04.08.07 06:33
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:

P_A>Если два способа как это сделать: картинка может храниться в отдельном файле или ее можно хранить внутри модуля компонента.

P_A>Ну, конечно, сначала ее нужно сделать. Иконка должна иметь размер 16x16 пикселей, палитру 16 цветов и формат BMP или ICO.
P_A>Для внешней иконки нужно добавить к классу атрибуты в виде:
P_A>
P_A>[ToolboxItem(true)]
P_A>[ToolboxBitmap("C:\\Test\\GradientLabel.bmp")]
P_A>public partial class GradientLabel : Label
P_A>

P_A>Первый атрибут говорит что класс GradientLabel будет использоваться как элемент в стандартной панели компонент, а второй — где найти файл иконки. Вообще говоря, первый атрибут выставлен в значение true по умолчанию, т. к. класс является наследником класса Label, но хорошей практикой является указать это напрямую.
P_A>Если же иконка хранится внутри модуля (что мне кажется более естественным и удобным), то соответствующий файл нужно добавить к проекту (меню ProjectAdd Existing Item). В свойствах файла параметр Build Action нужно уставить в значение Embedded Resource. Теперь добавим атрибуты, указывающие как найти иконку:
P_A>
P_A>[ToolboxItem(true)]
P_A>[ToolboxBitmap(typeof(GradientLabel))]
P_A>public partial class GradientLabel : Label
P_A>

P_A>По умолчанию берется имя файла, совпадающее с именем типа плюс расширение bmp. Если по какой то причине нужно указать другое имя файла, то нужно использовать второй конструктор атрибута с двумя агрументами:
P_A>
P_A>[ToolboxItem(true)]
P_A>[ToolboxBitmap(typeof(GradientLabel), "Label.bmp")]
P_A>public partial class GradientLabel : Label
P_A>

P_A>Не знаю почему, но для компонентов текущего проекта ни иконка, ни описание не появляется. Может быть это ошибка в редакторе VS, а может быть так и нужно. Если устанавливать компонент в Toolbox, то все показывается правильно.
P_A>Кстати, есть и другой способ установки иконки. Так как по умолчанию атрибут ToolboxBitmapAttribute берет файл согласно имени типа, то VS автоматически загружает иконку, если находит такой файл в папке проекта. Конечно такой способ наиболее простой, но мне кажется более правильно хранить иконку как внутренний ресурс.

Я наверно тупой, ни один способ не прошел
Может проблема в bmp файле? На него никакие ограничения не накладываются по размеру и количеству цветов?
Re[3]: Подлючение иконки к собственному контролу
От: Pavel_Agurov Россия  
Дата: 04.08.07 16:58
Оценка:
AK>Может проблема в bmp файле? На него никакие ограничения
>не накладываются по размеру и количеству цветов?

Иконка должна иметь размер 16x16 пикселей, палитру 16 цветов и формат BMP или ICO.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.