#c# #editor #designer #propertygrid
#c# #редактор #конструктор #propertygrid
Вопрос:
Что в этом плохого? Свойство LeftImage не отображается в PropertyGrid (WinForms .NET 3.5)
private Image _LeftImage;
/// <summary>
/// Sets the small image appearing to the left of the trackbar
/// </summary>
[
Description("The small image appearing to the left of the trackbar"),
Category("Appearance"),
EditorAttribute(typeof(System.Drawing.Design.ImageEditor), typeof(System.Drawing.Design.UITypeEditor)),
DefaultValueAttribute(typeof(Image),"null"),
Browsable(true), EditorBrowsable(EditorBrowsableState.Always)
]
public Image LeftImage
{
private get { return _LeftImage; }
set
{
if (value.Height != 16 || value.Width != 16)
{
_LeftImage = new Bitmap(value,new Size(16,16));
}
else _LeftImage = value;
Invalidate();
}
}
Где я ошибаюсь??? IDE ни на что не жалуется, и она отлично компилируется, и все остальные свойства отображаются нормально. Есть мысли?
Ответ №1:
Удалите частный метод доступа в инструкции get для LeftImage. Измените его на
get { return m_LeftImage; }
Комментарии:
1. Спасибо! Я попробую это! Я отмечу ваш ответ через пару дней, я не могу попробовать это прямо сейчас!
2. Теперь я попробовал, это сработало! Но является ли public единственным средством доступа, которое у меня может быть? Что, если бы я по какой-то причине захотел использовать ограничительный метод доступа? Это невозможно?
3. Нет, у вас будет неограничивающий доступ. Вы создаете это свойство и добавляете его в таблицу свойств не просто так. Вы устанавливаете Browsable = true, поэтому классы за пределами этого могут устанавливать этот параметр в конструкторе. Это в значительной степени определение общедоступного свойства. На самом деле это не имеет смысла никаким другим способом. Представьте текстовое поле, у которого есть многострочное свойство designer, но вы не можете получить к нему доступ из designer. Какой в этом был бы смысл?
4. Очевидно, что это не шокирует, если подумать об этом… Я просто отстаю в развитии…
5. Могу ли я сделать свойство общедоступным во время разработки, но стать приватным во время выполнения? (Возможно, это еще один глупый вопрос, я не мог придумать ситуацию, когда вы хотели бы это сделать …)