2010-04-16 3 views
4

컨트롤의 Visible 속성이 속성 변경을 통해 설정되었는지 또는 해당 컨트롤에서 Visible 속성을 상속하는지 확인하는 방법을 찾아야합니다. 부모의. 리플렉터를 사용하여 this.GetVisibleCore() 및 this.GetState() 함수가 모두 내부 메서드이기 때문에 호출 할 수 없습니다.컨트롤을 통해 Control.Visible이 설정되었는지 또는 값이 상속되는지 확인하는 방법

위젯 자체가 동적으로 만들어 지므로 각 위젯을 만든 직후에 VisibleChanged 이벤트에 메서드를 연결하지 않으므로이 속성을 모니터링 할 수 있습니다. 해야만한다면, 나는 내가 원하는 것 같지만 좀 더 우아한 것을 찾고 있습니다.

편집

내가 양식을 숨기고을 닫거나 양식을 구축하지만, 숨겨진 그것을 유지하기 위해 갈 때 내가 정말 알고 싶은 것은, 거짓 보이는 어떤 값 형태가 숨겨져 있기 때문에 어떤 값은 거짓 그들은 거짓으로 설정 되었기 때문에. 다시 각 메소드의 각 VisibleChanged 이벤트에 메소드를 첨부하고 싶지 않습니다. 난 그냥 어떻게 든 컨트롤 개체에서 그것을 읽고 싶다.

+0

합니다. Visible 속성이 재정의되었는지 확인하려고합니까? –

+0

아니요 Visible 속성이 설정된시기를 알고 싶습니다. 양식 자체가 숨겨져 있거나 아직 표시되지 않은 경우 모든 컨트롤 표시 속성은 false입니다. 양식이 표시되면 코드의 어딘가에 false를 설정하지 않으면 표시되는 모든 속성이 true로 전환됩니다. 폼을 숨기면 Visible 속성은 false가됩니다. 내가 알고 싶은 것은 컨트롤에 Visible 속성이 설정되어 있는지 여부와 자식으로 할당 된 폼/컨테이너의 표시/숨김 상태에 관계없이 해당 값이 무엇인지 알아 보는 것입니다. – JDMX

+0

아마도 모든 컨트롤을 반복하여 모든 보이는 컨트롤의 배열을 만드는 도우미 함수를 만들 수 있습니다. 그런 다음이 목록을 사용하여로드 된 이후 변경된 내용에 관계없이 양식 컨트롤을 표시하거나 숨길 수 있습니다. 난 당신이 단지 사용자 정의 양식을 표시/숨길 수 있기를 원한다고 가정합니다. – Zachary

답변

2

아직 명확하지 않지만 Visible 속성 getter가 컨트롤의 실제 가시성 상태를 반환한다는 것이 문제라고 생각합니다. Visible에 마지막으로 할당 된 값뿐만 아니라 컨트롤의 부모가 표시되는지 여부도 고려합니다. 즉, UserControl에 Button이 있고 UserControl의 Visible = false이면 버튼의 Visible은 항상 false가됩니다.

당신은 SetVisibleCore을 무시할 수 있습니다() 컨트롤을 볼 수 있도록 의도 여부를 확인하기 : 매우 불분명

public bool CouldBeVisible { get; set; } 

protected override void SetVisibleCore(bool value) { 
    CouldBeVisible = value; 
    base.SetVisibleCore(value); 
} 
+0

나는 실제 가치에 도달하고 싶었지만 이것이 효과가있을 것 같아요. 내가 볼 수있는 단점은 Visible 속성 (Form, Textbox, Label, MenuItem 등)을 추적하고자하는 기본 위젯을 상속 받아야하는 커스텀 위젯을 생성해야하고 CouldBeVisible의 값이 필요하다는 것을 식별해야한다는 것입니다 Visible 속성에 할당됩니다. – JDMX

관련 문제