문제

한숨, 또 다른 PropertyGrid 질문. 나는 실제로 그것을 피할 수없는 문제에 부딪 칠 때까지 이것을 둘러 볼 수 있다고 생각했습니다.

나는 때때로 읽기 전용이어야하는 부울 속성이 있으며 때로는 treeview에서 선택한 객체에 따라 변할 수 있어야합니다.

내 질문은 어떻게 재산의 ReadonlyAttribute를 동적으로 변경할 수 있습니까? 분명히, 부울 변수를 생성 한 다음 readonlyattribute (boolvar)처럼 설정하려고 시도하는 것은 작동하지 않으며 이제는 아이디어가 없습니다.

내가 생각할 수있는 유일한 해결책은이 속성이 쓸 수있는 항목과 읽기 전용 항목에 대해 별도의 거의 동일한 클래스를 만드는 것입니다.

돕다? :)

도움이 되었습니까?

해결책

내가 할 일은 보호 된 버전의 속성을 가진 기본 클래스를 만드는 다음, 읽기가 많고 읽지 않는 비트가있는 기본 클래스를 상속하는 두 개의 클래스를 만드는 것입니다.

다른 팁

구현하여 클래스의 속성에 대한 동적 정보를 제공 할 수 있습니다. iCustomtypedescriptor.

속성 그리드가 호출됩니다 iCustomtypedescriptor.getProperties () 그리고 당신은 파생 된 물체 모음을 반환합니다 PropertyDescriptors. 구현에서는 PropertyDescriptor.isReadOnly 속성과 논리를 구현하십시오.

이것은 처음에는 약간의 작업이지만, 속성 이름과 설명 (현지화에 도움이)을 동적으로 반환하고 동적으로 속성을 읽기 전용으로, 동적으로 표시하고 숨기고 숨길 수있는 가능성을 제공합니다. 다른 유용한 것들.

여러 클래스와 관련된 유형 변환을 피하기 위해이 라인을 따라 무언가를 시도 할 수 있습니다.

class TestClass
{
    private bool isMyPropertyReadOnly;

    public bool IsMyPropertyReadOnly
    {
        get { return isMyPropertyReadOnly; }
        set { isMyPropertyReadOnly = value; }
    }

    private int myVar;

    public int MyProperty
    {
        get { return myVar; }

        set
        {
            if (isMyPropertyReadOnly)
            {
                throw new System.Exception("The MyProperty property is read-only.");
            }
            else
            {
                myVar = value;
            }
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top