繁体   English   中英

.net 中的 vb6 控制数组?

[英]vb6 control arrays in .net?

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

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

另外,如果这是可能的,它是直接转换吗? 如果不是的话,人们必须跳过什么火圈才能实现这一目标?

“直接转换”是不可能的,但您可以以不同的方式创建控件数组:在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组

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

Public Class Form1
    Private TextBoxArray() As TextBox

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

End Class

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

我想我找到了解决方案,我不是唯一一个与此限制作斗争的前 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,但是使用那段代码,您可以在设计时创建所需的控件,同时将“索引”保留为最后一个字符(标签1 、标签2 、...、标签)

窗口形式中的许多标签

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM