Question

J'écris une application qui va permettre aux utilisateurs de modifier les propriétés d'une zone de texte ou d'une étiquette. Ces contrôles sont des contrôles utilisateur. Serait-il plus facile de créer une classe distincte pour chaque contrôle utilisateur qui implémente les propriétés que je souhaite qu’elles puissent être modifiées, puis de les relier au contrôle utilisateur? Ou y a-t-il une autre méthode que je néglige?

Était-ce utile?

La solution

Créez un attribut personnalisé et marquez les propriétés que vous souhaitez que l'utilisateur modifie avec cet attribut. Définissez ensuite la propriété BrowsableAttribute sur la grille de propriétés vers une collection contenant uniquement votre attribut personnalisé:

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;
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top