如何在vb.net中设置所有DevXPress文本编辑控件的背景色

如何在vb.net中设置所有DevXPress文本编辑控件的背景色,vb.net,devexpress,Vb.net,Devexpress,我有10个Textbox,然后我尝试将背景色设置为红色,将所有Textbox设置为空白,这是可行的,但它没有按顺序从第一个Textbox设置到第十个Textbox,我也尝试设置TabIndex。但它仍然不起作用 #Region "Method" Private Function pf_validate_ok() For Each tb In Panel1.Controls If TypeOf tb Is DevExpress.XtraEditor

我有10个
Textbox
,然后我尝试将背景色设置为红色,将所有
Textbox
设置为空白,这是可行的,但它没有按顺序从第一个
Textbox
设置到第十个
Textbox
,我也尝试设置
TabIndex
。但它仍然不起作用

#Region "Method"

    Private Function pf_validate_ok()
        For Each tb In Panel1.Controls
            If TypeOf tb Is DevExpress.XtraEditors.TextEdit Then
                If tb.Text = String.Empty Then

                    tb.BackColor = Color.Red
                    tb.ForeColor = Color.White

                    Return False
                Else
                    tb.BackColor = Color.White
                    tb.ForeColor = Color.Black
                End If
            End If
        Next tb
        Return True
    End Function

#End Region
如果重命名它们,或者在表单周围剪切/粘贴它们,它们可能会变得“无序”

要保证顺序,请创建一个显式数组并迭代:

Private Function pf_validate_ok()
    Dim TBs() As TextBox = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
    For Each tb In TBs
        If TypeOf tb Is DevExpress.XtraEditors.TextEdit Then
            If tb.Text = String.Empty Then

                tb.BackColor = Color.Red
                tb.ForeColor = Color.White

                Return False
            Else
                tb.BackColor = Color.White
                tb.ForeColor = Color.Black
            End If
        End If
    Next tb
    Return True
End Function
或使用循环按名称搜索它们:

Private Function pf_validate_ok()
    For i As Integer = 1 To 5
        Dim matches() As Control = Me.Controls.Find("TextBox" & i, True)
        If matches.Length > 0 AndAlso TypeOf matches(0) Is DevExpress.XtraEditors.TextEdit Then
            Dim tb As DevExpress.XtraEditors.TextEdit = DirectCast(matches(0), DevExpress.XtraEditors.TextEdit)
            If tb.Text = String.Empty Then

                tb.BackColor = Color.Red
                tb.ForeColor = Color.White

                Return False
            Else
                tb.BackColor = Color.White
                tb.ForeColor = Color.Black
            End If
        End If
    Next
    Return True
End Function

您需要更改数组或控件中的名称。Find()调用以匹配特定场景。

您可以按
TextBox.Top
TextBox.Left
属性对
TextBox的
进行排序,以获得正确的顺序。
下面是使用
LINQ
的示例:

Dim textBoxs = From textBox In Panel1.Controls
               Where TypeOf textBox Is DevExpress.XtraEditors.TextEdit
               Order By textBox.Top, textBox.Left
               Select DirectCast(textBox, DevExpress.XtraEditors.TextEdit)

For Each textBox In textBoxs
    If textBox.Text = String.Empty Then
        textBox.BackColor = Color.Red
        textBox.ForeColor = Color.White

        Return False
    Else
        textBox.BackColor = Color.White
        textBox.ForeColor = Color.Black
    End If
Next textBox