Наличие моего userControl имеет свой собственный значок на панели инструментов - PullRequest
7 голосов
/ 22 июля 2009

Я сделал элемент управления, который наследуется непосредственно от ErrorProvider. Я подумал, что применения этого атрибута ToolboxBitmap будет достаточно, чтобы у моего элемента управления был тот же значок на панели инструментов, что и у исходного элемента управления, но это не так. Это странно, как будто я добавляю элемент управления в форму, он будет выглядеть так, как и должен, но не меняет значок панели инструментов. Что мне здесь не хватает? Я уже перезапустил Visual Studio, и он сохраняет это поведение.

[ToolboxBitmap(typeof(ErrorProvider))]
public class ErrorProviderEx : ErrorProvider {
...
}

Ответы [ 4 ]

5 голосов
/ 10 сентября 2009

В Visual Studio 2008 значок, указанный ToolBoxBitmap, не добавляется на панель инструментов ни для одного из компонентов в текущем решении по соображениям производительности. Используется стандартный значок «шестеренка». Если вы добавите сборку вручную через диалоговое окно «Инструменты ... Добавить элементы ...», появится пользовательский значок, соответствующий вашему поведению. Более того, когда вы перетаскиваете ErrorProviderEx в форму, будет использоваться указанный вами значок, который также является поведением, которое вы отметили в комментарии.

Обратите внимание, что в вашем случае вы используете typeof(ErrorProvider), поэтому у вас не будет обычных проблем с использованием пользовательского растрового изображения.

(Такое поведение также может быть справедливо для Visual Studio 2005. Visual Studio 2003 испортил нас, отобразив значок.) (Мне лично не нравится это новое поведение. Я готов подождать лишнюю секунду или две, пока IDE получить значок для всех элементов управления и компонентов в решении. Интересно, есть ли в реестре взлом для отображения значков?)

2 голосов
/ 22 июля 2009

Это в том же проекте? Или DLL, на которую вы ссылаетесь?

Вы получаете только правильные значки, когда ссылаетесь на фиксированную DLL. Попробуйте создать контрольную DLL и сослаться на нее.

1 голос
/ 17 июня 2012

Так что есть обходной путь. Предположим, что ваш UserControl находится в проекте "MyControl", добавьте ссылку на себя. То есть: Ссылка проекта MyControl в проекте MyControl, как вы сделали бы в другом проекте. Затем значок будет отображаться на панели инструментов этого проекта MyControl.

0 голосов
/ 05 октября 2017

Самый простой способ обеспечить отображение значка на панели инструментов - создать файл 16x16 bmp, поместить его в папку проекта элемента управления, а затем установить его как встроенный ресурс.

Давайте рассмотрим сравнительно простой пример: предположим, что у вас есть компонент с именем MyCompany.Components.MyControl . Создайте растровое изображение 16x16 и сохраните его в корне папки проекта MyCompany.Components.MyControl как MyControl.bmp . Затем щелкните правой кнопкой мыши файл MyControl.bmp и выберите Свойства> Создать действие> Встроенный ресурс . В этот момент у вас есть еще один шаг: добавьте атрибут ToolboxBitmap над определением вашего класса (если вы используете частичные классы, я помещаю атрибут в основной файл .cs элемента управления, а не в файл Designer.cs). Для этого используйте следующий синтаксис:

[ToolboxBitmap(typeof(MyControl), "MyControl.bmp")]

Будьте абсолютно уверены, что:

  • Пространство имен для вашего класса проекта MyControl соответствует структуре папок, в которой ваш проект отображается в решении.
  • Может показаться очевидным, но убедитесь, что вы указали правильное имя для вашего файла bmp.

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

...