2017-11-06 1 views
0

몇백 개의 레이블이있는 양식을 만들고 Clear 버튼을 클릭하면 떠나는 동안 특정 레이블의 텍스트를 0으로 재설정해야합니다. 다른 레이블 텍스트 혼자. 그룹 상자를 사용하고 싶지 않습니다. 현재 레이아웃에서 잘 보이지 않기 때문입니다.각 cnt 루프를 사용하여 컨트롤의 특정 태그를 대상으로 지정하는 방법

나는 코드를 사용하려고 해요 : 모든 레이블을 지우는 잘 작동

For Each cnt In Me.Controls 
     If TypeOf cnt Is Label Then 
      CType(cnt, Label).Text = "" 
     End If 

,하지만 나뿐만 아니라 특정 태그를 지정하려면. 시도했습니다

For Each cnt In Me.Controls 
      If TypeOf cnt Is Label And CType(cnt, Label).Tag = "ResetTo0" Then 
       CType(cnt, Label).Text = "" 
      End If 

이 코드를 사용하려고하면 캐스팅 예외 오류가 발생합니다. 캐스팅 오류 또는 더 좋은 방법을 얻지 않고 내 태그에 어떻게 추가 할 수 있는지 알고있는 사람이 있습니까?

+1

And 대신 AndAlso를 사용해야합니다. 이것은 단락 회로 평가를 제공하고 오른쪽 측면 표현을 안전하게 유지합니다. –

답변

0

그냥 레이블 만 얻을 수있는 확장 OfType를 사용하고 이미 적당한 유형

For Each cnt In Me.Controls.OfType(Of Label) 
    If cnt.Tag = "ResetTo0" Then 
     cnt.Text = "" 
    End If 
Next 

의 그리고 모든 레이블을 설정 한 다음 태그 속성이있는 경우 아무것도

if cnt.Tag IsNot Nothing AndAlso cnt.Tag = "ResetTo0" Then 
    ..... 
End if 

에 대해서도 검사를 추가 한 줄로 시도해 볼 수도 있습니다 (이 방법이 선명도와 성능면에서 가장 좋지는 않겠지 만)

Me.Controls.OfType(Of Label). 
      Where(Function(x) x.Tag = "ResetTo0"). 
      ToList(). 
      ForEach(Function(k) k.Text = "") 
관련 문제