2016-12-19 6 views
0

私はPanelから継承するクラスmyPanelを持っています。myPanelにいくつかのラベルがあり、実行時にラベルlocaltionを変更する必要があります。各自が自分のコンテナ内のusercontrolをループする方法

 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 

「追加情報「InvalidCastExceptionががunhandleした」ためになるまで実行したときに、私はこのエラーを取得:型のオブジェクトをキャストすることができません 『System.Windows.Forms.Panel』とタイプします'XXX.myPanel'。 "

+0

あなたが_flp_balance_のControlsコレクションがタイプ_myPanel_の要素のみが含まれていることが確実であるためにあなたに必要な値を与えるWinFormsの名前空間内の2つのプロパティがあります
? _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

関連する問題