Pergunta

Eu estou escrevendo uma aplicação que vai permite aos usuários alterar as propriedades de uma caixa de texto ou rótulo e esses controles são controles de usuário. Seria mais fácil de criar uma classe separada para cada controle de usuário que implementa as propriedades que eu quero que eles sejam capazes de mudar e, em seguida, vincular os de volta para o controle de usuário? Ou há um outro método que eu estou com vista?

Foi útil?

Solução

Criar um atributo personalizado, e marcar as propriedades que você deseja que o usuário editar com este atributo. Em seguida, defina a propriedade BrowsableAttribute em a grade de propriedade de uma coleção que contém apenas o seu atributo personalizado:

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;
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top