无法将类型为“System.Windows.Forms.Button”的对象强制转换为类型> 'System.Windows.Forms.TextBox'

时间:2012-10-21 20:55:39

标签: vb.net

我编写了一个以我的形式清空所有TextBox的函数:

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

但我有这个问题:

  

无法将类型为“System.Windows.Forms.Button”的对象强制转换为类型   'System.Windows.Forms.TextBox'。

我尝试添加此If TypeOf t Is TextBox Then,但我遇到了同样的问题

3 个答案:

答案 0 :(得分:5)

Controls集合包含表单的所有控件,而不仅仅是TextBoxes。

相反,您可以使用Enumerable.OfType查找并投射所有TextBoxes

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

如果你想以“老派”的方式做同样的事情:

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

答案 1 :(得分:2)

For Each t As TextBox In Me.Controls

此处此行尝试将每个控件转换为TextBox 您需要将其更改为As Control,或在迭代之前使用Me.Controls.OfType(Of TextBox)()过滤集合。

答案 2 :(得分:0)

这是一行代码,它将清除groupBox中的所有radioButtons,它们附加到button_click:

groupBoxName.Controls.OfType<RadioButton>().ToList().ForEach(p => p.Checked = false);

使用适当的更改使其适应您的需求。