Помогите, я не могу получить свои свойства в конструкторе 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 ни на что не жалуется, компилируется нормально, все остальные свойства отображаются нормально. Есть предположения?


person mickey    schedule 10.05.2011    source источник


Ответы (1)


Удалите частный метод доступа в операторе get LeftImage. Измените его на

get { return m_LeftImage; }
person David    schedule 10.05.2011
comment
Спасибо! Я попробую это! Я отмечу ваш ответ через пару дней, я не могу попробовать это прямо сейчас! - person mickey; 14.05.2011
comment
Сейчас попробовал, получилось! Но является ли public единственным доступом, который у меня может быть? Что, если я по какой-то причине захочу использовать ограничительный метод доступа? Это невозможно? - person mickey; 16.05.2011
comment
Нет, у вас будет неограниченный доступ. Вы создаете это свойство и добавляете его в сетку свойств по определенной причине. Вы устанавливаете Browsable=true, поэтому классы за пределами этого могут установить этот параметр в дизайнере. Это в значительной степени определение общественной собственности. Это действительно не имеет смысла по-другому. Представьте TextBox, у которого есть дизайнерское свойство MultiLine, но вы не можете получить к нему доступ из дизайнера. В чем смысл? - person David; 17.05.2011
comment
Очевидно, это не шокирует, если подумать... Я просто умственно отсталый... - person mickey; 21.05.2011
comment
Могу ли я сделать свойство общедоступным во время разработки, но сделать его приватным во время выполнения? (Может быть, это еще один глупый вопрос, я не мог придумать ситуации, когда вы хотели бы это сделать...) - person mickey; 21.05.2011
comment
Нет, потому что время разработки — это, по сути, время выполнения. Все, что вы делаете во время проектирования, преобразуется в вызовы во время InitializeComponent() вашего конструктора (во время выполнения). - person David; 23.05.2011
comment
Вы можете подделать его, используя базовые стратегии программирования. как set { if (_LeftImage != null) генерировать новое исключение (пытался установить его снова); иначе { _LeftImage = значение; } - person David; 23.05.2011