10

パネル内のすべての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

しかし、エラーが発生します:

タイプSystem.Windows.Forms.LabelのオブジェクトをタイプSystem.windows.forms.textboxにキャストできません

4

3 に答える 3

18

ネストされたコントロールがないと仮定します。

For Each c As TextBox In Panel1.Controls.OfType(Of TextBox)()
  If c.Text = String.Empty Then c.BackColor = Color.LightYellow
Next
于 2012-11-22T00:45:21.417 に答える
16

代わりに、次のようなものを試すことができます。

  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
于 2012-11-22T00:41:24.143 に答える
3

これを試して。データを入力すると色が元に戻ります

    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
于 2012-11-22T00:41:04.350 に答える