首页 > 解决方案 > 我们如何在 VB.net 中创建控件数组

问题描述

当任何文本框获得焦点时,我有一个带有 4 个文本框的表单,然后它的颜色变回黄色,其他文本框的颜色变回白色。

当我在 vb6 中工作时,它很容易使用控件数组完成例如创建文本框控件数组

设置代码如

Private Sub text1_GotFocus(Index As Integer)
Call color
Text1(Index).BackColor = vbyellow
End Sub

Private Sub color()
For I = 1 To 4
Text1(I).BackColor = vbWhite
Next I

但是在 VB.net 中没有控制数组,所以我们做一些类似的事情

Module Module1
    Public mytext() As TextBox = {Form1.TextBox1, Form1.TextBox2, Form1.TextBox3, Form1.TextBox4}
End Module

    Sub color()
        For i = 0 To 3
            mytext(i).BackColor = Drawing.Color.White
        Next i
    End Sub

    Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles 
    TextBox1.GotFocus
        color()
        ChangeColor(sender)
    End Sub

    Private Sub TextBox2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.GotFocus
        color()
        ChangeColor(sender)
    End Sub

    Private Sub TextBox3_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3.GotFocus
        color()
        ChangeColor(sender)
    End Sub

    Private Sub TextBox4_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox4.GotFocus
        color()
        ChangeColor(sender)

    End Sub

    Sub ChangeColor(ByRef box As TextBox)
        box.BackColor= Drawing.Color.Yellow
    End Sub
End Class

但是它的长代码任何人都可以像我的 vb6 代码一样告诉我一个简单的方法

标签: vb.net

解决方案


将 Handles 子句链接在一起。MSDN 示例:https ://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/handles-clause#example-2

在您的情况下,它将如下所示:

Private Sub TextBoxChangeColor_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus, TextBox2.GotFocus, TextBox3.GotFocus, TextBox4.GotFocus
   Dim this As TextBox = DirectCast(sender, TextBox)
   this.BackColor = Color.Yellow
End Sub

Private Sub TextBoxChangeColor_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus, TextBox2.LostFocus, TextBox3.LostFocus, TextBox4.LostFocus
   Dim this As TextBox = DirectCast(sender, TextBox)
   this.BackColor = Color.White
End Sub

推荐阅读