2016-12-19 1 views
0

Panel에서 상속 한 클래스 myPanel이 있는데, myPanel에 일부 레이블이 있습니다. 런타임에 labelt를 변경해야합니다. 입력 유형 'System.Windows.Forms.Panel'의 개체를 캐스팅 할 수 없습니다 : 각각각에 대해 내 컨테이너에서 usercontrol을 반복하는 방법

에 대한

"추가 정보"InvalidCastException이 unhandle했다 "때까지 실행할 때

 For Each pn As myPanel In ref.flp_balance.Controls 
      If ref.flp_balance.VerticalScroll.Visible Then 
       pn.label.Left = ref.flp_balance.Right - 160 
      Else 
       pn.label.Left = ref.flp_balance.Right - 135 
      End If 
     Next 

나는이 오류 'XXX.myPanel'. "

+0

당신이 _flp_balance_의 Controls 컬렉션 유형 _myPanel_의 요소가 포함되어 있는지 확실 당신에게 필요한 가치를주는 윈폼 네임 스페이스의 두 가지 속성이 있습니다
? 그리고 _flp_balance_ 무엇입니까? – Steve

+0

flp_balance에 Panel 및 myPanel이 포함되어 있습니다. – vbnewbie

+0

해당 컨테이너의 모든 컨트롤이 해당 유형이 아니라면 해당 유형, 즉 In ref.flp_balance.Controls.OfType (Of MyPanel)() 만 사용하도록 지정하십시오. – jmcilhinney

답변

1

다음의 요소만을 반환하도록 확장 OfType을 도입하여 foreach 루프를 변경할 수있는 설계 오류가 아닌 경우 컨테이너 flp_balance도 일반 패널 입력 myPanel의뿐만 아니라 요소를 포함 보인다 필수 유형. 당신이 수직 또는 수평 스크롤의 존재를 설명하기 위해 패널의 크기를 크기를 조정하려면 사용자가 디스플레이를 원하는대로 조정하면

For Each pn As myPanel In ref.flp_balance.Controls.OfType(Of myPanel)() 

또한, 당신은 실패 할 것 '매직 넘버'를 피해야한다 그것의 체계의 특혜. 실제 시스템

HorizontalScrollBarHeigth
VerticalScrollBarWidth

관련 문제