Pregunta

Estoy escribiendo una aplicación que permitirá a los usuarios cambiar las propiedades de un cuadro de texto o etiqueta y estos controles son controles de usuario. ¿Sería más fácil crear una clase separada para cada control de usuario que implemente las propiedades que quiero que puedan cambiar y luego vincularlas al control de usuario? ¿O hay otro método que estoy pasando por alto?

¿Fue útil?

Solución

Cree un atributo personalizado y etiquete las propiedades que desea que el usuario edite con este atributo. Luego establezca la propiedad BrowsableAttribute en la cuadrícula de propiedades de una colección que contiene solo su 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top