转换错误无效

Jac*_*iri 1 vb.net

我最近将VB 6项目升级到.net.我遇到了这段代码的问题:

    Dim CtrlName As System.Windows.Forms.MenuItem

    For Each CtrlName In Form1.Controls

    'Some code here

    Next CtrlName
Run Code Online (Sandbox Code Playgroud)

现在这段代码编译但抛出以下运行时错误:

无法将类型为"System.Windows.Forms.Panel"的对象强制转换为"System.Windows.Forms.MenuItem".

我在主题表格上有一个面板控件.我该如何解决这个问题?谢谢.

Kon*_*lph 5

您正在迭代直接在表单内的所有控件,而不仅仅是MenuItems.但是,您的变量是类型MenuItem.这导致了这个问题.

对于普通控件(例如Buttons),您需要使用以下,轻松修复; 在循环内测试控件类型是否正确:

For Each control As Control In Form1.Controls
    Dim btt As Button = TryCast(control, Button)
    If btt IsNot Nothing Then
        ' Perform action
    End If
Next
Run Code Online (Sandbox Code Playgroud)

然而,这并没有对工作的MenuItem小号,因为它们是在所有的WinForms控件,它们不是存储形式在Controls集合.

您需要迭代表单的Menu.MenuItems属性.