2013-09-26 3 views
0

Я создаю пакет Visual Studio для VS 2010 с помощью VB.Net, который содержит настраиваемый редактор. Редактор представляет много элементов в ListViews. Я хочу, чтобы выбранный элемент (его родительский элемент и любые дочерние элементы) отображался в списке объектов панели свойств PropertyGrid, чтобы разрешить редактирование свойств. У меня это работает. Обычно выпадающий список выбираемых элементов появляется с именем объекта жирным шрифтом, за которым следует имя типа для этого объекта. В моем пакете я не могу получить жирное имя, только имя типа.IProvideClassInfo для Visual Studio Добавить для панели свойств

http://msdn.microsoft.com/en-us/library/vstudio/bb165752(v=vs.100).aspx

Эта страница является только часть информации, которую я могу найти о наименовании объекта в списке объектов. Поскольку состояние ссылки, я реализовал IProvideClassInfo в объектах, которые я передаю VS для отображения в списке, но метод GetClassInfo никогда не вызывается и имя не отображается. Каждый объект также имеет общедоступное свойство, называемое «Имя», а также только в том случае, если это сработало. Это не так.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+0

Какой язык вы используете? –

+0

Очень расплывчатый. Если это объект .NET, который вы показываете вместо COM-объекта, вам нужен TypeConverter, чтобы настроить способ его отображения. –

+0

Хорошо, все, что я могу найти с участием TypeConverters, не имеет ничего общего с этим. Я думал, что вы что-то сделали из-за объекта COM-объекта. obj.GetType(). isOObject возвращает false для всех моих объектов, и я не уверен, как создать объект, который на самом деле является COM-объектом в VB.net. У Microsoft есть статья об этом, но в ней есть заметка о том, что они не являются «истинными» объектами com, поэтому я все еще не в порядке по всему этому. Кажется, никто этого не делал раньше. Шаблон по умолчанию, поставляемый с SDK VS 2010 SP1, не делает это правильно. – syko9000

ответ

1

Поиск в форуме на MSDN Наконец-то я нашел кого-то, отвечающего на этот вопрос.

IProvideClassInfo не имеет ничего общего с этим, как ссылка, которую я дал государствам. Правильный ответ заключается в реализации интерфейса ICustomTypeDescriptor в ваших объектах. Большинство реализаций функций включают в себя возврат результата одного и того же вызова функции на объект TypeDescriptor (общие/статические функции). Результатом GetComponentName станет полужирная часть раскрывающегося списка. Результат GetClassName будет неживой частью. Я не уверен, что делает функция GetEditor, но возвращая результат TypeDescriptor.GetEditor вызывает бесконечный цикл, возвращающий Nothing/null, похоже, работает.

Я создал базовый класс для всех моих объектов, которые будут идти в капли на панели свойств вниз, который реализует все функции, где GetClassName возвращает Me.GetType(). Имя и GetComponentName возвращает Me.ToString()

It прекрасно работает.