Vb.net – Unable to cast object of type ‘System.Windows.Forms.Button’ to type > ‘System.Windows.Forms.TextBox’

vb.net

I wrote a function that empty all TextBox in my form:

Private Sub effacer()
        For Each t As TextBox In Me.Controls
            t.Text = Nothing
        Next
    End Sub

But I had this problem :

Unable to cast object of type 'System.Windows.Forms.Button' to type
'System.Windows.Forms.TextBox'.

I tried to add this If TypeOf t Is TextBox Then but I had the same problem

Best Answer

The Controls collection contains all controls of the form not only TextBoxes.

Instead you can use Enumerable.OfType to find and cast all TextBoxes:

For Each txt As TextBox In Me.Controls.OfType(Of TextBox)()
    txt.Text = ""
Next

If you want to do the same in the "old-school" way:

For Each ctrl As Object In Me.Controls
    If TypeOf ctrl Is TextBox
        DirectCast(ctrl, TextBox).Text = ""
    End If
Next
Related Topic