문제

사용자가 텍스트 상자 또는 레이블의 속성을 변경할 수있는 응용 프로그램을 작성하고 있으며 이러한 컨트롤은 사용자 컨트롤입니다. 각 사용자 컨트롤에 대해 별도의 클래스를 만드는 것이 가장 쉬운 속성을 구현 한 다음 변경할 수있는 속성을 구현 한 다음 사용자 컨트롤에 다시 바인딩 할 수 있습니까? 아니면 간과하는 또 다른 방법이 있습니까?

도움이 되었습니까?

해결책

사용자 정의 속성을 만들고 사용자 가이 속성으로 편집 할 속성을 태그하십시오. 그런 다음 설정하십시오 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