как мы создаем массив управления в VB.net - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть форма с 4-мя текстовыми полями, когда любое текстовое поле получает фокус, затем его цвет обратно меняется на желтый, а другой цвет заднего поля текста меняется на белый.

Когда я работаю в vb6, это легко сделать с помощью управляющего массива. пример Создать управляющий массив текстового поля

set Код выглядит как

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

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Цепочка пунктов Ручки вместе. Пример 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
1 голос
/ 27 апреля 2020

Другой вариант:

Вы можете централизовать все ваши текстовые поля GotFocus события одним и тем же способом:

' In the New() Sub of your Form:
For Each t As TextBox In {TextBox1, TextBox2, TextBox3, TextBox4}
    AddHandler t.GotFocus, AddressOf TextBoxList_GotFocus
Next

Подпись TextBoxList_GotFocus:

Private Sub TextBoxList_GotFocus(sender As Object, e As EventArgs)
    color()
    ChangeColor(sender)
End Sub

Достаточно близко к вашей предыдущей обработке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...