Вопрос

Я пишу приложение, которое позволяет пользователям изменять свойства текстового поля или метки, и эти элементы управления являются пользовательскими. Будет ли проще создать отдельный класс для каждого пользовательского элемента управления, который реализует свойства, которые я хочу, чтобы они могли изменять, а затем привязать их обратно к пользовательскому элементу управления? Или есть другой метод, который я пропускаю?

Это было полезно?

Решение

Создайте пользовательский атрибут и отметьте свойства, которые пользователь хочет отредактировать, с помощью этого атрибута. Затем настройте BrowsableAttribute свойство в сетка свойств для коллекции, содержащей только ваш пользовательский атрибут:

public class MyForm : Form
{
    private PropertyGrid _grid = new PropertyGrid();

    public MyForm()
    {
        this._grid.BrowsableAttributes = new AttributeCollection(new UserEditableAttribute());
        this._grid.SelectedObject = new MyControl();
    }
}

public class UserEditableAttribute : Attribute
{

}

public class MyControl : UserControl
{
    private Label _label = new Label();
    private TextBox _textBox = new TextBox();

    [UserEditable]
    public string Label
    {
        get
        {
            return this._label.Text;
        }
        set
        {
            this._label.Text = value;
        }
    }

    [UserEditable]
    public string Value
    {
        get
        {
            return this._textBox.Text;
        }
        set
        {
            this._textBox.Text = value;
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top