Domanda

Sto scrivendo un'applicazione che consentirà agli utenti di modificare le proprietà di una casella di testo o di un'etichetta e questi controlli sono controlli utente. Sarebbe più semplice creare una classe separata per ogni controllo utente che implementa le proprietà che voglio che siano in grado di modificare e quindi ricollegare quelle al controllo utente? O c'è un altro metodo che sto trascurando?

È stato utile?

Soluzione

Crea un attributo personalizzato e tagga le proprietà che desideri che l'utente modifichi con questo attributo. Quindi impostare la BrowsableAttribute su la griglia delle proprietà di una raccolta contenente solo l'attributo personalizzato:

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;
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top