Массивы управления vb6 в .net?

Поддерживаются ли управляющие массивы в .Net? Речь идет о преобразовании устаревшего приложения с VB6 на .NET. В приложении много контрольных массивов. Я читал разные статьи, которые отличаются, если .NET поддерживает массивы элементов управления.

Может ли кто-нибудь дать мне окончательный ответ, поддерживает ли .Net массивы управления, такие как VB6? Это для последней версии .Net 4.0? Или есть ограничение по версии?

Кроме того, если это возможно, это прямое преобразование? Если бы не через какие пылающие обручи пришлось бы перепрыгнуть, чтобы это произошло?


person webdad3    schedule 21.04.2011    source источник


Ответы (4)


«Прямое преобразование» невозможно, но вы можете создавать массивы элементов управления другим способом: Создание массивов элементов управления в Visual Basic .NET и Visual C # .NET

person Mitch Wheat    schedule 21.04.2011
comment
Я заметил, что эта статья написана в 2003 году. Могу ли я предположить, что 4.0 это тоже поддерживает? - person webdad3; 21.04.2011
comment
+1 Хорошая статья. Сейчас 2011 год, и одним из очевидных улучшений является использование дженериков. Вместо того, чтобы создавать новый класс для каждого типа элемента управления, может быть общий класс, который будет выполнять большую часть работы, связанной с осликом. Может быть, может быть общий BaseControlArray(Of T), который наследует List(Of T), а не CollectionBase, как в статье. Затем ButtonArray унаследует BaseControlArray(Of Button) и предоставит события, которые будут разными в зависимости от типа управления. - person MarkJ; 21.04.2011
comment
... Также библиотека Microsoft.VisualBasic.Compatibility включает в себя некоторые замены для массивов элементов управления, но она была исключена в .Net 4, поэтому вы, возможно, захотите этого избежать. Он автоматически использовался Microsoft VB6 - ›Мастер обновления VB.Net, который был удален в VS2010. В 2003 году, когда писалась статья, Microsoft.VisualBasic.Compatibility не включала эти замены - теперь, когда библиотека была удалена, эта статья снова выглядит полезной! - person MarkJ; 21.04.2011
comment
Когда вы говорите, что можете этого избежать. Вы имеете в виду библиотеку совместимости или .Net 4 или массивы Control? - person webdad3; 21.04.2011

VB.NET не имеет проблем с массивами элементов управления. Не хватает только того, что дизайнер их не поддерживает. Легко работал с кодом. Нравится:

Public Class Form1
    Private TextBoxArray() As TextBox

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

End Class
person Hans Passant    schedule 21.04.2011
comment
Только часть головоломки. OP также потребуются унифицированные обработчики событий. - person MarkJ; 21.04.2011

У вас могут быть массивы элементов управления, но они не так встроены, как массивы элементов управления в vb6. Однако вы можете создавать массивы элементов управления или иметь унифицированные обработчики событий, подобные vb6.

person rerun    schedule 21.04.2011

Думаю, я нашел решение, я не единственный бывший разработчик 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

Я использовал список по удобным причинам, но с помощью этого фрагмента кода вы можете создавать во время разработки нужные вам элементы управления, сохраняя индекс в качестве последних символов (метка 1, метка 2, ..., ярлык N)

Множество ярлыков в форме окна

Позже вы можете повторять их с помощью цикла и добавлять в мгновение ока. Затем вы сможете управлять ими из объекта с помощью меток (0), меток (1) и т. Д.

Я надеюсь, что этот фрагмент кода поможет большему количеству программистов в будущем.

person Federico Navarrete    schedule 06.03.2017