Как использовать класс в качестве свойства пользовательского элемента управления?

#c# #winforms

#c# #winforms

Вопрос:

Я несколько новичок в c #, поэтому прошу прощения, если у меня какая-либо терминология неправильная

У меня есть пользовательский элемент управления, и я хочу передать класс «Buffer», который я создал в окне свойств редактора. Я получил свойство «Buffer», которое отображается в редакторе, но оно выделено серым цветом, и я не могу его редактировать.

В качестве примера я также добавил новое строковое свойство с именем «myText», которое я могу редактировать в редакторе.

Можно ли использовать классы для свойства?

введите описание изображения здесь

Вот код.

 public partial class BufferControl : UserControl
{
    Buffer buffer = null; 
    string caption = ""; 

    [
        Description("Buffer to use for reads and writes"),
        Category("Appearance")
    ]
    public Buffer Buffer
    {
        get { return buffer; }
        set
        {
            buffer = value;
        }
    }


    [
        Description("Text for control"),
        Category("Appearance")
    ]
    public string MyText
    {
        get { return caption; }
        set
        {
            caption = value;
        }
    }

    public BufferControl()
    {
        InitializeComponent();
    }
}
 

Комментарии:

1. Если типы свойств вашего класса Buffer (плохое название, измените его как можно скорее) являются всеми известными типами (например, string, double, enumerators), то просто украсьте класс [TypeConverter(typeof(ExpandableObjectConverter))] . Вам также необходимо назначить новый объект Buffer в конфигурации UserControl. Поскольку это критическое изменение , вам необходимо удалить UC из родительской формы, перестроить проект и добавить новый UC в форму. Если класс Buffer вместо этого имеет сложную структуру, вам нужен пользовательский UITypeEditor . Редактор может быть формой, которая обеспечивает редактирование типов и преобразования (в конечном итоге).

2. Крайне маловероятно, что «буфер для чтения и записи» должен быть свойством, доступным для редактирования пользователем. Примените атрибут [Browsable(false)].

3. Добавьте Browsable(true) и проверьте, имеет ли свойство set метод (не свойство только для чтения)