2010-07-28 4 views
1

2 개의 탭 컨트롤이있는 양식이 있습니다. Tab2에서 유효성을 검사해야하는 몇 가지 컨트롤이 있습니다.control.Visible을 사용하면 선택되지 않은 탭 페이지에있는 경우 False가 반환됩니다.

유효성을 검사 할 컨트롤이 보이지 않음으로 설정된 경우 유효성 검사를 무시하고 싶습니다. (즉, 컨트롤이 사용자에게 표시되지 않았습니다.) 탭이 선택되지 않았으므로 탭 2의 모든 컨트롤에서 Visible = False가 반환됩니다.

Becuase Visible은 부모 컨트롤의 Visible 속성이 False이면 False를 반환하고 부모 탭 컨트롤을 사용하여 컨트롤이 Visible = False로 설정되었는지, Visible = False로 설정되었는지를 확인할 수 없습니다 보이지 않습니다.

컨트롤에서 Visible = False로 설정되었는지 어떻게 확인할 수 있습니까? 컨트롤 클래스의 개인 "상태"변수가이 정보를 보유하고있는 것으로 보이지만 반사를 사용하지 않기를 원합니다 ...이 작업은 느려지고 조금 해킹 될 것입니다!

내 유일한 다른 아이디어는 컨트롤 클래스에 내 자신의 속성을 추가하여 숨길 수 있다는 것입니다. (컨트롤은 내가 작성한 것입니다.)
하지만 이것은 모든 양식에서 많은 작업을 의미합니다. 개별 컨트롤이나 컨트롤 그룹을 숨기는 다양한 코드가있는 많은 형식이 있습니다.

희망이 있습니다.

감사합니다, 마이크 G

당신이 컨트롤에 임의의 마커를 배치 할 경우 당신은 Control.Tag 특성에 값을 인코딩 할 수
+0

아무도 친구 GetState() 함수에 대해 많이 알고 있지 않습니까? – MikeG

답변

4

을하지 않는 것 같습니다. 몇 가지 perf 테스트를 완료하고 내 시나리오에서는 괜찮은 것으로 보입니다.

먼저 양식의 탭 컨트롤이 있는지 확인한 다음이 코드가 없으면 컨트롤을 사용합니다 .IsVisble. control.Visible 코드에서 볼 수 있도록 설정해야한다 True를 reutrns 경우 는 또한, ... 그때 이것을 사용 모호한 경우에만 다음의 다음

Private Shared GetStateMethodInfo As MethodInfo = _ 
GetType(Control).GetMethod("GetState", BindingFlags.Instance Or BindingFlags.NonPublic) 

전화

...

Return CBool(GetStateMethodInfo.Invoke(control, New Object() {2})) 
+0

이 외에도 그룹 상자 나 패널은 컨트롤에 포함되지 않고 보이지 않게됩니다.따라서 지금은 꽤 복잡한 코드가 모든 Visible 속성을 보았지만 이제는 탭 페이지를 다르게 처리하는 상위 계층을 "걷습니다". – MikeG

0

.

그러나, 이것은 내가 반사를 사용하기로 결정했습니다 결국 ... 검증을 관리 할 수있는 최선의 방법처럼

+0

안녕하세요, 제안 해 주셔서 감사합니다. 그러나이 아이디어는 여러 가지 형태로 여러 앱에 포함되어 있기 때문에 많은 노력이 필요합니다. 어쨌든 나는 모든 컨트롤을 서브 클래 싱했기 때문에 태그가 필요하지 않으므로 내 자신의 특성을 추가 할 수 있습니다. – MikeG

0

각 basecontrol을 상속 한 다음 내 자신의 구현을 사용하여이 문제를 해결했습니다. 그런 다음 내 자신의 isvalidatable 속성을 컨트롤에 추가 할 수 있습니다.

정상적으로 들리지만,이 기본 클래스 만 변경하여 DevExpress 변형에 대한 Windows Forms 컨트롤을 변경할 수있었습니다.

+0

안녕하세요, 의견을 보내 주신 Johnhny 님, 우리는 통제 권한을 상실하기 때문에 이것을 고려했습니다. 주요 문제는 내가보기에 보이지 않는 부모 컨트롤의 가끔씩의 그룹입니다. 예를 들어, 그룹 박스 또는 패널이 포함 된 컨트롤보다는 보이지 않게 만들어 지므로 부모 계층 구조를 "걷는"복잡한 반복 선택 기반 코드 모든 Visble 폴리시에서. – MikeG

관련 문제