VB .NET ArrayI的MenuItems列表

时间:2014-08-24 16:28:26

标签: .net vb.net visual-studio visual-studio-2008

我想在VB .NET中收集一些控件列表中的一些MenuItems,以便轻松管理其中的许多控件。以下代码使用CheckBox作为例子:

dim myMenuList() as Control
myMenuList = New Control() {MenuItem1, MenuItem2, MenuItem3, MenuItem4}

...但是以这种方式使用它,使用MenuItem,Visual Studio会给我这个错误:

It is impossible to convert from 'System.Windows.Forms.MenuItem' to 'System.Windows.Forms.Controls'

我的代码出了什么问题?我以为MenuItem也是一个控件。 如何制作MenuItems列表?

提前致谢,

再见 hwktest

2 个答案:

答案 0 :(得分:1)

  

我的代码出了什么问题?我认为MenuItem也是一个控件。

MenuItem 不是从 Control 派生的。查看继承层次结构,您将看到最后一个公共类是Component ..

Control:

  • System.Object的
    • System.MarshalByRefObject
      • System.ComponentModel.Component
        • System.Windows.Forms.Control的

MenuItem:

  • System.Object的
    • System.MarshalByRefObject
      • System.ComponentModel.Component
        • System.Windows.Forms.Menu
          • System.Windows.Forms.MenuItem
  

如何制作MenuItems列表?

像这样:

Dim myMenuList As New List(Of MenuItem) From {MenuItem1, MenuItem2, MenuItem3, MenuItem4}

如果您愿意,可以使用数组:

Dim myMenuList As MenuItem() = {MenuItem1, MenuItem2, MenuItem3, MenuItem4}

答案 1 :(得分:0)

由于MenuItem不是基于Control而是基于Component Class的Windows.Forms.Menu类,因此最好的选择是找到一个共同的祖先,在这种情况下它将是{{3} }。

尝试这样的事情。

Imports System.ComponentModel

Public Class Form1

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

        Dim MenuItem1 As New MenuItem
        Dim MenuItem2 As New MenuItem
        Dim MenuItem3 As New MenuItem
        Dim MenuItem4 As New MenuItem
        Dim button1 As New Button
        Dim myMenuList() As Component = New Component() {MenuItem1, MenuItem2, MenuItem3, MenuItem4, button1}
    End Sub
End Class