.net net中的vb6控件数组?

.net net中的vb6控件数组?,.net,vb6,vb6-migration,.net,Vb6,Vb6 Migration,.Net是否支持控制阵列?我们正在讨论将旧版应用程序从VB6转换为.NET。这个应用程序有很多控件数组。如果.NET支持控件数组,我读过不同的文章 如果.Net像VB6一样支持控制数组,有人能给我一个明确的答案吗?这是最新版本的.Net 4.0吗?还是有版本限制 此外,如果这是可能的,它是直接转换吗?如果不是的话,要实现这一点,你必须跳出什么样的火焰环?不可能进行“直接转换”,但你可以用另一种方式创建控件数组:你可以有控件数组,但它们不像vb6中的控件数组那样内置。但是,您可以创建控件数组或使用

.Net是否支持控制阵列?我们正在讨论将旧版应用程序从VB6转换为.NET。这个应用程序有很多控件数组。如果.NET支持控件数组,我读过不同的文章

如果.Net像VB6一样支持控制数组,有人能给我一个明确的答案吗?这是最新版本的.Net 4.0吗?还是有版本限制


此外,如果这是可能的,它是直接转换吗?如果不是的话,要实现这一点,你必须跳出什么样的火焰环?

不可能进行“直接转换”,但你可以用另一种方式创建控件数组:

你可以有控件数组,但它们不像vb6中的控件数组那样内置。但是,您可以创建控件数组或使用类似于vb6的统一事件处理程序。

VB.NET在控件数组方面没有问题。唯一缺少的是设计师不支持它们。轻松处理代码。像这样:

Public Class Form1
    Private TextBoxArray() As TextBox

    Public Sub New()
        InitializeComponent()
        TextBoxArray = New TextBox() { TextBox1, TextBox2, TextBox3 }
    End Sub

End Class

我想我找到了解决方案,我不是唯一一个曾与这个限制作斗争的前VB6开发人员。很久以前,我尝试迁移软件,但失败了,因为它对控制阵列有很强的依赖性。我阅读了许多论坛,并能够编写以下简单代码:

Public Class Form1

'To declare the List of controls
Dim labels As New List(Of Label)()

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'To get all controls in the form
    For Each control In Me.Controls
        'To search for the specific type that you want to create the array 
        If control.[GetType]().Name.Contains("Label") Then
            'To add the control to the List
            labels.Add(DirectCast(control, Label))
        End If
    Next
    'To sort the labels by the ID
    labels = labels.OrderBy(Function(x) x.Name).ToList()
End Sub
End Class
出于方便的原因,我使用了一个列表,但使用这段代码,您可以在设计时创建所需的控件,同时将“索引”保留为最后一个字符(label1,label2,…,labelN

稍后,您可以使用循环迭代它们,并在眨眼之间添加它们。接下来,您将能够从具有标签(0)、标签(1)等的对象操纵它们


我希望这段代码将来能帮助更多的程序员。

我注意到这篇文章是2003年写的。我想4.0也支持这一点?+1这是一篇好文章。现在是2011年,一个明显的改进是使用泛型。与其为每个控件类型创建一个新类,还不如使用一个泛型类来完成大部分工作。可能会有一个通用的
BaseControlArray(Of T)
,它继承了
List(Of T)
,而不是本文中的
CollectionBase
。然后,
ButtonArray
将继承
BaseControlArray(按钮的)
并公开事件,根据控件的类型,事件会有所不同。。。。此外,Microsoft.VisualBasic.Compatibility库还包括一些控件阵列的替代品,但它已被删除在.Net 4中,因此您可能希望避免使用它。它由微软的VB6->VB.Net升级向导自动使用,该向导已在VS2010中删除。在2003年写这篇文章时,Microsoft.VisualBasic.Compatibility没有包含这些替换项-现在库已经被删除,这篇文章看起来又有用了!当你说“你可能希望避免它”。您指的是兼容库还是.Net 4或控制阵列?这只是问题的一部分。OP也需要统一的事件处理程序。参见这些近乎重复的事件处理程序,VB6->VB.Net很少是一个直接的转换,有很多关于火焰环的讨论。在接近篮圈(或阅读一些帖子)之前,您可能希望订购一些阻燃内衣:(可能是