2013-04-22 4 views
0

내 양식 컨트롤 (텍스트 상자, 라디오 단추 등)의 readOnly 특성을 readOnly = true 또는 false로 설정해야합니다. 전역 변수를 기반으로을 기반으로합니다.페이지에서 모든 컨트롤을 가져 오는 중

 For Each Ctrl In Me.Controls 
      Ctrl.ReadOnly = myGlobalTrueFalse 
     Next 

을하지만 각 Ctrl 키에 대한 읽기 전용 속성이 없기 때문에 그것은 작동하지 않습니다

나는이 같은 컨트롤의 각 유형을 통해 루프 수 기대했다.

아이디어가 있으십니까?

감사합니다.

+1

하나는 당신이 Panel' 개체'에서 비활성화 할 컨트롤을 배치하는 것입니다 사용 후 바로 해제, 용기에 포함하여 모든 컨트롤을 방문하는' 패널 '개체. –

답변

2

을 발생하면 내가 무엇을 사용 그건 당신이 단순히 컨트롤에 값을 할당 시도하기 전에 재산이있는 경우 테스트해야 같아요.

For Each Ctrl In Me.Controls 
If Ctrl.ReadOnly Is Not Nothing Then 
    Ctrl.ReadOnly = myGlobalTrueFalse 
End If 
Next 

이 더 능숙가 단순히 패널과 같은 용기에 사용하지 않으려는 모든 컨트롤을 넣어보다 conssuming입니다, 용기 자체를 해제합니다. (어떤 컨트롤이 비활성화됩니다)

+0

내 모든 컨트롤은 .net ContentPlaceHolder 안에있는 표준 HTML 테이블 안에 있습니다. 이 중 하나가 readOnly로 설정할 수있는 컨테이너 역할을 할 수 있습니까? - 감사합니다 – SkyeBoniwell

+0

** 나는 웹상에서 ** 실제로 ** 참고하지 않습니다. 내가 몇 분만 들여다 볼게. – phadaphunk

+0

단순히 '비활성화'할 수 없습니다. 내가 발견 할 수있는 최선의 방법은 가시성을 false로 설정하는 것이지만 내용도 숨길 수 있습니다. 당신이 conainter를 바꿀 수있는 기회가 있습니까? – phadaphunk

-2
Try 
    For Each Ctrl In Me.Controls 
     Ctrl.ReadOnly = myGlobalTrueFalse 
    Next 
Catch ex As Exception 

End Try 

+1

-1. 그러한 것들에 try catch 패턴을 사용하지 마십시오. 무언가를 잡으면 뭔가 예외적으로 버티는 것이 아니라 뭔가 유용한 일을하고 싶습니다. – phadaphunk

+1

-1, 당신이 할 수있는 최소한은 루프 내부에서 시도하는 것입니다. 물론 이것은 다소 덜 잘못된 것입니다. – Behrooz

+0

@PhaDaPhunk 오류가 발생해도 멈추지 않으므로 Try를 사용합니다. 나를 위해 일합니다. –

1

먼저 PhaDaPhunks 대답을 참조하십시오.

나는 VB 코드를 작성 했으니 까.
루프를 더 추가 할 수 있습니다.

For Each Ctrl In Me.Controls 
If Ctrl.ReadOnly Is Not Nothing Then 
    Ctrl.ReadOnly = myGlobalTrueFalse 
End If 
For Each Ctrl2 In Ctrl.Controls 
    If Ctrl2.ReadOnly Is Not Nothing Then 
    Ctrl2.ReadOnly = myGlobalTrueFalse 
    End If 
Next 
Next 
+0

내가 당신의 코드를 볼 때 나는 왜 내가 ** 고도로 ** C# 구문을 선호하는지 기억한다. – phadaphunk

+0

@PhaDaPhunk는 동의했습니다. 물론 VB6에서 내가 12 살 때했던 것과 비교하면 이것은 절대적으로 간단합니다. – Behrooz

+1

그 점을 지적하십시오. 그런 작은 일을하는 화면에서 너무 많은 스팸 ... 0_o – phadaphunk

1

최고의 솔루션이

Dim ctrl As Control = Me.GetNextControl(Me, True) 
    Do Until ctrl Is Nothing 
     'perform action here 
     ctrl = Me.GetNextControl(ctrl, True) 
    Loop 
관련 문제