.net中的vb6控件数组?

时间:2011-04-21 00:15:52

标签: .net vb6 vb6-migration

.Net中是否支持控件数组?我们正在谈论将遗留应用程序从VB6转换为.Net。该应用程序有很多控制数组。如果.Net支持控制数组,我已经阅读了不同的文章。

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

另外,如果这可能是直接转换?如果不是,为了实现这一目标,人们必须跳过什么火焰箍?

谢谢!

4 个答案:

答案 0 :(得分:2)

无法进行“直接转换”,但您可以采用不同的方式创建控件数组:Creating Control Arrays in Visual Basic .NET and Visual C# .NET

答案 1 :(得分:2)

VB.NET对控件数组没有任何问题。唯一缺少的是设计师不支持它们。轻松解决代码问题。像这样:

Public Class Form1
    Private TextBoxArray() As TextBox

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

End Class

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我认为我找到了解决方案,我不是唯一一位挣扎于此限制的前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

我出于方便的原因使用了List,但是使用该代码,您可以在设计时创建所需的控件,同时将“index”保留为最后一个字符(标签 1 ,标签 2 ,...,标签 N

Many labels in a window form

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

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