如何将AddHandler添加到多个项目并正确引用所述处理程序

时间:2017-11-15 00:41:27

标签: vb.net

我正在编写一个程序,我需要为每个文本框创建GotFocus和LostFocus事件处理程序。

现在,只要点击表单中的任何文本框,我现在就会产生错误:

Private Sub lblTotalWeight_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Each cnt In Me.Controls.OfType(Of TextBox)
            AddHandler cnt.GotFocus, AddressOf txtBox_GotFocus
        Next

    End Sub

    Private Sub txtBox_GotFocus(sender As System.Object, e As System.EventArgs)
        Dim textBox As TextBox = Me.Controls.OfType(Of TextBox)
        textBox.ForeColor = Color.White
        textBox.BackColor = Color.LightGray
    End Sub

我收到Dim textBox的错误,因为TextBox = Me.Controls.OfType(Of TextBox),我不知道为什么或如何修复它。

如果有帮助的话,将会有另一个私人潜艇参与失去焦点的活动几乎相同。

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:4)

Me.Controls.OfType(Of TextBox)返回文本框控件列表。它在AddHandler调用中效果很好,但在您的事件处理程序中,您需要使用sender as Textbox

 Dim textBox As TextBox = DirectCast(sender, Textbox)

答案 1 :(得分:2)

此代码:

Me.Controls.OfType(Of TextBox)

返回IEnumerable(Of TextBox)。它不是一个Textbox,因此您无法将其分配给TextBox变量。您需要访问引发事件的TextBox

Dim textBox As TextBox = DirectCast(sender, TextBox)

在事件处理程序中,sender参数始终是引发事件的对象。

答案 2 :(得分:0)

Me.Controls.OfType(Of TextBox) 替换 CType(sender, TextBox) 用于事件 txtBox_GotFocus