Помогите, я не могу поместить свои свойства в designer PropertyGrid

#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. Могу ли я сделать свойство общедоступным во время разработки, но стать приватным во время выполнения? (Возможно, это еще один глупый вопрос, я не мог придумать ситуацию, когда вы хотели бы это сделать …)