2012-11-22 4 views
7

私はパネル内のすべてのTextBoxをチェックし、Textが何もない場合はBackColorを変更するforeachループを作成しようとしています。各テキストボックスループについて

Dim c As TextBox 
For Each c In Panel1.Controls 
    if c.Text = "" Then 
    c.BackColor = Color.LightYellow 
    End If 
Next 

が、私はエラーを取得しています:

Unable to cast object of type System.Windows.Forms.Label to type System.windows.forms.textbox

+1

パネルにテキストボックス以外のコントロールがある場合は、許可する必要があります。 –

+0

どうすればそれをやりますか? – Lift

+0

重複可能[タイプ 'System.Windows.Forms.Button'のオブジェクトを '> System.Windows.Forms.TextBox'にキャストできません](http://stackoverflow.com/questions/13002128/unable-to-タイプオブジェクトのタイプのシステム - ウィンドウ - フォーム - ボタン - タイプ - システム - ウィ) –

答えて

8

は、代わりに、このような何かを試してみてください:

Dim ctrl As Control 
    For Each ctrl In Panel1.Controls 
    If (ctrl.GetType() Is GetType(TextBox)) Then 
     Dim txt As TextBox = CType(ctrl, TextBox) 
     txt.BackColor = Color.LightYellow 
    End If 
+0

チャームのように働いた!ありがとうございました! – Lift

+0

テキストを入力した後にバックカラーを戻したい場合があります。この例では失敗します。 –

+1

この特定の例では、条件式は、If(ctrl.GetType()がGetType(TextBox)の場合)、ctrl.BackColor = Color.LightYellow'の場合... – menssana

2

はこれを試してみてください私は、次の試してみました。あなたも、データを入力するときには、バックの色を出してあげる

For Each c As Control In Panel1.Controls 
     If TypeOf c Is TextBox Then 
      If c.Text = "" Then 
       c.BackColor = Color.LightYellow 
      Else 
       c.BackColor = System.Drawing.SystemColors.Window 
      End If 
     End If 
    Next 

継承されたTextBoxコントロールを作成し、フォーム上のことを使用することを含む、これを行うための別の方法もあります:

Public Class TextBoxCompulsory 
    Inherits TextBox 
    Overrides Property BackColor() As Color 
     Get 
      If MyBase.Text = "" Then 
       Return Color.LightYellow 
      Else 
       Return DirectCast(System.Drawing.SystemColors.Window, Color) 
      End If 
     End Get 
     Set(ByVal value As Color) 

     End Set 
    End Property 
End Class 
+0

しかし、同じ例外がスローされますが、上記の答えは非常に似ていました。とにかく、ありがとう。 – Lift

13

には、ネストされたコントロールが存在しないと仮定すると:

For Each c As TextBox In Panel1.Controls.OfType(Of TextBox)() 
    If c.Text = String.Empty Then c.BackColor = Color.LightYellow 
Next 
+2

+1、 ) ' – igrimpe

関連する問題