2017-11-06 4 views
0

私は数百のラベルを持つフォームを作成しています。クリアボタンをクリックすると、離れるときに特定のラベルのテキストを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 

のチェックを追加設定し、Tagプロパティを持っている場合あなたは1行で試すこともできます(このアプローチは明快さとパフォーマンスのために最善ではないと思われますが)。

Me.Controls.OfType(Of Label). 
      Where(Function(x) x.Tag = "ResetTo0"). 
      ToList(). 
      ForEach(Function(k) k.Text = "") 
関連する問題