using System;
using System.ComponentModel;
...
class MyClass
{
public int _firstProperty;
[DisplayName("Свойство 1")]
[Description("Первое свойство")]
[Category("Общие настройки")]
public int FirstProperty
{
get {return _firstProperty;}
set {_firstProperty=value;}
}
}
Одна ошибка: "The type or namespace name 'DisplayName' could not be found..."
Здравствуйте, DimaSoft, Вы писали:
DS>Ничего не пойму, что-то, наверное, торможу...:
В ComponentModel такого атрибута нету
Опыт — это такая вещь, которая появляется сразу после того, как была нужна...
Атрибут DisplayName
От:
Аноним
Дата:
26.02.05 18:09
Оценка:
> Одна ошибка: "The type or namespace name 'DisplayName' could Пробовал [System.ComponentModel.DisplayName("Свойство 1")] Укажите мне, пожалуйста, где ошибка.
Namespace: System.ComponentModel
DisplayNameAttribute class
.NET Framework Version Information Supported in: 2.0
Здравствуйте, EM, Вы писали:
EM>В ComponentModel такого атрибута нету
Это я уже понял...
А где есть?
Я читал статью на RSDN-е "Конфигурирование .NET-приложений" Андрея Корявченко; и там не указано, где находится этот атрибут, есть лишь
using System;
using System.ComponentModel;
А>.NET Framework Version Information А>Supported in: 2.0
А как в таком случае сделать следующее:
Компонент PropertyGrid, надо, чтобы свойства класса отображались в понятном конечному пользователю виде, по-русски?
И все это в 1.1.
Re: Атрибут DisplayName
От:
Аноним
Дата:
26.02.05 21:21
Оценка:
> А как в таком случае сделать следующее:
Компонент PropertyGrid, надо, чтобы свойства класса отображались в понятном конечному пользователю виде, по-русски? И все это в 1.1.
Примерно так:
[TypeConverter(MyClassTypeConverter)]
class MyClass
{ [MyDisplayName(...)]
public int Value
{
get {...}
set {...}
}
}
public class MyDisplayName : Attribute
{
public string Text
{
get {...}
}
}
public class MyPropertyDescriptor : PropertyDescriptor
{
public override string DisplayName
{
get
{
// возвращать MyDisplayName.Text
}
}
}
public class MyClassTypeConverter : TypeConverter
{
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
{
MyPropertyDescriptor[] arr = new MyPropertyDescriptor[...];
arr[0] = new MyPropertyDescriptor(.....);
...
PropertyDescriptorCollection ret = new PropertyDescriptorCollection(arr);
return ret;
}
}
А посмотри DisplayNameAttribute.cs из Януса. Папка \PropertyGridCustomizer\ проекта. Там и другие интересные файлики есть. Адрес репозитория Януса: svn://rsdn.ru/Janus .
Здравствуйте, DimaSoft, Вы писали:
DS>Прошу прощение за тупость и несообразительность, но как использовать этот атрубут? Ведь не достаточно добавить атрибут перед свойством:
DS>[DisplayName("Значение 1",0)] DS>public int FirstValue DS>{...}
DS>?
Ну, почти достаточно.
Смотри, добавляешь этот код в проект, затем пишешь в нужном классе примерно так:
#region Свойства someObject
[DisplayName("Здесь не место для рекламы", 1)]
public int SomeProperty
{
get
{...}
set
{...}
}
...
а в классе формы, где отоборадаются данные так:
propertyGrid.SelectedObject = new PropertyDisplayNameWrapper(someObject);
У меня работает. Попробуй, может и у тебя запустится.
З.Ы. Не забудь в классе someObject сделать указать using для PropertyDisplayNameWrapper, если он в другом namespace'е.