0

ユーザーに視覚的な合図を提供するために、フォーカスされている現在のテキストボックスを強調表示するコードがあります。私の質問は、テキストボックスを備えたフォームが10個あり、それらすべてに同じコードを提供したい場合です。複製する必要がありますか、それともグローバルメソッドを使用できますか?もしそうなら、例は非常に役に立ちます。ありがとう。

コードは次のとおりです。

Private Sub FocusChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim txt As TextBox = sender
    If txt.Focused Then
        txt.Tag = txt.BackColor
        txt.BackColor = Color.AliceBlue
    Else
        txt.BackColor = txt.Tag
    End If
End Sub
Private Sub CreateAccount_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For Each ctrl As TextBox In Me.Controls.OfType(Of TextBox)()
        AddHandler ctrl.GotFocus, AddressOf FocusChanged
        AddHandler ctrl.LostFocus, AddressOf FocusChanged
        ctrl.Tag = ctrl.BackColor
    Next
End Sub
4

1 に答える 1

2

この動作をすべてのTextBoxコントロールに追加する場合は、TextBoxクラスから独自のクラスを派生させ、メソッドOnGotFocusOnLostFocusメソッドをオーバーライドして、それに応じてプロパティを設定することをお勧めします。

方法は次のとおりです。

Public Class MyTextBox
    Inherits TextBox

    Protected Overrides Sub OnGotFocus(e As System.EventArgs)
        MyBase.OnGotFocus(e)
        Me.Tag = Me.BackColor
        Me.BackColor = Color.Aqua
    End Sub

    Protected Overrides Sub OnLostFocus(e As System.EventArgs)
        MyBase.OnLostFocus(e)
        Me.BackColor = Me.Tag
    End Sub
End Class

編集:そのクラスをプロジェクトに追加した後、ソリューションを再構築し、エラーなしでコンパイルすると、新しいTextBoxクラスがVSToolBoxに表示されることを忘れてしまいました。その後、他のコントロールと同じように、フォームにドラッグアンドドロップするだけです。

乾杯

于 2012-10-23T01:27:51.197 に答える